如何從文件構建樹?我希望能夠從文件中讀取它們,然後添加到適當的水平java中的trie構建
回答
在我看來,你正在試圖執行trie。
在這裏看到java的一個很好的實現:http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/trie/Trie.java
添加
在根開始,搜索第一(或電流)的來信。如果找到該字母,則轉到該節點並搜索下一個字母。如果未找到該字母,則搜索與當前字母匹配的單詞,如果有相似的單詞,則將當前字母添加爲新節點,然後將該單詞移到該單詞下方,否則添加該單詞。
注意:這將導致爲搜索更優化的樹,然後顯示示例中顯示的樹。 (金剛和調整將在另一個「一」節點進行分組)
更新:看看維基百科文章Trie
@ user1747976爲您添加到何處首先檢索,然後將其添加。如果樹中沒有添加它。看到更新的答案。 – 2013-04-08 18:35:24
如果將其限制爲兩個級別,則會顯示問題中顯示的樹。 – 2013-04-08 18:48:07
@ user1747976如果您強制執行兩個級別並且只使用兩個級別,則它將按照示例進行操作。在添加之前,您仍然需要搜索正確的節點以將其添加到(如果需要,可以創建它)。 – 2013-04-08 18:52:22
如果你有樹只有兩個級別葉前(實際單詞),你可以簡單地從具有28個元素的數組開始,並將這些字母轉換爲索引(即a == 1,b == 2等)。數組的元素可以是一些包含完整單詞的集合/列表。您可以懶洋洋地創建數組和列表(即創建根數組,但對其他數組和列表有空值,然後在需要時創建數組/列表)。
我讀的規則,你應該遵循正確嗎?
P.S.我認爲使用全尺寸的陣列在空間上不會太浪費,它應該是非常快的地址
更新:@ user1747976,以及每個陣列需要約28 * 4或28 * 8位+ 12字節overhead。希望你使用壓縮操作,所以它是每個陣列28 * 4 + 12 = 116bytes。現在,這取決於您是否想要提高內存效率或處理效率。爲了提高內存效率,你可以使用某種類型的hashmap來代替數組,但我不確定額外的開銷會比使用數組少。處理將肯定會更糟。 根據樹部門的要求,您需要多次使用一些巧妙的循環。用於插入樹的一些難看的僞代碼:
root=new Object[28];
word="something";
pos = root;
wordInd=1;
for (int i=1; i<=TREE_DEPTH ; i++) {
targetpos = letterInd(letter(wordInd,word));
if (i==TREE_DEPTH) {
if (pos[targetpos] == null) pos[targetpos] = new HashSet<String>();
(Set) pos[targetpos].add(word);
break;
} else {
if (pos[targetpos] == null) pos[targetpos] = new Object[28];
wordInd++;
pos = pos[targetpos];
}
}
您可以用於檢索單詞的類似循環。
@ user1747976,看到我更新的答案,確保你明白你在做什麼,因爲我幾乎已經熟睡了,並且已經修復了兩次 – akostadinov 2013-04-08 19:22:41
'letterInd()'給出了你給一個字母的索引(即「a 「它會返回1)。 'letter(wordInd,word)'會返回單詞'word'中索引爲'wordInd'的字母。它不是創建新的對象,而是創建新的數組或節點,如果你這樣調用它的話。更新:我看到你有一個'Node'類,但它會更簡單和更少的開銷,沒有一個單獨的節點類,但使用一個簡單的數組。否則,可能會將所有內容包裝在課堂中,這取決於你想如何做。我剛剛給你一個例子循環添加一個單詞。 – akostadinov 2013-04-08 19:36:29
@ user1747976,對不起,更正了代碼 – akostadinov 2013-04-08 20:13:33
- 1. Java中的Trie數據結構
- 2. Trie數據結構 - Java
- 3. Java中有Trie嗎?
- 4. Java Trie優化
- 5. Java Trie Hang Up
- 6. Trie樹中的Trie節點的析構函數
- 7. 需要多少時間來構建trie
- 8. Trie數據結構
- 9. 在Java中實現Trie
- 10. 在java中執行patricia trie
- 11. Trie數據結構和Java中的有效搜索
- 12. 試圖在java中實現trie數據結構
- 13. 利用trie數據結構
- 14. 以下步驟在Trie中構建DAWG結果。爲什麼?
- 15. 在Trie結構中添加單詞C
- 16. 前綴匹配/ trie for Java?
- 17. 如何在Java中打印Trie?
- 18. Java:在Trie中存儲子字符串
- 19. 構造一個trie的並行算法?
- 20. Haskell中的Spaceleak trie
- 21. 如何在Python中創建TRIE
- 22. Trie與Trie發生衝突
- 23. Java中的SQL構建器
- 24. 實現一個TRIE數據結構
- 25. 如何從java中的trie中打印出發現的單詞?
- 26. Trie樹
- 27. Python中的Trie(前綴樹)
- 28. C++中的後綴Trie
- 29. Trie中的最短路徑
- 30. 構建URL - Java的
謝謝老兄,我會看看它 – Dodi 2013-04-09 16:51:32
非常有用,解決了我的問題! – Dodi 2013-04-09 17:49:06
我很高興我可以幫忙;) – ciastkoo 2013-04-09 17:50:56