2016-06-05 11 views
0

Kürzlich fragte mich ein Interviewer 1. Welche Datenstruktur sollte verwendet werden, wenn Sie einen Absatz speichern, später durchqueren und ein Wort finden müssen? 2. Welche Datenstruktur wird verwendet, wenn Sie in diesem Absatz auch Wörter hinzufügen, bearbeiten oder löschen können?Welche Datenstruktur wird zum Speichern eines Absatzes verwendet?

Kann mir jemand bei der Antwort helfen? Und wenn möglich, kann auch jemand ähnliche Fragen mit logischen Antworten zu Datenstrukturen posten, wie ich mich auf Interviews vorbereite.

+0

Sie könnten sich [seile] (https://en.wikipedia.org/wiki/Rope_%28data_structure%29) und [gap buffers] (https://en.wikipedia.org/wiki/Gap_buffer) ansehen) – Lee

Antwort

0

Ich denke, was Sie suchen, ist ein Trie. A trie ein Baum, dessen Knoten eindeutige Kombinationen von Buchstaben (Präfixe) speichern, und deren Kanten auf Kombinationen von Buchstaben zeigen, die diesen Präfixen (Suffixen) folgen. Versuche können aus Textdokumenten erstellt werden, um O (L) Such-, Einfüge- und Löschzeiten zu geben (L ist die Länge des Wortes, nach dem Sie suchen, hinzufügen oder löschen). Versuche werden häufig in Autocomplete- und Dokumentensuchalgorithmen verwendet.

+0

Da wir ganze Wörter finden wollen, würde ich hinzufügen, dass Sie ein spezielles Zeichen definieren müssen, um das Ende eines Wortes zu markieren. Wenn wir zum Beispiel '$' wählen würden, würden wir beim Einfügen des Wortes 'bubble' in den Trie stattdessen' bubble $ 'einfügen. Später, wenn wir versuchen zu sehen, ob wir das Wort 'bubl' finden, würden wir nach' bubl $ 'suchen und würden keine Übereinstimmung finden. Eine andere Lösung ist, die Blätter des Trie – Rerito

+0

nicht unbedingt zu markieren. Sie könnten immer sicherstellen, dass alle Zweige mit Nullknoten enden, z. Wenn der Baum Katzen und Katzen hätte, gäbe es nach dem t und dem s einen Null-Kind-Knoten, aber nicht das a. – bstadt

Verwandte Themen