b belajar.myudak

Kompleksitas waktu & notasi asimtotik

Menghitung T(n), notasi Big-O, Big-Omega, Big-Theta, aturan praktis, dan menyelesaikan rekurensi dengan Teorema Master.

dasar #kompleksitas#big-o#rekurensi

SlidePengantar Strategi Algoritmik Kompleksitas waktu dan ruangFungsi Pertumbuhan dan Kompleksitas Algoritma

Dua algoritma bisa sama-sama benar tapi berbeda jauh kecepatannya. Analisis kompleksitas mengukur bagaimana jumlah langkah (atau memori) bertumbuh ketika ukuran input nn membesar, terlepas dari komputer atau bahasa yang dipakai.

Menghitung T(n)

Hitung operasi dasar (perbandingan, assignment, operasi aritmatika) sebagai fungsi dari nn:

function jumlahPasangan(a: number[]) {
  let total = 0;                       // 1
  for (let i = 0; i < a.length; i++)       // n kali
    for (let j = i + 1; j < a.length; j++) //   n-1-i kali
      total += a[i] * a[j];            // dieksekusi n(n-1)/2 kali
  return total;
}

T(n)=n(n−1)2+cT(n) = \frac{n(n-1)}{2} + c. Untuk nn besar, suku n2n^2 yang mendominasi, sehingga kita tulis T(n)=O(n2)T(n) = O(n^2).

Notasi asimtotik

  • Big-O O(g)O(g): batas atas. f(n)=O(g(n))f(n) = O(g(n)) jika ada konstanta c>0c > 0 dan n0n_0 sehingga f(n)≤c⋅g(n)f(n) \le c \cdot g(n) untuk semua n≥n0n \ge n_0.
  • Big-Omega Ω(g)\Omega(g): batas bawah, f(n)≥c⋅g(n)f(n) \ge c \cdot g(n).
  • Big-Theta Θ(g)\Theta(g): batas ketat, ff ada di O(g)O(g) dan Ω(g)\Omega(g) sekaligus.
Laju pertumbuhan fungsi
noperasi
kompleksitasn = 10n = 100n = 1.000n = 1.000.000
O(1)1111
O(log n)371020
O(n)101001.0001.000.000
O(n log n)336649.96619.931.569
O(n²)10010.0001.000.0001.000.000.000.000
O(2ⁿ)1.024≈ ∞≈ ∞≈ ∞

Dengan 10⁸ operasi/detik: n = 10⁶ dengan O(n²) butuh ~3 jam, sementara O(n log n) selesai dalam 0,2 detik.

Aturan praktis

  1. Abaikan konstanta: O(5n)=O(n)O(5n) = O(n).
  2. Ambil suku dominan: O(n2+nlog⁡n)=O(n2)O(n^2 + n \log n) = O(n^2).
  3. Loop berurutan dijumlah, loop bersarang dikali.
  4. Loop yang variabelnya dikali/dibagi konstanta setiap iterasi (misalnya i *= 2) berjalan O(log⁡n)O(\log n) kali.
Hitung langkah secara empiris

Rekurensi & Teorema Master

Algoritma divide and conquer menghasilkan rekurensi berbentuk

T(n)=a T ⁣(nb)+f(n)T(n) = a\,T\!\left(\frac{n}{b}\right) + f(n)

dengan aa = banyak submasalah, n/bn/b = ukuran tiap submasalah, f(n)f(n) = biaya membagi + menggabung. Bandingkan f(n)f(n) dengan nlog⁡ban^{\log_b a}:

KasusSyaratHasil
1f(n)=O(nlog⁡ba−ϵ)f(n) = O(n^{\log_b a - \epsilon})T(n)=Θ(nlog⁡ba)T(n) = \Theta(n^{\log_b a})
2f(n)=Θ(nlog⁡ba)f(n) = \Theta(n^{\log_b a})T(n)=Θ(nlog⁡balog⁡n)T(n) = \Theta(n^{\log_b a} \log n)
3f(n)=Ω(nlog⁡ba+ϵ)f(n) = \Omega(n^{\log_b a + \epsilon}) (+ syarat regularitas)T(n)=Θ(f(n))T(n) = \Theta(f(n))

Contoh:

  • Merge sort: T(n)=2T(n/2)+nT(n) = 2T(n/2) + n. Di sini nlog⁡22=n=f(n)n^{\log_2 2} = n = f(n), kasus 2, sehingga Θ(nlog⁡n)\Theta(n \log n).
  • Binary search: T(n)=T(n/2)+1T(n) = T(n/2) + 1. Di sini nlog⁡21=1=f(n)n^{\log_2 1} = 1 = f(n), kasus 2, sehingga Θ(log⁡n)\Theta(\log n).
  • Karatsuba: T(n)=3T(n/2)+nT(n) = 3T(n/2) + n. Di sini nlog⁡23≈n1,585n^{\log_2 3} \approx n^{1{,}585} lebih besar dari f(n)f(n), kasus 1, sehingga Θ(n1,585)\Theta(n^{1{,}585}).
Flashcard0/5 dikuasai