第二章主要圍繞三個問題
1、給定乙個最多包含40億個隨機排列的32位整數的順序檔案,找出乙個不在檔案中的32位整數
2、給定乙個n元一維向量,迴圈左移i個位置,如n=8,i=3時,abcdefgh變為defghabc
3、如pots、stop和stops互為變位詞,每個單詞都可以通過其他單詞改變字母順序得到,找出字典中所有變位詞
對於1、主要考慮2分搜尋
如果考慮暴力解法,含有n個字母的單詞有n!種排列,還是很大的數量級的,書上是利用標誌單詞,標誌則為對單詞的字母進行排序後的結果,對字典遍歷並對每個單詞進行標記,還是很簡單的事情,然後集中相同標誌的單詞,具有相同標誌的單詞,就是互為變位詞了。
配套**的實現如下:
sign.c ,對每個單詞進行標記,通過呼叫stdlib.h的qsort對單詞進行快速排序
/* from 'programming pearls' by jon bentley */
/* sign.c -- sign each line of a file for finding anagrams
the input line "stop" gives the output line "opst stop"
*/#include #include #include #define wordmax 100
int charcomp(char *x, char *y)
int main()
return 0;
}排序使用shell的內建命令sort,可參考
輸出squah.c,不同標記就輸出乙個換行,相同標記則輸出單詞,使具有相同標記的單詞都在同一行
不得不說,linux的管道是個好東東,最終執行命令如下:
xia@ubuntu:~/perl$ ./sign < dict.txt | sort | ./squah > list
生成list檔案按照標誌排序好了,有多個單詞一行的則為變位詞了,如:
就這樣吧
程式設計珠璣 學習筆記 2 變位詞
變位詞 相同字母和字母數量,不同的組合順序。如單詞 stop tops 就是變位詞。思路 以單詞的 簽名 為鍵,以具有該鍵的單詞為值。實現 include include include include include include using namespace std mapanagram 簽...
程式設計珠璣 變位詞程式的實現
這個程式的實現有助於壓縮key的大小,使查詢效率更高 1.問題描述 給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。2.解決思路 程式設計珠璣的變位詞程式要按照三個步驟來執行,其中前乙個步驟程式的輸出作為下乙個步驟程式的輸入 第一 程...
程式設計珠璣 變位詞程式的實現
這個程式的實現有助於壓縮key的大小,使查詢效率更高 1.問題描述 給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。2.解決思路 第一 程式標識單詞,第二 程式排序標識後的檔案,第三 程式將這些單詞壓縮為每個變位詞類一行的形式 下面是...