gpt4 book ai didi

C 两个函数之间的时间差

转载 作者:行者123 更新时间:2023-11-30 18:40:25 27 4
gpt4 key购买 nike

我有两个简单的代码函数来比较两个字符串。

该策略是按顺序比较短字符串和长字符串。

例如,

string1 = "ABCDABCDEFGAHAD",
string2 = "ABCD"

然后通过滑动string2来比较string1string2,直到string2到达的末尾string1 的结尾

这是我使用的功能第一个是

void compare1(char* src , char* target , int src_size , int target_size , int* score){
int i , j;
for ( i = 0 ; i < src_size - target_size ; i++){
for(j=0; j < target_size ; j++){
if(src[i+j] == target[j]){
score[i]++;
}else{
continue;
}
}
}
}

第二个是

void compare2(char* src , char* target , int src_size , int target_size , int* score){
int i , j;
char* dest = (char*)malloc(sizeof(char)*(target_size));
for( i = 0 ; i < src_size - target_size ; i++){
strncpy(dest,src,target_size);
for( j = 0 ; j < src_size ; j++){
if(dest[j] == target[j]){
score[i]++;
}else{
continue;
}
}
}
free(dest);
}

这两个给了我不同的时间,分别是

8393.00 ms from compare1 
4415.00 ms from compare2

是什么造成了这个时间差异?

相对于函数变量中的 src 和 target,两个字符串的长度分别为 1024*1024*10 和 128。

最佳答案

你的第二个函数是错误的。它应该从 src + i 复制,而不是从 src 复制。此外,嵌套循环应该针对 desttarget_size 元素进行,而不是针对代码中的 src_size 进行。结果是:

void compare2(char* src , char* target , int src_size , int target_size , int* score){
int i , j;
char* dest = (char*)malloc(sizeof(char)*(target_size));
for( i = 0 ; i < src_size - target_size ; i++){
strncpy(dest,src + i,target_size);
for( j = 0 ; j < target_size ; j++){
if(dest[j] == target[j]){
score[i]++;
}else{
continue;
}
}
}
free(dest);
}

备注1:else continue;没有用!备注 2:您可以使用 memcpy 复制字符串(因为您知道长度并且不使用终止符 '\0')。

关于C 两个函数之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com