Struktur Bercabang · Pelajaran 9 dari 10

Graf dan cara menyimpannya

9 menit baca · BelajarCode

Graf terdiri dari simpul (vertex) dan sisi (edge) yang menghubungkan pasangan simpul. Graf memodelkan hubungan: jalan antarkota, pertemanan di media sosial, prasyarat mata kuliah, atau tautan antarhalaman web.

Jenis-jenis graf
JenisCiriContoh
Tak berarahSisi berlaku dua arahPertemanan, jalan dua arah
BerarahSisi punya arahMengikuti akun, prasyarat mata kuliah
BerbobotSisi punya nilaiJarak atau waktu tempuh antarhalte

Dua cara menyimpan graf

Python
1sisi = [("A", "B"), ("A", "C"), ("B", "D"), ("C", "D"), ("D", "E")]2simpul = ["A", "B", "C", "D", "E"]34daftar = {s: [] for s in simpul}5for u, v in sisi:6    daftar[u].append(v)7    daftar[v].append(u)89print("Daftar ketetanggaan:")10for s in simpul:11    print(f"  {s}: {daftar[s]}  derajat {len(daftar[s])}")1213indeks = {s: i for i, s in enumerate(simpul)}14matriks = [[0] * len(simpul) for _ in simpul]15for u, v in sisi:16    matriks[indeks[u]][indeks[v]] = 117    matriks[indeks[v]][indeks[u]] = 11819print("Matriks ketetanggaan:")20print("    " + " ".join(simpul))21for s in simpul:22    print(f"  {s} " + " ".join(str(x) for x in matriks[indeks[s]]))
Keluaran
Daftar ketetanggaan:
  A: ['B', 'C']  derajat 2
  B: ['A', 'D']  derajat 2
  C: ['A', 'D']  derajat 2
  D: ['B', 'C', 'E']  derajat 3
  E: ['D']  derajat 1
Matriks ketetanggaan:
    A B C D E
  A 0 1 1 0 0
  B 1 0 0 1 0
  C 1 0 0 1 0
  D 0 1 1 0 1
  E 0 0 0 1 0
Matriks atau daftar ketetanggaan?
Matriks ketetanggaanDaftar ketetanggaan
MemoriO(V²)O(V + E)
Cek apakah u dan v terhubungO(1)O(derajat u)
Menelusuri semua tetangga uO(V)O(derajat u)
Cocok untukGraf padat atau kecilGraf jarang, seperti jaringan jalan atau pertemanan

V adalah banyak simpul dan E banyak sisi. Kebanyakan graf di dunia nyata jarang (setiap simpul hanya terhubung ke sedikit simpul lain), sehingga daftar ketetanggaan lebih sering dipakai.

Graf berbobot

Untuk graf berbobot, daftar ketetanggaan menyimpan pasangan tetangga dan bobotnya:

Python
1jalur = {2    "Kampus": [("Asrama", 2), ("Perpustakaan", 1)],3    "Asrama": [("Kampus", 2), ("Kantin", 3)],4    "Perpustakaan": [("Kampus", 1), ("Kantin", 1)],5    "Kantin": [("Asrama", 3), ("Perpustakaan", 1)],6}7for tujuan, menit in jalur["Kampus"]:8    print(f"Kampus -> {tujuan}: {menit} menit")
Keluaran
Kampus -> Asrama: 2 menit
Kampus -> Perpustakaan: 1 menit

Graf berbobot seperti ini menjadi masukan algoritma jalur terpendek Dijkstra, yang dibahas di kursus Desain dan Analisis Algoritma.

Cek pemahaman

Sebuah media sosial punya 100 juta pengguna, dan rata-rata setiap pengguna punya 200 teman. Representasi mana yang masuk akal?

Latihan

Graf prasyarat mata kuliah

Mata kuliah dan prasyaratnya: Algoritma 1 adalah prasyarat Struktur Data, Struktur Data adalah prasyarat Algoritma Lanjut, Matematika Diskrit adalah prasyarat Algoritma Lanjut. Buat graf berarah dalam bentuk daftar ketetanggaan, lalu tampilkan mata kuliah yang tidak punya prasyarat.

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.

Latih konsep ini

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi