Bir üniversite projesi için bir Trie (Java'da) uygulamanız gerekiyor. Trie, Dizeleri ekleyebilmeli ve çıkarabilmelidir (faz 1 için)."Basit" Trie Uygulaması
Her gün birkaç saat harcadım (son birkaç gündür) bunun nasıl yapılacağını anlamaya çalışıyorum ve her seferinde başarısızlıkla sonuçlandı.
Bazı yardıma ihtiyacım var, internetteki örnekler ve ders kitabım (Java'da Veri Yapıları ve Algoritmaları Adam Drozdek tarafından) yardımcı olmuyor. Ben ile çalışıyorum
Bilgi
Düğüm sınıfları: Burada
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; } }
Ve izlemeniz gereken eki için sözde kodu:
(çok muğlak uyarısı) Aşağıdaki yöntemleri uygulamam gerek.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++]]; } }
-
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
Ben çıkarma işleminde sözde kodunu bulmak, ancak ekleme silme işe yaramazsa alışkanlık bana yardımcı olamaz.
İşte uygulamak zorunda olduğum Trie'nin nasıl göründüğüne dair bir görüntü.
Böyle uygulanması durumunda Trie hala verimsiz olacağından farkındayım, ancak şu anda bu konuda endişelenmenize gerek yok.
kitap yapmam gerekenler benzer ancak kelime char ('$') ucunu kullanın ve yalnızca çocukta önekleriyle olmadan kelimeleri saklar vermez
http://mathcs.duq.edu/drozdek/DSinJava/SpellCheck.java
düğümlerin bir uygulamasını sağlar
Kısıtlamalar
Ben JAVA tray uygulamak gerekir.
$
(dolar) sembolü kullanmalıdır.- Ben
$
sembolü içeren şimdi kelimeyi eklenecektir asume olabilir. - Trie'i, kitapla aynı stille uygulamanız gerekiyor.
- Kelimelerin önemi önemli değil örn.Tüm kelimeleri
- Trie sadece sonu kelime karakterini ve bir kelime için geçerli karakterler değil (bazı uygulamalarda gibi) tüm alfabe saklamalısınız küçük olduğu kabul edilecektir.
Uygulamanın benim için birisini yapmasını beklemiyorum (etrafta bir tane bulunmadıkça: P) Gerçekten yardıma ihtiyacım var. Her şeyden
Bu Trie uygulama "$"-sonu sözcük karakteri hariç ihtiyaçlarınızı karşılar. Onu bir başlangıç noktası veya referans olarak kullanmalısınız. https://github.com/phishman3579/java-algorithms-implementation/blob/master/src/com/jwetherell/algorithms/data_structures/Trie.java – Justin
@Justin Bağlantı için teşekkürler, ancak maalesef bu uygun değil ama Bazı işlevselliği kullanabilecektir. Bağlantılı kod, her düğümünde bir zaman ve bir yaprak düğümündeki tüm sözcüğü hiçbir zaman bir kez depolar. – user3553706
Ahh BT yapar 'A-> M-> M-> O' (' O' = true için kelimenin sonu) AMMO' Bunun yerine 'A->, ben bunun kompakt olduğunu fark etmedi. Aynı siteden bu bağlantıyı bir göz atın: https://github.com/phishman3579/java-algorithms-implementation/blob/master/src/com/jwetherell/algorithms/data_structures/RadixTrie.java – Justin