Teori Graf : Pohon (Tree)

Bab 7 · Pohon (Tree) — Matematika Diskrit Interaktif
Matematika Diskrit · Teori Graf · Struktur Hierarki

Bab 7
Pohon (Tree)

Graf paling hemat sengaja: tidak ada satu sisi pun yang mubazir, namun semua simpul tetap saling terhubung. Bab ini membedahnya dari nol — definisi, sifat, pohon merentang, pohon biner, hingga kode Huffman — dengan mesin-mesin interaktif yang bisa Anda jalankan sendiri.

  Semua yang bergaris tepi tebal adalah mesin: klik, geser, jalankan.

A B C D E F G H I J K 10 SIMPUL · 9 SISI · NOL SIKLUS
Gulir untuk mulai
Subbab 7.1 · Definisi Pohon dan Sifat-sifatnya

Apa Itu Pohon?

Bayangkan Anda harus menghubungkan semua gedung kampus dengan kabel, semua orang dalam satu silsilah keluarga, atau semua folder dalam satu direktori. Ketiganya punya pola sama: semua tersambung, tetapi tidak ada jalur yang mengembali ke tempat semula. Pola itulah pohon.

Definisi 7.1

Pohon = graf terhubung tanpa siklus

Sebuah graf tak berarah $G=(V,E)$ disebut pohon jika dan hanya jika $G$ terhubung (dari simpul mana pun kita bisa sampai ke simpul mana pun) dan tidak memuat satu siklus pun.

$G$ pohon $\iff$ (i) $G$ terhubung dan $|E| = |V|-1$
$\qquad\quad\iff$ (ii) $G$ tak bersiklus dan $|E| = |V|-1$
$\qquad\quad\iff$ (iii) setiap dua simpul dihubungkan tepat satu lintasan sederhana

Tiga tanda ini ekuivalen: penuhi satu, Anda otomatis memenuhi dua lainnya. Sifat (iii) adalah cara paling elegan — nol redundansi.

Pohon adalah graf yang paling pelit dan paling jujur: cukup satu sisi lagi, ia berdosa bersiklus; kurang satu sisi saja, ia pincang tak terhubung. — Prinsip "tepat $n-1$ sisi"
Cek 1Hitung sisi: $n-1$?
Cek 2Terhubung semua?
SimpulPohon sah

Kedua cek itu sudah cukup — jika sisi tepat $n-1$ dan terhubung, siklus mustahil ada (siklus butuh sisi "tambahan").

Mesin 01 · Lab Uji Pohon klik sisi untuk menyalakan / mematikan

  Diawali dengan satu siklus besar. Matikan / nyalakan sisi sampai status menjadi pohon sah.

simpul n = 6 sisi e = 6 komponen c = 1
ADA SIKLUS

Sisi berlebih = 1. Siklus lahir ketika sisi "lebih" dari pohon yang terhubung.

Hutan dengan $c$ komponen: $\;|E| = |V| - c$
→ pohon adalah kasus khusus $c=1$: $|E| = |V|-1$
Subbab 7.1 · Kosakata Pohon

Nama-nama Bagian Pohon

Karena pohon biasanya digambar "menggantung" dari satu titik atas (akar), lahirlah istilah kekeluargaan: orang tua, anak, saudara, daun. Arahkan kursor ke setiap simpul pada diagram di bawah — panel kanan akan menjelaskan perannya.

  Pohon contoh $T$ — akarnya $A$, tinggi 2.

Papan Penjelas

Arahkan kursor (atau ketuk) salah satu simpul untuk melihat istilahnya.

IstilahArti
akar (root)Simpul tertinggi; satu-satunya tanpa orang tua.
daun (leaf)Simpul tanpa anak; ujung cabang.
parent / childSimpul tepat di atas / tepat di bawah suatu sisi.
siblingAnak-anak dari orang tua yang sama.
tingkat (depth)Jarak dari akar; akar berada di tingkat $0$.
tinggi (height)Tingkat maksimum di seluruh pohon.
derajatBanyak sisi yang menempel pada simpul.
hutanKumpulan pohon terpisah (graf tak bersiklus apa pun).
Contoh Pegangan Bab Ini · Jaringan Kampus

Sepanjang §7.1–§7.2 kita memakai satu kasus yang sama: kampus dengan 7 gedung yang akan dijaring dengan kabel fiber — A Rektorat · B Lab Terpadu · C Perpustakaan · D Asrama · E Kantin · F Auditorium · G Stadion. Kabel antar gedung punya biaya (bobot) berbeda. Pertanyaan besarnya: pasang kabel di mana agar semua tersambung dengan total biaya minimum? Jawabannya: bangun sebuah pohon merentang minimum — dan tepat 6 kabel (ingat $n-1$!).

