《程式設計珠璣》學習總結2 變位詞

2021-06-06 08:21:50 字數 1426 閱讀 2534

第二章主要圍繞三個問題

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.解決思路 第一 程式標識單詞,第二 程式排序標識後的檔案,第三 程式將這些單詞壓縮為每個變位詞類一行的形式 下面是...