程式設計珠磯學習筆記(4) 擠壓法查詢變位詞

2021-05-07 12:47:48 字數 1771 閱讀 9391

如示例:

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 ...

程式設計珠磯第一章閱讀筆記

在讀第一章結束之後自己的一些體會和感受 理解到的東西 我認為對自己有用的東西 程式設計開始之前,一定要問問自己想要幹什麼,明確自己的想要做的東西。為什麼這莫做,是什麼原因導致的這莫做。對自己的輸入和輸出一定要明確。從中學到了程式設計開始的時候一定要有緊缺的問題描述。你想要輸入什麼,以神魔楊的型別進行...