Subbab 7.1 · Sifat-sifat

Mengapa Selalu $n-1$ Sisi?

Teorema 7.1

Setiap pohon dengan $n \ge 1$ simpul memiliki tepat $n-1$ sisi.

Induksi pada $n$: pohon 1 simpul punya $0$ sisi. $\checkmark$
Untuk $n>1$: pohon selalu punya $\ge 2$ daun (ujung lintasan terpanjang).
Lepas daun $u$ beserta sisi $uv$ → pohon $n-1$ simpul, sisi $(n-1)-1$.
Kembalikan $u$: $|E| = (n-2)+1 = n-1$. $\blacksquare$

Dari mana asalnya? Karena tak ada siklus, setiap sisi wajib "mengenalkan" satu simpul baru — sehingga jumlahnya persis selisih simpul terhadap satu.

Teorema 7.2
+ 1 sisi ke pohon $\Rightarrow$ tepat 1 siklus baru
− 1 sisi dari pohon $\Rightarrow$ putus jadi 2 komponen

Pohon berada di tepi pisau: paling longgar yang masih terhubung, paling ketat yang masih bebas siklus. Inilah alasan algoritma MST berhati-hati memeriksa siklus.

Salah kaprah umum
"Graf tak bersiklus pasti pohon." — Belum tentu! Dua garis terpisah juga tak bersiklus, tetapi itu hutan (2 komponen), bukan pohon. Syarat terhubung tidak boleh dilupakan.

Uji Pemahaman — benar atau salah?

Pernyataan 1 / 5

Setiap pohon dengan $n$ simpul memiliki tepat $n-1$ sisi.

Pernyataan 2 / 5

Menambah satu sisi ke pohon selalu menciptakan tepat satu siklus baru.

Pernyataan 3 / 5

Sebuah pohon boleh memiliki simpul terisolasi (tanpa sisi menempel).

Pernyataan 4 / 5

Setiap graf tak berarah yang tak bersiklus pastilah pohon.

Pernyataan 5 / 5

Menghapus satu sisi apa pun dari pohon memutusnya menjadi tepat dua komponen.

Jawab dengan contoh pegangan

Jaringan kampus punya $n=7$ gedung. Berapa kabel pada pohon merentangnya? $7-1=\mathbf{6}$ kabel — tidak lebih, tidak kurang.

Subbab 7.2 · Pohon Merentang (Spanning Tree)

Merentang Semua, Buang yang Mahal

Diberi graf terhubung berbobot (misal: biaya kabel antar gedung). Pohon merentang adalah subgraf yang (1) memuat semua simpul, (2) berbentuk pohon — terhubung dan hanya $n-1$ sisi. Jika total bobotnya minimum, ia disebut MST (Minimum Spanning Tree).

InputGraf terhubung berbobot
SeleksiPilih $n-1$ sisi tanpa siklus
OutputPohon merentang
MinimumTotal bobot terkecil = MST
Cut Property — jantung semua algoritma MST

Belah simpul graf jadi dua kelompok $S$ dan $V\setminus S$. Sisi termurah yang melintasi belahan itu pasti aman diambil ke MST.

