Anda di halaman 1dari 5

RESUME MATA KULIAH DESAIN DAN ANALISIS ALGORITMA

PERTEMUAN 3-4

Nama : Topaz Alexandria

NIM : H071181010

Prodi : Ilmu Komputer

A. Masalah Pencarian Data

Misalkan ada suatu algoritma pencarian data yang memiliki sebuah input
yang merupakan barisan n bilangan asli (𝑎1, 𝑎2, … , 𝑎𝑛 ) dalam larik A dan
sebuah bilangan (key) yang ingin dicari. Output dari algoritma ini merupakan
lokasi dari bilangan key dalam baris A. Apabila bilangan key tidak ditemukan
dalam baris A, maka akan ditambahkan sebuah bilangan key sebagai unsur
terakhir dari barisan tersebut.

Sebagai contoh, diberikan suatu input barisan bilangan A = (31, 41, 59, 26,
41, 58) dengan key = 26. Algoritma pencarian (searching algorithm) akan
mengeluarkan output yang berupa posisi dari bilangan key = 4.

B. Pseudo-code Algoritma

Linear-Search (A, key)

1 indeks ← 1;
2 ada ← False;
3 while indeks ≤ length[A] and ada = False
4 if A[indeks] = key then
5 ada = True;
6 indeks ← indeks + 1;
7 indeks ← indeks – 1;
8 if ada = False then
9 indeks ← length[A] + 1;
10 A[indeks] ← key;
11 return indeks
Langkah pengerjaan dari pseudocode di atas adalah sebagai berikut:

Input A = (31, 41, 59, 26, 41, 58)

key = 26

1 indeks = 1
2 ada = False
3 while 1 ≤ 6 and ada = False → True
4 if A[1] = key then → (31 ≠ 26) → False
6 indeks = 1+1 = 2
3 while 2 ≤ 6 and ada = False → True
4 if A[2] = key then → (41 ≠ 26) → False
6 indeks = 2+1 = 3
3 while 3 ≤ 6 and ada = False → True
4 if A[3] = key then → (59 ≠ 26) →False
6 indeks = 3+1 = 4
3 while 4 ≤ 6 and ada = False → True
4 if A[4] = key then (26 = 26) → True
5 ada = True
6 indeks = 6+1 = 7
3 while 5 ≤ 6 and ada = False → False
7 indeks = 5-1 = 4
8 if ada = False then → False
11 return 4

C. Pencarian Berulang

Loop-Search (A, key) T(n)

1 ada ← False 1
2 for i ← 1 to length[A] n+1
3 if A[i] = key then n
4 posisi ← I ∑𝑛𝑖=1 𝑡𝑖
5 ada ← True ∑𝑛𝑖=1 𝑡𝑖
6 if not(ada) then 1
7 posisi ← length[A] + 1 s
8 A[posisi] ← key s
9 return posisi 1

Langkah dari pengerjaan pseudocode di atas adalah sebagai berikut:

Input A = (31, 41, 59, 26, 41, 58)


key = 26

1 ada = False
2 for i = 1 to 6
3 if A[1] = key then → (31 ≠ 26) → False
2 for i = 2 to 6
3 if A[2] = key then → (41 ≠ 26) → False
2 for i = 3 to 6
3 if A[3] = key then → (59 ≠ 26) → False
2 for i = 4 to 6
3 if A[2] = key then → (26 = 26) → True
4 posisi = 4
5 ada = True
2 for i = 5 to 6
3 if A[2] = key then → (41 ≠ 26) → False
2 for i = 6 to 6
3 if A[2] = key then → (58 ≠ 26) → False
6 if not(ada) then → False
9 return 4
𝑛

𝑇(𝑛) = 2𝑛 + 2 ∑ 𝑡𝑖 + (2𝑠 + 4)
𝑖=1

Pseudocode dari oencarian berulang ini juga memiliki masing-masing


kasus terbaik dan kasus terburuk. Kasus terbaiknya adalah apabila tepat satu
unsur dalam larik A sama dengan key yang dicari. Sehingga, ∑𝑛𝑖=1 𝑡𝑖 = 0 dan s
= 1.
𝑛

