如示例:
input:
單詞檔案
output:
同位詞歸類檔案
constrain:
歸類所有為同位詞的單詞
何為同位詞:單詞字母相同,但字母的順序不同
:pans
和snap
是同位詞
pots
、stop
和tops
是同位詞,
還有這些:
第一步:對每個單詞進行簽名。如這些單詞:
我們使用每個單詞的字母序列(按字母順序進行排列)作為它的個人簽名,如
pans
的簽名是
anps
,這樣我們可以得到上圖右側的簽名序列。
第二步:對簽名序列進行排序。如下圖:
通過對簽名序列進行排序後,大家可以發現同位詞聚在了一起,我們只需要將具有相同簽名的單詞合併在一起即可。
第三步:對排序後的簽名序列進行擠壓:
這樣我們通過三步即完成了同位詞的查詢過程,實現**其實很簡單,但其演算法思想給人眼前一亮的感覺。
#include
#include
#include
#define wordmax 100
int charcomp (char *x, char *y)
int main()
return 0; }
#include
#include
#include
#define wordmax 100
int main()
printf("/n");
return 0;}/*
簽名檔案的源程式*/
#include
#include
#include
#define wordmax 100
/*qsort
的字元排序函式*/
int charcomp (char *x, char *y)
int main()
return 0; }
/*本程式將簽名相同的單詞序列進行擠壓,從而使同位詞在一行上
*/#include
#include
#include
#define wordmax 100
int main()
printf("/n");
return 0;
}sign < dictionary.txt | sort | squash > result.txt
說明:l
將單詞檔案
dictionary.txt
輸入到sign
中(sign < dictionary.txt);
l使用系統工具
sort
完成排序工作
(| sort);
l將排序後的結果,作為
squash
的輸入進行擠壓,擠壓後的結果輸出到
result.txt
中(| squash > result.txt
);
程式設計珠磯學習筆記(7) 改善效能
使用各種方法對效能進行改善。這裡只簡單列出書內的一些效能優化方法和結果。更多請參考 乙個天體物理學研究方面的程式不斷優化的結論 更多還請參考原著 p58 大家可以以此作為優化程式的參考 1 優化的順序 2 優化的著眼點。1問題定義 問題說明和效率具有微秒的互動作用。良好的說明有時會很好的提供使用者認...
程式設計珠磯學習筆記(1) 位排序
include define bitsperword 32 define shift 5 define mask 0x1f define n 10000000 int a 1 n bitsperword inline void set bit int i inline void clear bit ...
程式設計珠磯第一章閱讀筆記
在讀第一章結束之後自己的一些體會和感受 理解到的東西 我認為對自己有用的東西 程式設計開始之前,一定要問問自己想要幹什麼,明確自己的想要做的東西。為什麼這莫做,是什麼原因導致的這莫做。對自己的輸入和輸出一定要明確。從中學到了程式設計開始的時候一定要有緊缺的問題描述。你想要輸入什麼,以神魔楊的型別進行...