מבני נתונים בסיסייםבינוני6 דק' קריאה
עץ קידומות - מבנה הנתונים שמאחורי השלמה אוטומטית
Trie מאחסן מחרוזות בצורה שמאפשרת חיפוש קידומות ב-O(m). חיוני לשאלות ראיון על מחרוזות.
Trie (נקרא גם Prefix Tree) הוא עץ שבו כל מסלול מהשורש לעלה מייצג מחרוזת. מחרוזות עם קידומת משותפת חולקות את אותו נתיב - וזה מה שהופך חיפוש קידומות לזריז במיוחד.
מבנה הצומת
class TrieNode {
constructor() {
this.children = {}; // אות -> TrieNode
this.isEnd = false; // סוף מילה תקינה?
}
}
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(word) {
let node = this.root;
for (const ch of word) {
if (!node.children[ch]) node.children[ch] = new TrieNode();
node = node.children[ch];
}
node.isEnd = true;
}
search(word) {
let node = this.root;
for (const ch of word) {
if (!node.children[ch]) return false;
node = node.children[ch];
}
return node.isEnd;
}
startsWith(prefix) {
let node = this.root;
for (const ch of prefix) {
if (!node.children[ch]) return false;
node = node.children[ch];
}
return true; // קידומת קיימת
}
}סיבוכיות
| פעולה | זמן | הערה |
|---|---|---|
| insert(word) | O(m) | m = אורך המילה |
| search(word) | O(m) | |
| startsWith(prefix) | O(m) | |
| זיכרון כולל | O(ALPHABET_SIZE × m × n) | n = מספר מילים |
לעומת Hash Table שנותן O(m) לחיפוש מילה מדויקת, Trie נותן O(m) גם לחיפוש קידומות - וזה דבר ש-Hash Table לא יכול לעשות ביעילות.
יישומים בפועל ובראיונות
- Autocomplete - השלמה אוטומטית בחיפוש (Google, VS Code)
- Spell Checker - בדיקת איות וצביעה שגיאות
- IP Routing - ניתוב רשת לפי קידומות IP (longest prefix match)
- Word Search II (LeetCode) - מציאת מילים בלוח אותיות
- Replace Words - החלפת מילים בקידומת הקצרה ביותר
אופטימיזציה - Compressed Trie
Trie רגיל בוזבז זיכרון כשיש שרשרות ארוכות של צמתים עם בן יחיד. Compressed Trie (Radix Tree) מאחד שרשרות כאלה לקשת אחת עם תווית מחרוזת - חוסך זיכרון משמעותי.
בראיון: אם שואלים על חיפוש קידומות, autocomplete, או מילים במילון - Trie הוא כנראה התשובה הנכונה. זהו אחד ממבני הנתונים שהכי 'מרשים' מראיינים.