Anda di halaman 1dari 14

Kuliah Analisis Algoritma

 Kompleksitas suatu algoritma adalah banyaknya


waktu komputasi yang diperlukan oleh suatu
algoritma
 Waktu komputasi suatu algoritma bergantung
pada:
◦ Input
◦ Komputer yang dipilih
◦ Bahasa pemrograman yang digunakan
◦ Implementasi algoritma tersebut
 Parameter input sangat esensial dan tidak dapat
diabaikan
 Komputer cepat berubah, sehingga tidak tepat
digunakan untuk membandingkan algoritma
 Demikian juga bahasa pemrograman tidak tepat
untuk membandingkan algoritma karena juga
perkembangan bahasa pemrograman dengan
berbagai variasi dan tatabahasa
 Implementasi algoritma juga bergantung bahasa
pemrograman dan komputer yang dipilih, sehingga
juga tidak tepat digunakan membandingkan
algoritma
 Dengan demikian: Pengertian waktu komputasi
disederhanakan menjadi bergantung pada
algoritma itu sendiri dan inputnya
 Ini berarti bahwa waktu komputasi tidak
menggunakan satuan waktu, tetapi dengan satuan
langkah
 Waktu komputasi yang paling banyak digunakan
adalah waktu komputasi terjelek (the worst case
comp time)
 Waktu komputasi merupakan fungsi 𝑓: ℕ ⟶ ℕ yang
monoton naik
 Fungsi ini seringkali tidak bisa secara eksak
ditentukan, sehingga seringkali yang digunakan
adalah batas atas maupun batas bawah
 Waktu komputasi tergantung pada:
◦ Variabel
◦ Banyak operasi
◦ Struktur algoritma
◦ Procedure/function call
 Beberapa asumsi:
◦ Tidak ada perbedaan jenis operasi atau tipe variabel
◦ Assigment dengan konstanta dianggap 1 langkah
◦ Procedure/function yang reserved dianggap mempunyai
suatu konstante langkah, atau bahkan 1 langkah
◦ Struktur algoritma tidak menggunakan goto
◦ Tidak memperhitungkan stack
 Struktur Algoritma
◦ Sekuensial:
 S1, S2, S3, ….. Masing2 mempunyai waktu komputasi t1, t2, t3, …., maka waktu
komputasi total adalah t1+t2+t3+……..
◦ Pencabangan:
 IF K THEN S1 ELSE S2, dengan wk K adalah tk, S1 adalah t1 dan S2 adalah t2, maka
waktu komputasinya tk+max{t1, t2}
◦ Loop:
 Mempunyai kontrol yang pasti
 For var = bawah to atas
 S(var)
 Jika tk adalah waktu untuk kontrol loop, dan t(var) adalah waktu komputasi S(var),
maka waktu komputasi untuk loop tersebut adalah
 tk + 𝑎𝑡𝑎𝑠
𝑣𝑎𝑟=𝑏𝑎𝑤𝑎𝑕 𝑡(𝑣𝑎𝑟)
 Subroutine (procedure/function)
 Misalkan T(n) waktu komputasi untuk memanggil subroutine
dengan parameter n, maka T(n) memuat stack, parameter,
dan body subroutine tersebut. Parameter bisa diabaikan
karena konstante, sedangkan stack tidak mudah ditentukan,
oleh karena itu bisa dianggap konstante. Dengan demikian
T(n) bergantung pada waktu komputasi body subroutinenya.
 Untuk bentuk yang rekursif juga sama, hanya saja waktu
komputasinya memuat waktu untuk memanggil subroutine
secara rekursif. Ini berarti bahwa waktu komputasinya juga
merupakan bentuk rekursif
 Oleh karena itu, waktu komputasi bisa dinyatakan
sebagai fungsi 𝑓: ℕ ⟶ ℝ+
 Waktu komputasi akan dinyatakan sehingga faktor
konstan tidak berpengaruh
 Notasi O (big-Oh) digunakan sebagai cara untuk
mengukur kecepatan pertumbuhan, atau order
magnitute fungsi 𝑓: ℕ ⟶ ℝ+ yang merupakan waktu
komputasi
 Definisi: 𝑓 = 𝑂 𝑔 , 𝑎𝑡𝑎𝑢 𝑓 ∈ 𝑂(𝑔) dapat diartikan
bahwa f secara asimtotik naik tidak lebih cepat
daripada g, dan didefinisikan dengan syarat bahwa
𝑓(𝑛)
terbatas ke atas oleh konstante c>0
𝑔(𝑛)
 O(g) dapat dinyatakan sebagai himpunan fungsi dengan
sifat keanggotaan sebagai berikut:
◦ 𝑂 𝑔 = 𝑓|∃𝑐 > 0, ∃𝑛𝑜 ∈ ℕ, ∀𝑛 ≥ 𝑛𝑜 𝑏𝑒𝑟𝑙𝑎𝑘𝑢 𝑓 𝑛 ≤ 𝑐𝑔 𝑛
𝑓(𝑛)
 Dengan demikian, 𝑓 ∈ 𝑂(𝑔) apabila lim <∞
𝑛→∞ 𝑔(𝑛)
(berhingga)
 Beberapa sifat O
◦ 𝑐. 𝑓 + 𝑑 ∈ 𝑂 𝑓 𝑢𝑛𝑡𝑢𝑘 𝑐, 𝑑 ≥ 0
◦ 𝑐. 𝑂 𝑓 = 𝑂 𝑓 𝑢𝑛𝑡𝑢𝑘 𝑐 ≥ 0
◦ 𝑂 𝑓 ∪ 𝑂 𝑔 = 𝑂 𝑓 + 𝑔 = 𝑂(max 𝑓, 𝑔 )
◦ 𝑂 𝑓 . 𝑂 𝑔 = 𝑂 𝑓. 𝑔
 Big-Oh dianggap sebagai batas atas
 Berdasarkan notasi big-Oh tersebut, kemudian