$w(e) = \min\{w(e') : e' \text{ melintasi } (S,\, V\setminus S)\} \Rightarrow \exists\ \text{MST memuat } e$

Dari mana asalnya? Misal MST $T$ tidak memuat $e$. Tambahkan $e$ → lahir satu siklus, dan siklus itu harus menyeberangi potongan sekali lagi lewat sisi $e'$. Tukar $e'$ dengan $e$: pohon tetap sah, total bobot turun atau tetap. Kontradiksi dengan kemahalan $e$ — berarti $e$ memang layak masuk.

Merapatkan hutan
Hutan dengan $n$ simpul dan $c$ komponen pohon
$\xrightarrow{\ \text{tambah } c-1 \text{ sisi tepat}\ }$ satu pohon utuh

Tiap sisi penghubung menggabungkan dua komponen menjadi satu, jadi jumlah komponen berkurang tepat satu per sisi.

Jejakan algoritma
Kesalahan klasik: serakah mengambil sisi murah tanpa memeriksa siklus. Sisi $C$–$F$ (bobot 12) pada jaringan kampus akan ditolak Kruskal — kedua ujungnya sudah terhubung lewat jalur lain yang lebih murah.
Subbab 7.2 · Algoritma Kruskal

Kruskal: Urutkan, lalu Waspadai Siklus

Ide Kruskal (1956) sederhana namun cerdas: urutkan semua sisi dari termurah, lalu ambil satu per satu — asalkan tidak membentuk siklus. Pemeriksa siklusnya memakai struktur Union-Find: dua simpul yang sudah satu "keluarga" tak boleh dihubungkan lagi.

Mesin 02 · Kruskal pada Jaringan Kampus 7 gedung · 10 kabel kandidat

A Rektorat B Lab C Perpus D Asrama E Kantin F Auditorium G Stadion

kabel terpasang: 0/6 total biaya = 0
// menekan "Jalankan" atau "Langkah" untuk memproses sisi termurah…
laju
Pseudocode Kruskal
urutkan E berdasarkan bobot naik
T ← ∅ ; setiap simpul jadi kelompok sendiri
untuk setiap e = (u,v) di E terurut:
  jika find(u) ≠ find(v):
    T ← T ∪ {e} ; union(u,v)
  jika |T| = n−1: berhenti
Biaya Komputasi
Kruskal: $\;O(E \log E)$ — didominasi pengurutan sisi
Union-Find hampir $O(1)$ per operasi (path compression)

Cocok saat graf jarang sisi ($E$ kecil) dan sisi sudah tersaji sebagai daftar — persis seperti daftar penawaran kabel di layar mesin di atas.

Subbab 7.2 · Algoritma Prim

Prim: Tumbuh dari Satu Gedung

Prim menanam pohon dari satu simpul (kita mulai dari A Rektorat) dan berulang kali menarik sisi termurah yang menjulur keluar dari wilayah yang sudah tersambung — persis mengikuti cut property dengan $S$ = wilayah tersambung.

Mesin 03 · Prim pada Jaringan yang Sama mulai dari A
gedung tersambung: 1/7 total biaya = 0
// pohon mulai menumbuhkan akar di A…
Perkiraan hasil

Kruskal maupun Prim wajib berakhir di total yang sama: 28. Struktur pilihannya bisa berbeda urutan, tetapi biaya minimum itu unik (bobot sisi kita sengaja dibuat semua berbeda).

laju

Kruskal vs Prim — kapan memakai yang mana?

AspekKruskalPrim
strategiGlobal: seleksi seluruh sisi termurahLokal: kembangkan satu pohon
struktur data kuncisort + Union-Findpriority queue / heap
kompleksitas$O(E\log E)$$O(E\log V)$ (heap biner)
unggul saatgraf jarang, sisi sudah berdaftargraf padat, tetangga mudah diakses
graf tak terhubung?menghasilkan hutan merentanghanya merentang satu komponen
Subbab 7.3 · Pohon Biner (Binary Tree)

Pohon yang Disiplin: Maksimal Dua Anak

Pohon biner adalah pohon berakar di mana setiap simpul punya paling banyak dua anak: anak kiri dan anak kanan. Definisinya pun rekursif — paling pas, karena seluruh teorinya tumbuh secara rekursif.

Definisi rekursif. Pohon biner adalah:
(i) hampa, atau
(ii) sebuah simpul akar + pohon biner kiri + pohon biner kanan

Dari definisi ini lahir tiga traversal §7.3b dan rumus-rumus penghitungan simpul — semuanya "diperas" dari struktur (ii).

Rumus kunci tinggi $h$ (akar di $h{=}0$)
maksimum simpul: $n_{\max} = 2^{h+1}-1$  (pohon sempurna)
minimum simpul: $n_{\min} = h+1$  (pohon miring)
$\Rightarrow\ \lceil\log_2(n+1)\rceil - 1 \le h \le n-1$

Sisi halus (logaritmik) vs sisi kasar (linier) — perbedaan inilah yang menggerakkan seluruh ilmu pencarian (BST, AVL, heap).

Mesin 04 · Pembentuk Pohon Sempurna geser tinggi h
tinggi h = 3 n = 15 simpul sisi = 14 daun = 8

  Titik oker = daun ($2^h$ buah); tiap tambahan tinggi menggandakan daun — itu $2^{h+1}-1$ bekerja.

Empat wajah pohon biner

Full

Setiap simpul beranak 0 atau 2 — tak ada anak tunggal.

Complete

Terisi rapat kiri→kanan per tingkat; dasar struktur heap.

Perfect

Semua daun sedalam mungkin; $n = 2^{h+1}-1$.

Skewed

Menyamping total — pohon biner menyamar jadi rantai.

Subbab 7.3 · Traversal Pohon

Tiga Cara Menyusuri: Kapan Akar Dikunjungi?

Traversal = aturan membaca seluruh simpul tepat satu kali. Seluruh rahasianya satu kalimat: kapan akar dikunjungi relatif terhadap subtree kiri (L) dan kanan (R). Kiri selalu didahulukan sebelum kanan; yang bergeser hanyalah posisi akar (A):

Preorder · A-L-R
kunjungi akar
preorder(kiri)
preorder(kanan)

Akar di awal → untuk menyalin pohon & ekspresi prefiks.

Inorder · L-A-R
inorder(kiri)
kunjungi akar
inorder(kanan)

Akar di tengah → pada BST menghasilkan urutan terurut naik.

Postorder · L-R-A
postorder(kiri)
postorder(kanan)
kunjungi akar

Akar di akhir → untuk menghapus pohon & ekspresi postfix.

Mesin 05 · Simulator Traversal pohon contoh T · 10 simpul
kunjungan ke- 0/10
pilih mode, lalu jalankan

  Oker berdenyut = sedang dikunjungi; teal = selesai dicatat.

laju
Bonus · Pohon ekspresi $(a+b)\times c$

Pohon biner juga menyimpan ekspresi matematika: operator jadi akar/internal, operand jadi daun. Bandingkan hasil bacanya:

preorder → * + a b c  (notasi prefiks)  ·  inorder → a + b * c  (perlu tanda kurung)  ·  postorder → a b + c *  (notasi postfix — tanpa kurang kurung sama sekali!)

Subbab 7.3 · Pohon Biner Terurut (BST)

BST: Pohon yang Bisa Dicari

Aturan BST hanya satu: untuk setiap simpul, seluruh subtree kiri bernilai lebih kecil, subtree kanan lebih besar. Konsekuensinya menakjubkan — inorder traversal otomatis mengeluarkan angka terurut, dan pencarian tinggal "belok kiri atau kanan" tiap tingkat.

Mengapa inorder selalu terurut?

Dengan induksi: inorder pada BST menghasilkan subtree kiri (semua kecil), lalu akar, lalu subtree kanan (semua besar). Rangkaian "kecil → akar → besar" plus sifat rekursif = urutan naik untuk seluruh pohon. $\blacksquare$

cari $x$: tiap tingkat bandingkan sekali $\Rightarrow$ $O(h)$ langkah
$h$ terbaik $\approx \log_2 n$, terburuk $= n-1$ (pohon miring)
Perangkap pohon miring
Sisipkan angka yang sudah terurut naik (coba: 10, 20, 30, 40) — BST melarikan diri jadi rantai dan pencarian merosot menjadi $O(n)$. Inilah alasan lahirnya pohon seimbang (AVL, Red-Black) yang memutar simpul agar $h$ tetap dekat $\log_2 n$.
Mesin 06 · Pembangun BST sisip angka · telusuri jalur
pohon kosong
tinggi h = simpul = 0 inorder:
Subbab 7.4 · Pohon Keputusan dan Kode Huffman

Pohon yang Mengambil Keputusan

Di dunia nyata, pohon juga berperan sebagai mesin penanya jawaban: simpul internal menyimpan pertanyaan, cabang menyimpan jawaban, dan daun menyimpan keputusan akhir. Setiap data hanya menempuh satu jalur akar→daun — panjang jalur itulah "biaya" keputusannya.

Mesin 07 · Simulasi Kredit Bank klik ya / tidak
Dari mana pertanyaan akar dipilih?

Dari ukuran ketidakpastianentropi. Pertanyaan terbaik adalah yang paling besar membelah ketidakpastian data:

$H(S) = -\displaystyle\sum_{i} p_i \log_2 p_i$
$\text{Gain}(A) = H(S) - \sum_{v} \tfrac{|S_v|}{|S|}\,H(S_v)$

Atribut dengan Gain terbesar duduk di akar; ulangi secara rekursif per cabang (algoritma ID3/C4.5). Pohon keputusan = greedy yang rapi.

Setiap daun adalah jawaban; setiap sisi adalah pertanyaan yang telah dijawab. — Anatomi pohon keputusan
Subbab 7.4 · Kode Prefiks

Memadatkan Teks tanpa Kehilangan Makna

Komputer menyimpan huruf sebagai bit. Memberi setiap huruf panjang yang sama itu mudah tetapi boros. Memberi panjang bebas itu hemat tetapi berbahaya: bagaimana memecah bit kembali menjadi huruf?

Kenapa kode sembarangan berbahaya
Misal $a=0$, $b=1$, $c=01$. Bit 01 bisa dibaca c atau ab. Ambigu — rusak. Solusinya: karakter tak boleh menjadi awalan karakter lain (prefix-free code).
Trik pohon: kode = jalur akar→daun

Taruh huruf hanya di daun; bangun kode dengan berjalan dari akar: belok kiri catat 0, belok kanan catat 1. Karena daun tak punya kelanjutan, tidak ada kode yang menjadi awalan kode lain — otomatis prefiks-free.

panjang rata-rata kode: $\bar{L} = \sum_i p_i\, d_i$
total bit: $\;\sum_i f_i \cdot d_i$  ($f_i$ = frekuensi, $d_i$ = kedalaman)
1 · InputTeks / tabel frekuensi
2 · SerakahAmbil 2 frekuensi terkecil
3 · GabungJadikan anak satu orang tua
4 · UlangiSampai tersisa 1 pohon
5 · BacaJalur akar→daun = kode

Itulah algoritma Huffman (1952) — dan bagian menyenangkannya: pohon Huffman yang dihasilkan terbukti optimal, tak ada kode prefiks lain yang lebih hemat untuk distribusi frekuensi yang sama. Waktunya membuktikannya dengan mesin.

Subbab 7.4 · Algoritma Huffman

Mesin 08 · Pabrik Kode Huffman

Ketik teks apa pun (pegangan default: HUFFMAN), lalu Bangun Pohon. Perhatikan: dua kotak termurah berdenyut oker, melebur jadi satu orang tua, dan begitu seterusnya sampai tersisa satu akar.

Mesin 08 · Huffman Encoder frekuensi → pohon → kode
laju
// menunggu perintah bangun…
tabel frekuensi & kode
KarakterFrekKode HuffmanBit
Optimalitas Huffman
$H \;\le\; \bar{L}_{\text{Huffman}} \;<\; H+1$
$H = -\sum_i p_i \log_2 p_i$ (entropi sumber)

Tidak ada kode prefiks yang bisa mengalahkan Huffman untuk frekuensi yang diberikan — hasil penuh pertukaran-pertukaran cut property gaya Huffman: dua simbol terlangka selalu jadi bersaudara paling dalam.

Catatan jujur
Huffman mengkodekan simbol tunggal. Kompresor modern (ZIP, PNG) menaikkan taruhannya: memadatkan pasangan/blok simbol (LZ77 + Huffman), karena frekuensi blok lebih "berat" ketimpangannya — dan entropi blok selalu $\le$ jumlah entropi per simbol.
Rumus Inti · Siap Hafal

Kartu Hafalan Bab 7

Delapan lembar sari pati — kalau hanya satu halaman yang bisa Anda bawa ujian, bawalah yang ini.

7.1 · Sifat dasar
$|E| = n-1$  (pohon) $\qquad |E| = n-c$  (hutan, $c$ komponen)

+1 sisi → tepat 1 siklus; −1 sisi → putus 2 komponen.

7.2 · Kunci MST
cut property: sisi termurah pemotong $(S, V\setminus S)$ aman masuk MST

Kruskal $O(E\log E)$ · Prim $O(E\log V)$ — hasil biaya minimum selalu sama.

7.3 · Pohon biner, tinggi $h$
$2^h \le n \le 2^{h+1}-1 \;\Rightarrow\; \lceil\log_2(n{+}1)\rceil-1 \le h \le n-1$

Sempurna: $n = 2^{h+1}-1$, daun $=2^h$. Full binary: daun $=$ internal $+1$.

7.3 · Traversal
Preorder A-L-R $\quad$ Inorder L-A-R $\quad$ Postorder L-R-A

Inorder BST = urutan naik. Banyak bentuk pohon biner dengan $n$ simpul $=\frac{1}{n+1}\binom{2n}{n}$ (Catalan).

7.4 · Pohon keputusan
$H(S) = -\sum_i p_i\log_2 p_i \qquad \text{Gain}(A)=H(S)-\sum_v \tfrac{|S_v|}{|S|}H(S_v)$

Atribut ber-Gain terbesar duduk di akar; daun = keputusan.

7.4 · Huffman
total bit $=\sum_i f_i d_i$;   $H \le \bar{L} < H+1$;   kode selalu prefiks-free

Dua terkecil digabung, ulangi sampai satu akar; kiri = 0, kanan = 1.