Analisis · Pelajaran 3 dari 10

Rekurens dan teorema master

11 menit baca · BelajarCode

Waktu jalan algoritma rekursif dinyatakan dengan relasi rekurens. Merge sort, misalnya, membagi masalah berukuran n menjadi dua submasalah berukuran n/2, lalu menggabungkan dalam waktu Θ(n):

T(n) = 2T(n/2) + Θ(n), dengan T(1) = Θ(1).

Metode pohon rekursi

Gambarkan pekerjaan di setiap tingkat rekursi:

Pohon rekursi merge sort
TingkatBanyak submasalahUkuran tiap submasalahPekerjaan per tingkat
01nn
12n/2n
24n/4n
k2ᵏn/2ᵏn
log₂ nn1n

Ada sekitar log₂ n + 1 tingkat, masing-masing mengerjakan n. Totalnya Θ(n log n).

Teorema master

Untuk rekurens berbentuk T(n) = a·T(n/b) + f(n) dengan a ≥ 1 dan b > 1, bandingkan f(n) dengan n^(log_b a):

Tiga kasus teorema master
KasusSyaratHasil
1f(n) = O(n^(log_b a - ε)) untuk suatu ε > 0T(n) = Θ(n^(log_b a))
2f(n) = Θ(n^(log_b a))T(n) = Θ(n^(log_b a) · log n)
3f(n) = Ω(n^(log_b a + ε)) dan a·f(n/b) ≤ c·f(n) untuk suatu c < 1T(n) = Θ(f(n))
Contoh penerapan
AlgoritmaRekurensn^(log_b a)KasusHasil
Pencarian binerT(n) = T(n/2) + Θ(1)n⁰ = 12Θ(log n)
Merge sortT(n) = 2T(n/2) + Θ(n)n2Θ(n log n)
Perkalian KaratsubaT(n) = 3T(n/2) + Θ(n)n^1,5851Θ(n^1,585)
Contoh kasus 3T(n) = 2T(n/2) + Θ(n²)n3Θ(n²)

Memeriksa secara numerik

Python
1import math2from functools import lru_cache34@lru_cache(maxsize=None)5def T(n):6    if n <= 1:7        return 18    return 2 * T(n // 2) + n910for k in [10, 15, 20]:11    n = 2 ** k12    print(f"n=2^{k}: T(n)={T(n)}, T(n)/(n log n)={T(n) / (n * math.log2(n)):.3f}")
Keluaran
n=2^10: T(n)=11264, T(n)/(n log n)=1.100
n=2^15: T(n)=524288, T(n)/(n log n)=1.067
n=2^20: T(n)=22020096, T(n)/(n log n)=1.050

Rasionya mendekati konstanta 1, menguatkan bahwa T(n) = Θ(n log n).

Tidak semua rekurens bisa diselesaikan teorema master

Teorema master hanya berlaku untuk bentuk aT(n/b) + f(n). Rekurens seperti T(n) = T(n - 1) + n (misalnya quick sort pada kasus terburuk) diselesaikan dengan menjumlahkan langsung: n + (n - 1) + ... + 1 = Θ(n²).

Cek pemahaman

Berapa solusi T(n) = 4T(n/2) + n menurut teorema master?

Latihan

Tiga rekurens

Selesaikan rekurens berikut dengan teorema master: (a) T(n) = 8T(n/2) + n², (b) T(n) = T(n/2) + n, (c) T(n) = 2T(n/4) + √n.

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

Tandai pelajaran ini selesai

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

Buka di aplikasi