Frage: Sie haben ein Smartphone und Sie haben die Kontakt App geöffnet. Sie möchten einen Kontakt suchen. sagen wir mal manmohan
. aber du erinnerst dich nicht an seinen vollen Namen. du erinnerst dich nur an mohan
, also hast du angefangen zu tippen. In dem Moment, in dem Sie "m" eingeben, beginnt die Kontakt-App nach einem Kontakt zu suchen, der den Buchstaben "m" enthält. Angenommen, Sie haben Namen in Ihrer Kontaktliste gespeichert. ("manmohan", "manoj", "raghav","dinesh", "aman")
Jetzt zeigt der Kontakt manmohan,manoj and aman
als Ergebnis an. Das nächste Zeichen, das Sie eingeben, ist 'o' (bis jetzt haben Sie "mo" eingegeben) jetzt sollte das Ergebnis "man mo han" sein. Wie würden Sie eine solche Datenstruktur implementieren?Suchen aller Namen, die mit einer Abfrage übereinstimmen: Wie verwendet man einen Suffixbaum?
Mein Ansatz war KMP anwenden, wie Sie für Muster "M" dann "Mo" in allen verfügbaren Kontakt suchen. Zeigen Sie dann die Zeichenfolge an, die die Übereinstimmung aufweist. Aber Interviewer sagte, es ist nicht effizient. (Ich konnte mir keinen besseren Ansatz vorstellen.) Bevor er ging, sagte er, dass es einen Algorithmus gibt, der helfen wird. Wenn du es weißt, kannst du es lösen. Ich konnte es nicht tun. (Bevor ich ging, fragte ich nach dem Standard-Algorithmus. Interviewer sagte: Suffix-Baum). kann mir bitte jemand erklären wie ist es besser? oder welcher der beste Algorithmus ist, um diese Datenstruktur zu implementieren.
https://en.wikipedia.org/wiki/Suffix_tree –
verwandt: http://Stackoverflow.com/a/17703739/56778 –