Anda di halaman 1dari 4

SEARCH

Didefinisikan sebuah kamus dengan definisi konstanta dan tipe data di bawah ini.

Kamus
constant Nmax: integer = 33
type tabelInteger: <tabInt: array [1..Nmax] of integer
N: integer> {banyaknya elemen tabInt, 0 ≤ N ≤ Nmax}

Untuk tabInt di bawah ini nilai N adalah 18.

13 7 8 1 31 27 16 12 9 31 27 60 12 11 14 34 31 41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Diberikan sebuah tabel dengan N elemen. Algoritma search akan bertujuan untuk mencari sebuah nilai pada
sekumpulan nilai yang tipenya sama, dalam hal ini tabel. Di materi berikutnya kita akan mengimplementasikan
algoritma search yang sama untuk list berkait.

Yang khas dari algoritma search adalah proses pencarian akan berhenti setelah nilai yang dicari ditemukan.
Kondisi lainnya yang membuat proses pencarian berhenti adalah jika sudah mencapai elemen terakhir.

Keluaran dari algoritma search adalah:


1. sebuah nilai Boolean yang akan bernilai true jika nilai yang dicari ditemukan atau false jika tidak
ditemukan, atau
2. indeks terkecil tabel yang menyimpan nilai yang dicari jika ditemukan, atau 0 jika nilai tidak ditemukan.

Misalkan pada kamus telah terdefinisi konstata dan tipe berikut:

constant Nmax: integer = 33


type tabelInteger: <tabInt: array [1..Nmax] of integer
N: integer> {banyaknya elemen tabel, 0 ≤ N ≤ Nmax}

Algoritma SEQSearchX1A mencari nilai (X) pada tabel integer T. Perhatikan IS (initial state/kondisi awal) dan FS
(final state/kondisi akhir). Algoritma X1B, dan SEQSearchX1C adalah variasi-variasi dari algoritma
SEQSearchX1A.

Procedure SEQSearchX1A (input T:tabelInteger, X: integer; output IX: integer)


{IS. T.TabInt mempunyai elemen sebanyak N, dimana N > 0 artinya tabel tidak kosong
FS. IX adalah index terkecil TabInt yang menyimpan X jika X ada pada tabel T. IX bernilai 0 jika X tidak
ditemukan }
Dictionary
i: integer
Algorithm
i1
while (i < T.N) and (T.TabInt[i] ≠ X) do {Pengecekan T.TabInt[i] ≠ X sebagai kondisi loop}
ii+1
endwhile { i = T.N or T.TabInt[i] = X, berhenti pada elemen terakhir atau pada elemen X}
if T.TabInt[i]=X then
IX  i
else
IX  0
endif
Procedure SEQSearchX1B (input T:tabelInteger, X: integer; output found: boolean)
{IS. T.TabInt mempunyai elemen sebanyak N, dimana N > 0 artinya tabel tidak kosong
FS. found=true jika X ditemukan, found=false jika X tidak ditemukan }
Dictionary
i: integer
Algorithm
i1
while (i < T.N) and (T.TabInt[i] ≠ X) do {Pengecekan T.TabInt[i] ≠ X sebagai kondisi loop}
ii+1
endwhile { i = T.N or T.TabInt[i] = X, berhenti pada elemen terakhir atau pada elemen X}

found  T.TabInt[i]=X

function SEQSearchX1C (T:tabelInteger, X: integer)  boolean


{T tidak kosong, X nilai yang akan dicari. Fungsi mengirimkan true jika X ditemukan, false jika tidak
ditemukan }
Dictionary
i: integer
Algorithm
i1
while (i < T.N) and (T.TabInt[i] ≠ X) do {Pengecekan T.TabInt[i] ≠ X sebagai kondisi loop}
ii+1
endwhile { i = T.N or T.TabInt[i] = X, berhenti pada elemen terakhir atau pada elemen X}

 ( T.TabInt[i]=X)

Latihan

Perhatikan algoritma SEQSearch1A.

a. Jika X=15, dimana posisi i begitu keluar dari loop while? Berapakah nilai IX?
b. Jika X=10, dimana posisi i begitu keluar dari loop while? Berapakah nilai IX?
c. Jika X=29, dimana posisi i begitu keluar dari loop while? Berapakah nilai IX?

4 9 13 15 7 23 31 25 14 7 29
1 2 3 4 5 6 7 8 9 10 11
Algoritma SEQSearch1A, 1B, 1C hanya bisa dijalankan pada tabel yang tidak kosong. Untuk tabel yang
mungkin kosong (N < 0), algoritma SEQSearch2A, 2B, 2C bisa diberlakukan.

Procedure SEQSearchX2A (input T: TabelInteger, X: integer, output IX: integer)


{IS. T.TabInt mungkin kosong
FS. IX adalah index terkecil TabInt yang menyimpan X jika X ada pada tabel T. IX bernilai 0 jika X tidak
ditemukan }
Dictionary
i: integer
found: Boolean
Algorithm
found  false
i1
while (i ≤ T.N) and (not Found) do
if T.TabInt[i] = X then {Pengecekan T.TabInt[i] ≠ X ada di dalam loop}
found  true
else
ii+1
endwhile
{proses berhenti jika i > N yaitu setelah elemen terakhir diperoses atau Found yaitu jika X
ditemukan}
if found then
IX  i
else
IX  0
endif

Procedure SEQSearchX2B (input T: TabelInteger, X: integer, output found: boolean)


{IS. T.TabInt mempunyai elemen sebanyak N, dimana N > 0 artinya tabel tidak kosong
FS. found=true jika X ditemukan, found=false jika X tidak ditemukan }
Dictionary
i: integer
Algorithm
found  false
i1
while (i ≤ T.N) and (not Found) do
if T.TabInt[i] = X then {Pengecekan T.TabInt[i] ≠ X ada di dalam loop}
found  true
else
ii+1
endif
endwhile
{proses berhenti jika i > N yaitu setelah elemen terakhir diperoses atau Found yaitu jika X
ditemukan}
function SEQSearchX2C (T: TabelInteger, X: integer)  integer
{T mungkin kosong. Akan dicari X pada T. Jika X ada maka fungsi akan mengirimkan indeks terkecil
yang menyimpan X. Jika X tidak ditemukan maka fungsi mengirimkan 0 }
Dictionary
i: integer
found: boolean
Algorithm
found  false
i1
while (i ≤ T.N) and (not Found) do
if T.TabInt[i] = X then {Pengecekan T.TabInt[i] ≠ X ada di dalam loop}
found  true
else
ii+1
endwhile
{proses berhenti jika i > N yaitu setelah elemen terakhir diperoses atau Found yaitu jika X
ditemukan}
if found then
i
else
0
endif

Latihan

Perhatikan algoritma SEQSearch2B.

a. Jika X=7, dimana posisi i begitu keluar dari loop while? Apakah nilai found?
b. Jika X=17, dimana posisi i begitu keluar dari loop while? Apakah nilai found?

4 9 13 15 7 23 31 25 14 7 29
1 2 3 4 5 6 7 8 9 10 11

Anda mungkin juga menyukai