[英]C time difference between two functions
我有兩個比較兩個字符串的簡單代碼函數。
策略是依次比較短字符串和長字符串。
例如,
string1 = "ABCDABCDEFGAHAD",
string2 = "ABCD"
然后通過滑動string2
比較string1
和string2
,直到到達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
復制。 同樣,嵌套循環應該針對dest
的target_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'
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.