didefinisikan notasi big-Omega (batas bawah) dan big-
Theta (batas atas dan bawah) sebagai berikut:
 Definisi: 𝑓 = Ω 𝑔 , 𝑎𝑡𝑎𝑢 𝑓 ∈ Ω(𝑔) dapat diartikan
bahwa f secara asimtotik naik, paling tidak secepat
𝑓(𝑛)
g, dan didefinisikan dengan syarat bahwa 𝑔(𝑛)
terbatas ke bawah oleh konstante c>0
 (g) dapat dinyatakan sebagai himpunan fungsi
dengan sifat keanggotaan sebagai berikut:
◦ Ω 𝑔 = 𝑓|∃𝑐 > 0, 𝑛𝑜 ∈ ℕ, ∀𝑛 ≥ 𝑛𝑜 𝑏𝑒𝑟𝑙𝑎𝑘𝑢 𝑓 𝑛 ≥ 𝑐𝑔 𝑛
 Dengan demikian, 𝑓 ∈ Ω(𝑔) apabila
𝑓(𝑛)
lim = ∞ 𝑎𝑡𝑎𝑢 berhingga tidak 0
𝑛→∞ 𝑔(𝑛)
 Definisi: 𝑓 = Θ 𝑔 , 𝑎𝑡𝑎𝑢 𝑓 ∈ Θ(𝑔) dapat diartikan
bahwa f secara asimtotik naik secepat g, dan
𝑓(𝑛)
didefinisikan dengan syarat bahwa 𝑔(𝑛) terbatas ke
atas oleh c1>0, dan terbatas ke bawah oleh
konstante c2>0
 (g) dapat dinyatakan sebagai himpunan fungsi
dengan sifat keanggotaan sebagai berikut:
 Θ 𝑔 =
𝑓|∃𝑐1, 𝑐2 > 0, 𝑛𝑜 ∈ ℕ, ∀𝑛 ≥ 𝑛𝑜 𝑏𝑒𝑟𝑙𝑎𝑘𝑢 𝑓 𝑛 ≤ 𝑐1𝑔 𝑛 , 𝑓 𝑛 ≥ 𝑐2𝑔 𝑛
𝑓(𝑛)
 Dengan demikian, 𝑓 ∈ Θ(𝑔) apabila lim =𝐿>0
𝑛→∞ 𝑔(𝑛)
 Order kompleksitas yang sering digunakan
2𝑛
adalah log log n, log n, n, 2 , 2 (log
n

dengan bilangan pokok 2)


 Fungsi 𝑓: ℕ ⟶ ℝ+ dikatakan mempunyai
order
◦ Logaritmik jika 𝑓 ∈ 𝑂(log 𝑛)
◦ Polilogaritmik jika 𝑓 ∈ 𝑂 𝑙𝑜𝑔𝑘 𝑛 𝑢𝑛𝑡𝑢𝑘 𝑠𝑢𝑎𝑡𝑢 𝑘
◦ Linier jika 𝑓 ∈ 𝑂(𝑛), kuadratik jika 𝑓 ∈ 𝑂(𝑛2 ) ,
kubik jika 𝑓 ∈ 𝑂(𝑛3 )
◦ Kuasi-linier jika 𝑓 ∈ 𝑂(𝑛 𝑙𝑜𝑔𝑘 𝑛) untuk suatu k
◦ Polinomial jika 𝑓 ∈ 𝑂(𝑛𝑘 ) untuk suatu k
◦ Superpolinomial jika 𝑓 ∈ Ω(𝑛𝑘 ) untuk setiap k
𝑛𝜖
◦ Subeksponensial jika 𝑓 ∈ 𝑂(2 ) 𝑢𝑛𝑡𝑢𝑘 𝑠𝑢𝑎𝑡𝑢 𝜖 > 0
𝜖
◦ Eksponensial jika 𝑓 ∈ Ω(2𝑛 ) 𝑢𝑛𝑡𝑢𝑘 𝑠𝑢𝑎𝑡𝑢 𝜖 > 0
◦ Strictly eksponensial jika
𝑓 ∈ 𝑂(2𝜖𝑛 ) 𝑢𝑛𝑡𝑢𝑘 𝑠𝑢𝑎𝑡𝑢 𝜖 > 0
 Jika waktu komputasi bergantung lebih dari
satu parameter, masih bisa digunakan
notasi-notasi tersebut
Misalkan 𝑓(𝑛, 𝑚) ∈ 𝑂(𝑛𝑚2 + 𝑛2 log 𝑚) jika terdapat
c>0 sehingga 𝑓 𝑛, 𝑚 ≤ 𝑐 𝑛𝑚2 + 𝑛2 log 𝑚 untuk
setiap 𝑚, 𝑛 ∈ ℕ
 Misalkan tA(x) merupakan waktu komputasi
algoritma A dengan input x
 Membandingkan algoritma A dan A’ untuk
permasalahan yang sama dilakukan dengan
konsep: Algoritma A paling tidak secepat algoritma
A’ apabila tA(x)  tA’(x)
◦ Nilai yang eksak tA(x), dan juga perbandingan A dengan A’
tergantung model komputasi
◦ Hanya algoritma yang sederhana yang mungkin kita hitung
tA(x) untuk semua input x, dan perbandingan tA(x) tA’(x)
◦ Seringkali tA(x)tA’(x) untuk x yang kecil, tetapi tA(x)≥tA’(x)
untuk x yang besar

Anda mungkin juga menyukai