2014-02-20 136 views
3

我的主要想法是找到一個算法(Java),它將某人在JoptionPane中輸入的隨機字母作爲例子,然後通過按下「查找單詞」立即進行搜索,我希望該程序能夠導出所有這些與存儲在.txt文件中的字典匹配的字詞。字匹配算法

我正在努力尋找該算法。

例如:

考慮到,我們得到了一個拼字遊戲比賽下列字母:

A,O,P,T,E,Z,E,W

我會喜歡找到一個Java代碼或至少一個算法,以便從英文字典.txt文件中查找具有這些字母但沒有其他字的所有單詞。如果我輸入「a,p,p」,我希望得到單詞「app」而不是(app「s」)。 因此...總結一下,我怎樣才能比較存儲在.txt文件中的單詞的字母,從而得到與我給定字母匹配的特定單詞?

+2

...你到目前爲止嘗試過什麼?任何代碼可用? –

+1

請顯示一些代碼,以顯示您在開發此算法的過程中。或者至少在你的思考過程中如何實現它。 – Shrey

+0

我覺得這可以用其他語言做得更好。 –

回答

3

有不同的方法可以做到這一點,具體取決於你想要的效率。

一個簡單但效率不高的方法是,接收字符串並遍歷整個字典文件,檢查每行是否符合要求:檢查輸入的每個字符是否存在於dict文件中-line(對其進行臨時複製並從中刪除字符,以便每個可用的字母只能使用一次)。

一個更難但有效的方法是,將字典文件預處理爲Trie(前綴樹)[wikipedia]。然後,您可以使用輸入字符串的所有排列作爲通過Trie的路線圖。

編輯:記爲馬爾科Topolnik指出,計算輸入字符串的所有排列將是昂貴的 - 所以要避免的是:在每一個步驟,你只檢查其中的字母仍然可以從輸入字符串和那些你只保留在Trie的下一個分支中。

+1

但排列計數隨着字符串長度而爆炸。這似乎不是一個好的追索權。對字符串中的字符進行排序,這將消除多餘的自由度,似乎是最好的方式。 –

+0

@MarkoTopolnik你不需要計算排列:在每一步你只檢查哪些字母仍然可用。 **和**對於那些你只保留那些在Trie中作爲下一個分支的人。 –

+0

但是你仍然有一個通過線索的混亂路徑,回溯。搜索已排序的字符串顯然是優越的,但它需要一個自定義的Trie,它保存所有在每個位置按字符串排序的實際條目。 –

1

這可通過以下方式進行: -

1.首先檢查確切的詞在字典或not.If它存在,那麼你可以將它們存儲在數組或列表,只要你想,並顯示it.for前: -
通過在JOptionPane中鍵入「app」,它將顯示蘋果或應用以及更多相關單詞。
2.如果錯誤表示不匹配字典中的任何單詞,則應用edit distance

+0

如何查找確切單詞找到以/開頭/包含這些字母和/或相關單詞的單詞?或者是「通過鍵入」應用程序「......」應該在第二點之下/之後?你想檢查每個單詞的編輯距離嗎?這將是非常昂貴的,因爲信件順序無關緊要,你不能插入字母,這將是複雜的方式。 – Dukeling

+0

我只給出了我知道的解決方案! – Devavrata

+0

我怎麼能夠做「檢查」?你腦海中有算法嗎?在java中? 我的想法是,當我輸入「a p p l e」給我顯示文字: 應用程序,蘋果,飛躍,而不是單詞「應用程序」,只有當我給額外的字母「s」。 – Ane