חזרה למאמרים
מבני נתונים בסיסייםבינוני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 הוא כנראה התשובה הנכונה. זהו אחד ממבני הנתונים שהכי 'מרשים' מראיינים.