Tôi cần triển khai Trie (bằng Java) cho một dự án đại học. Các Trie sẽ có thể thêm và loại bỏ Strings (cho giai đoạn 1).Triển khai Trie "Đơn giản"
Tôi đã dành vài giờ mỗi ngày (trong vài ngày qua) cố gắng tìm ra cách thực hiện điều này và XỬ LÝ một cách khốn khổ mỗi lần.
Tôi cần trợ giúp, ví dụ trên internet và sách giáo khoa của tôi (Cấu trúc dữ liệu và thuật toán trong Java của Adam Drozdek) không giúp ích gì.
Thông tin
lớp Node tôi đang làm việc với:
class Node { public boolean isLeaf; } class internalNode extends Node { public String letters; //letter[0] = '$' always. //See image -> if letter[1] = 'A' then children[1] refers to child node "AMMO" //See image -> if letter[2] = 'B' then children[2] refers to internal node "#EU" public TrieNode[] children = new TrieNode[2]; public TrieInternalNode(char ch) { letters = "#" + String.valueOf(ch);//letter[0] = '$' always. isLeaf = false; } } class leafNode extends Node { public String word; public TrieLeafNode(String word) { this.word = new String(word); isLeaf = true; } }
Và đây là mã giả cho chèn mà tôi cần phải làm theo: (cảnh báo nó là rất mơ hồ)
trieInsert(String K) { i = 0; p = the root; while (not inserted) { if the end of word k is reached set the end-of-word marker in p to true; else if (p.ptrs[K[i]] == 0) create a leaf containing K and put its address in p.ptrs[K[i]]; else if reference p.ptrs[K[i]] refers to a leaf { K_L = key in leaf p.ptrs[K[i]] do { create a nonleaf and put its address in p.ptrs[K[i]]; p = the new nonleaf; } while (K[i] == K_L[i++]); } create a leaf containing K and put its address in p.ptrs[K[--i]]; if the end of word k is reached set the end-of-word marker in p to true; else create a leaf containing K_L and put its address in p.ptrs[K_L[i]]; else p = p.ptrs[K[i++]]; } }
Tôi cần triển khai các phương pháp sau.
public boolean add(String word){...}//adds word to trie structure should return true if successful and false otherwise public boolean remove(String word){...}//removes word from trie structure should return true if successful and false otherwise
tôi không thể tìm thấy mã giả cho loại bỏ, nhưng nếu chèn không hoạt động xóa sẽ không giúp tôi.
Đây là hình ảnh về cách Trie mà tôi cần triển khai như thế nào.
Tôi biết rằng các Trie vẫn sẽ không hiệu quả nếu được thực hiện như thế này, nhưng tại thời điểm này tôi không cần phải lo lắng về việc này.
Cuốn sách này cung cấp một thực hiện tương tự như những gì tôi cần phải làm nhưng không sử dụng hết từ char ('$') và chỉ lưu trữ những lời mà không tiền tố của họ trong con các nút
http://mathcs.duq.edu/drozdek/DSinJava/SpellCheck.java
chế
- tôi cần phải thực hiện các Trie trong JAVA.
- Tôi không thể nhập hoặc sử dụng bất kỳ cấu trúc dữ liệu tích hợp nào của Java. (ví dụ: không có Bản đồ, HashMap, ArrayList, vv)
- Tôi có thể sử dụng Mảng, Kiểu nguyên thủy Java và Chuỗi Java.
- Trie phải sử dụng ký hiệu
$
(đô la) để biểu thị phần cuối của từ. (Xem hình dưới đây)
- tôi có thể asume mà bây giờ từ có chứa biểu tượng
$
sẽ được chèn vào. - Tôi cần triển khai Trie theo phong cách tương tự như sách.
- Trường hợp từ không quan trọng, ví dụ:tất cả các từ sẽ được coi là chữ thường
- Trie chỉ được lưu trữ ký tự kết thúc và các ký tự áp dụng cho một từ chứ không phải toàn bộ bảng chữ cái (như một số cách triển khai).
Tôi không mong đợi bất kỳ ai thực hiện việc triển khai cho tôi (trừ khi họ có ai nói dối: P) Tôi thực sự cần trợ giúp.
Việc triển khai Trie này đáp ứng nhu cầu của bạn ngoại trừ ký tự kết thúc "$". Bạn nên sử dụng nó làm điểm bắt đầu hoặc tham chiếu. https://github.com/phishman3579/java-algorithms-implementation/blob/master/src/com/jwetherell/algorithms/data_structures/Trie.java – Justin
@Justin Cảm ơn bạn đã liên kết nhưng tiếc là điều này không tối ưu nhưng tôi có thể có thể sử dụng một số chức năng. Mã được liên kết chỉ lưu trữ một char tại một thời điểm trong mỗi nút và không bao giờ toàn bộ từ trong một nút lá. Vì vậy, thay vì 'A-> AMMO' IT làm 'A-> M-> M-> O' (kết thúc từ cho' O' = true) – user3553706
Ahh, tôi không nhận ra nó nhỏ gọn. Hãy xem liên kết này từ cùng một trang web: https://github.com/phishman3579/java-algorithms-implementation/blob/master/src/com/jwetherell/algorithms/data_structures/RadixTrie.java – Justin