Mam problem ze zrozumieniem koncepcji trie. Z „trie” wpisu wikipedia mam to zdjęcie: Jak znaleźć najdłuższe słowo w trie?
Jeśli widzę to poprawnie, wszystkie węzły liścia w trie będą mieli całe słowo wyjaśnienia i wszystkie węzły nadrzędne przytrzymaj znaki prowadzące do ostatecznego liść węzeł. Tak więc, jeśli mam klasy o nazwie DigitalTreeNode zdefiniowane przez
public class DigitalTreeNode {
public boolean isAWord;
public String wordToHere; (compiles all the characters in a word together)
public Map<String, DTN> children;
}
Gdybym chciał wdrożyć metodę, która zwraca najdłuższy wyraz w trie byłoby po prostu obejmować znalezienie najdłuższy wyraz w każdym węźle liści? Jak zaimplementować metody takie jak:
public static String longestWord (DigitalTreeNode d);
Zgaduję, że obejmuje utworzenie zmiennej najdłuższy ciąg, rekursywnie przechodzi każdego węzła i sprawdzenie czy jest to słowo, jeśli jest to słowo i to długości jest większa niż najdłuższa zmienna, a następnie najdłuższa = nowa długość słowa. Ale nie jestem pewien, w jaki sposób dopasowują się dzieci z mapy. Jak znaleźć najdłuższe słowo w dowolnym triku, używając powyższej metody?
Co złożoność są ty szukasz? A [BFS] (http://en.wikipedia.org/wiki/Breadth-first_search) na strukturze może łatwo znaleźć go w 'O (| S | * n)', gdzie | S | to średnia długość łańcucha. Nie sądzę, że możesz zrobić to lepiej ze standardowym trie, ale jeśli potrafisz manipulować DS, można to zrobić lepiej, zakładam. – amit
Patrząc na każdy ciąg znaków i zakładając, że są | S | znaków, nie sądzę, żebym mógł zrobić o wiele lepiej niż złożoność O (| S | * n). – user1766888