Trie — Struktur Data

Trie (dibaca "try") adalah tree khusus untuk menyimpan string. Setiap node mewakili satu karakter, dan path dari root ke node membentuk sebuah kata. Keunggulan

Trie (dibaca "try") adalah tree khusus untuk menyimpan string. Setiap node mewakili satu karakter, dan path dari root ke node membentuk sebuah kata.

Keunggulan Trie vs Hash Map untuk string:

class TrieNode {
  constructor() {
    this.children = {};
    this.isEnd = false;
  }
}

class Trie {
  constructor() {
    this.root = new TrieNode();
  }

  // Sisipkan kata — O(m)
  insert(word) {
    let node = this.root;
    for (const char of word) {
      if (!node.children[char]) {
        node.children[char] = new TrieNode();
      }
      node = node.children[char];
    }
    node.isEnd = true;
  }

  // Cari kata persis — O(m)
  search(word) {
    let node = this.root;
    for (const char of word) {
      if (!node.children[char]) return false;
      node = node.children[char];
    }
    return node.isEnd;
  }

  // Cari prefix — O(m)
  startsWith(prefix) {
    let node = this.root;
    for (const char of prefix) {
      if (!node.children[char]) return false;
      node = node.children[char];
    }
    return true;
  }
}

const trie = new Trie();
trie.insert("belajar");
trie.insert("beli");
trie.insert("belanja");

trie.search("belajar");    // true
trie.search("bela");       // false (bukan kata utuh)
trie.startsWith("bel");    // true (ada kata dengan prefix "bel")

Kegunaan nyata:

🎭 Analogi sehari-hari: Trie = kamus tebal yang disusun per huruf. Mau cari kata "belajar"? Buka section "B", lalu "BE", "BEL", "BELA"... satu huruf per langkah. Mau autocomplete kata yang mulai "bel"? Tinggal lihat semua kata di section "BEL". Itulah trie — efisien karena prefix yang sama dipake bersama.

💡 Trie vs Hash Map untuk autocomplete: Hash Map cek "kata X ada gak" itu O(1), tapi autocomplete (semua kata mulai prefix "bel") butuh scan semua key = O(n × m). Trie bisa langsung navigasi ke node "bel" lalu DFS dari situ = O(jumlah kata yang match). Untuk autocomplete real-time, Trie menang jauh.

⚠️ Jebakan umum:

🎯 Trie vs Hash Map vs BST untuk string?

🧪 Tebakan cepat: Insert "belajar", "beli", "belanja". Berapa node? Root + b + e + l (shared) + a/i (branch) + ... = ~12 node. Vs 3 hash map entries. Lebih boros memori, tapi prefix query jauh lebih cepat.

TL;DR: Trie = tree per-karakter untuk string. Prefix search O(m). Pilih untuk autocomplete, spell-check, IP routing. Hindari kalau cuma exact-match (Hash Map lebih hemat).