Autocomplete System mit Trie
Implementieren Sie schnelle Autocomplete-Vorschläge mit einer Trie-Datenstruktur.
Implementierung
import { Trie } from '@msnkr/data-structures';
// Wörter mit Häufigkeitsbewertungen speichern
const autocomplete = new Trie<number>();
// Wörter mit ihren Beliebtheitsbewertungen hinzufügen
autocomplete.insert('apple', 100);
autocomplete.insert('application', 85);
autocomplete.insert('apply', 90);
autocomplete.insert('appetite', 75);
autocomplete.insert('banana', 80);
// Autocomplete-Vorschläge abrufen
function getSuggestions(prefix: string): string[] {
if (!autocomplete.hasPrefix(prefix)) {
return [];
}
return autocomplete.getAllWithPrefix(prefix);
}
// Verwendung
console.log(getSuggestions('app'));
// Ausgabe: ["apple", "application", "apply", "appetite"]
console.log(getSuggestions('ban'));
// Ausgabe: ["banana"]
console.log(getSuggestions('xyz'));
// Ausgabe: []
Mit rangordneten Ergebnissen
interface SearchResult {
word: string;
score: number;
}
function getRankedSuggestions(prefix: string, limit = 5): SearchResult[] {
const words = autocomplete.getAllWithPrefix(prefix);
return words
.map((word) => ({
word,
score: autocomplete.search(word) || 0,
}))
.sort((a, b) => b.score - a.score)
.slice(0, limit);
}
console.log(getRankedSuggestions('app', 3));
// Ausgabe: [
// { word: "apple", score: 100 },
// { word: "apply", score: 90 },
// { word: "application", score: 85 }
// ]
Case-Insensitive Modus
// Für benutzerorientierte Suche
const searchTrie = new Trie<number>(false); // case-insensitive
searchTrie.insert('JavaScript', 100);
console.log(searchTrie.search('javascript')); // 100
console.log(searchTrie.search('JAVASCRIPT')); // 100