Brute force是大家在学习算法之前都能想到的最低效的一种sma。
就是暴力匹配,每一步,比较整个串
本来不应该再多此一举介绍它,但是某些同志在情急之下还是会用到的
我这儿在提供两种小小的变形,供诸位参考
这是最常见的形式:
//Brute force algorithm int brute_force_search(const char* text,const int text_len,const char* pattern,const int pattern_len) { int i,j; for (i=0;i<=text_len-pattern_len;i++){ for (j=0;j<pattern_len;j++){ if (text[i+j]!=pattern[j]){ break; } } if (j>=pattern_len){ return j; } } return -1; }
变形一:就是对内层的循环做些改变,而这种改变可以用在平时的编程中,算是一个小技巧
int brute_force_search(const char* text,const int text_len,const char* pattern,const int pattern_len) { int i,j; for (i=0;i<=text_len-pattern_len;i++){ //a substitute of “for” loop for (j=0;j<pattern_len&&text[i+j]==pattern[j];j++){} if (j>=pattern_len){ return j; } } return -1; }
变形二:利用字符串指针的性质
//maybe a better one int brute_force_search_v1(const char* text,const int text_len,const char* pattern,const int pattern_len) { const char* ptext=text; while((*ptext)!='/0'){ if (memcmp(ptext,pattern,pattern_len)==0){ return ptext-text; } ptext++; } return -1; }