Resume Mata Kuliah Desain Dan Analisis Algoritma Pertemuan 3-4
Resume Mata Kuliah Desain Dan Analisis Algoritma Pertemuan 3-4
PERTEMUAN 3-4
NIM : H071181010
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
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:
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
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
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
𝑇(𝑛) = 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).
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
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.
kiri(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