𝑇(𝑛) = 2𝑛 + 2 ∑ 𝑡𝑖 + (2𝑠 + 3) = 2𝑛 + 5
𝑖=1

Demikian juga kasus terbaiknya yakni apabila semua unsur dalam baris A
sama dengan key yang dicari. Sehingga, ∑𝑛𝑖=1 𝑡𝑖 = 𝑛 dan s = 0.
𝑛

𝑇(𝑛) = 2𝑛 + 2 ∑ 𝑡𝑖 + (2𝑠 + 3) = 4𝑛 + 3
𝑖=1

D. Improvisasi Algoritma

Waktu dari proses dari pencarian data tersebut, dapat dipercepat atau
diefisienkan lagi dengan cara membagi dua data tersebut sehingga perulangan
pencarian dilakukan secara bergantian pada kedua sisi baris pada satu
perulangan yang sama. Pembagian proses pencarian data ini dapat kita sebut
sebagai pencarian biseksi (Bagi-dua).

E. Pencarian Biseksi (Bagi-dua)

Bisection Search (A, key) T(n)

1 ada ← False 1
2 for i ← 1 to ⸢length[A] / 2⸣ 1⁄ 𝑛 + 1
2
3 if A[i] = key then 1⁄ 𝑛
2
𝑛⁄
4 posisi ← I ∑𝑖=12 𝑡𝑖
𝑛⁄
5 ada ← True ∑𝑖=12 𝑡𝑖
6 if A[n - i + 1] = key then 𝑖⁄ 𝑛
2
𝑛⁄
7 posisi ← n - i + 1 ∑𝑖=12 𝑝𝑖
𝑛⁄
8 ada ← True ∑𝑖=12 𝑝𝑖
9 if not(ada) then 1
10 posisi ← length[A] + 1 s
11 A[posisi] ← key s
12 return posisi 1
𝑛

𝑇(𝑛) = 2𝑛 + 2 ∑ 𝑡𝑖 + (2𝑠 + 4)
𝑖=1

Langkah dari pengerjaan pseudocode di atas adalah sebagai berikut:

Input A = (31, 41, 59, 26, 41, 58)

key = 26

1 ada = False
2 for i = 1 to ⸢6 / 2⸣ = 3
3 if A[1] = key then → (31 ≠ 26) → False
6 if A[6 - 1 + 1] = A[6] = key then → (59 ≠ 26) → False
2 for i = 2 to ⸢6 / 2⸣ = 3
3 if A[2] = key then → (41 ≠ 26) → False
6 if A[6 - 2 + 1] = A[5] = key then → (41 ≠ 26) → False
2 for i = 3 to ⸢6 / 2⸣ = 3
3 if A[3] = key then → (59 ≠ 26) → False
6 if A[6 - 3 + 1] = A[4] = key then → (26 = 26) → True
7 posisi = 6 - 3 + 1 = 4
8 ada = True
9 if not(ada) then → False
12 return 4
F. Ide Lain

Masih ada lagi cara lain yang dapat membuat waktu komputasi (running
time) dari proses pencarian-pencarian data tersebut menjadi lebih cepat dan
singkat. Pencarian tersebut dapat dipecah kembali menjadi beberapa bagian
lagi misalkan 1⁄4 , 1⁄8 , 1⁄16 dan seterusnya. Akan tetapi, pengembangan

alamiah ini hanya mengurangi 1⁄4 , 1⁄8 , 1⁄16 dari jumlah data n.

G. Binary Search Tree (BST)

Binary Search Tree (BST) merupakan prosedur penyimpanan data dalam


bentuk tertentu sedemikian rupa sehingga operasi dasar pada algoritma dapat
menjadi lebih efisien atau optimal.

Contoh untuk masalah pencarian Binary Search Tree (BST). Misalkan


terdapat struktur data yang memiliki sifat:

kiri(i) ≤ akar(i)

kanan(i) > akar(i)

Sebagai contohnya, digunakan input A = (31, 41, 59, 26, 41, 58). Dengan
menggunakan prosedur yang sama, maka data ini akan disimpan dengan cara
sebagai berikut:

31

26 41

41 59

58

Anda mungkin juga menyukai