簡體   English   中英

C兩個函數之間的時差

[英]C time difference between two functions

我有兩個比較兩個字符串的簡單代碼函數。

策略是依次比較短字符串和長字符串。

例如,

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' )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM