2011-01-14 73 views
2

我正在用Java編寫一個簡單的程序。給定一組字母,它將列出與字母組合相匹配的所有單詞(超過2個字母)。
例如:
給定的單詞是病房。
結果應該是:病房DAW戰爭弧度
我有一個SQLite數據庫在最初形成巨大的列表Ø英語單詞和字母排序,這使選擇更快。我可以使用什麼模式來存儲單詞組合?


數據庫模式是這樣的:
詞典:{ID,字,長度}
字謎:{ID,字謎,長度}
anagram_dictionary:{ID,word_id,anagram_id}


在相同的例子:
當字原料被插入
它搜索ARW,結果還給戰爭

我的問題在於,每次我做搜索的時候就做我給出的字母combinations的數學。

對於示例它使此數學:!(!3 * 1)
4 /(!4 * 1)+ 4/= 5

我的問題是給定的字母長度是16.因此,我必須在16 +組合16 + 16 +組合16 + 1 +組合16在1

我需要改進該方法,因爲它需要年齡來給出一個簡單的結果,但我現在不怎麼樣?所以我嘗試在數據庫中存儲,但無法弄清楚如何?

在此先感謝

回答

2

林並不完全相信你的約束和資源,這將幫助我調整我回答,但在這裏它去...

當您輸入字典時,請執行一些預處理。就像CurtainDog所建議的那樣計算頻率。

現在,根據您的示例,您看起來像要查找給定單詞的子集。您可以搜索其組合,或者可以消除那些不適合該子集的組合。

從而

獲取字典從這個
,你定的字有A,所以跳過這封信從這個
,你定的字沒有一個B,所以返回不所有單詞由此得到一個B. ,你給定的單詞沒有C,所以返回所有沒有C. 的單詞,你的給定單詞有一個D,改進了格式,所以跳過這個字母
etc ...

看起來你的擔心似乎是運行時間越來越長,因爲你給定的單詞有更多的字母。 有了這個解決方案,運行時變得更好,更大的單詞和更糟糕的情況下 是(26-2)*(詞典中的字數)

0

在您的字典中,存儲每個字母的頻率。然後,只建立你的選擇,只返回字母頻率匹配的單詞(或者如果你想能夠返回部分字母則更小)

+0

我已經保存了某種頻率,但我仍然需要所有可能的字母組合以匹配頻率。我該如何改進? – 2011-01-14 03:06:07

+0

爲什麼你需要讓所有組合匹配頻率? – 2011-01-14 03:14:42

3

看起來最有效的方法是存儲單詞采用α有序鍵(你已經):

ADN - >和DNA celrstu - >集羣 等等

把你的輸入,按字母順序排列的字母,看看它,比賽。完成。

如果不回答你的問題,你可能需要調整你的問題有點措辭......

相關問題