03. array statis dan searching
DESCRIPTION
Array and SearchingTRANSCRIPT
Array statis direpresentasikan di memori secara kontinyu. Contoh: array Angka (1:5).
3
Angka(1)
Angka(2)
Angka(3)
Angka(4)
Angka(5)
Angka
Algoritma: Contoh:
4
Kamus:
nama_var_array:array[1..maks_array] of tipedata
Kamus:
Angka : array[1..5] of integer
Algoritma: Contoh:
5
Kamus:
Const
maks_array = ...
nama_var_array:array[1..maks_array] of tipedata
Kamus:
Const
Maks_Angka = 5
Angka : array[1..maks_Angka] of integer
Algoritma:
6
Kamus:
Const
maks_array = ...
Type
nama_type_array=array[1..maks_array] of tipedata
nama_var_array : nama_type_array
Contoh:
7
Kamus:
Const
maks_Angka = 5
Type
array_Angka = array[1..maks_Angka] of integer
Angka : array_Angka
Algoritma:
8
Kamus:
Const
maks_array = ...
Type
nama_record = record
< field_1:tipedata_1,
field_2:tipedata_2,
...
field_n:tipedata_n >
endrecord
nama_type_array=array[1..maks_array] of nama_record
nama_var_array : nama_type_array
Contoh:
9
Kamus:
Const
Maks_Mhs = 50
Type
Data_Mahasiswa = record
nim,nama:string,
nilai :integer,
indeks :char
endrecord
Mahasiswa = array[1..Maks_Mhs] of Data_Mahasiswa
Mhs : Mahasiswa
1. Penciptaan (create) 2. Traversal 3. Pencarian (searching) 4. Pengurutan (sorting) 5. Penghancuran (destroy)
10
Operasi penciptaan (create) adalah proses mempersiapkan array untuk diakses/diproses dengan asumsi elemen array diisi dengan angka 0 jika elemen arraynya berupa numerik/bilangan/angka
atau diisi dengan karakter spasi,”/”, atau ‘/’ jika berupa alphanumerik.
11
Algoritma secara umum:
12
Procedure create (Output nama_var_array:nama_type_array)
{I.S: elemen array diberi harga awal agar siap
digunakan}
{F.S: menghasilkan array yang siap digunakan}
Kamus:
indeks : integer
Algoritma:
for indeks 1 to maks_array do
nama_var_array(indeks) 0 {elemen array numerik}
endfor
EndProcedure
Operasi traversal adalah proses mengunjungi setiap elemen array satu persatu dari elemen pertama sampai elemen terakhir.
13
1. Pengisian elemen array dengan data
2. Menampilkan elemen array
3. Penambahan data di array
4. Penyisipan data di indeks tertentu pada
array
5. Penghapusan data di indeks tertentu pada
array
6. Menentukan nilai maksimum dan minimum
7. Menghitung nilai rata-rata, dsb.
14
15
Procedure traversal (I/O nama_var_array:nama_type_array)
{I.S: data array dan maksimum array sudah terdefinisi}
{F.S: menghasilkan array yang sudah diproses}
Kamus:
indeks : integer
Algoritma:
Inisialisasi {pemberian harga awal terhadap sebuah
variabel}
for indeks 1 to maks_array do
proses
endfor
Terminasi {penutupan yang harus dilakukan setelah
proses selesai}
EndProcedure
16
Procedure Isi_Angka (I/O Angka : array_Angka)
{I.S: array angka (1:5)sudah terdefinisi}
{F.S: menghasilkan array angka (1:5) yang sudah
dimasukan oleh user}
Kamus:
i : integer
Algoritma:
for i 1 to maks_Angka do
Input(Angka(i))
endfor
EndProcedure
Operasi pencarian (searching) adalah proses menemukan suatu data yang terdapat dalam suatu array. Metode Pencarian: - Sequential Search - Binary Search
17
Sequential / Linear Search: 1. Tanpa Boolean
a. Tanpa Sentinel b. Dengan Sentinel
2. Dengan Boolean
18
Tanpa boolean tanpa sentinel: 1. Tidak menggunakan variabel
boolean
2. Tidak mempunyai tambahan elemen di akhir array.
19
Tanpa boolean dengan sentinel:
1. Tidak menggunakan variabel
boolean
2. Mempunyai tambahan elemen di
akhir array untuk menyimpan
data cari apabila data cari tidak
ditemukan
20
Dengan boolean: 1. Menggunakan variabel boolean
2. Menghasilkan nilai TRUE atau
FALSE di akhir pencarian
21
Mis. diberikan data sebagai berikut: Angka
Data yang dicari : 9 - Angka(1) = 9? F - Angka(2) = 9? F - Angka(3) = 9? T
Maka data yang dicari ditemukan pada indeks ke-3
5 1 9 4 2 1 2 3 4 5
Procedure SeqSearchTanpaSentinel(Input nama_array:tipe_array) {I.S. : elemen array [1..maks_array] sudah terdefinisi} {F.S. : menampilkan data yg dicari ditemukan atau tidak
ditemukan} Kamus: i : integer data_cari : tipedata Algoritma: input(data_cari) i 1 while(nama_array (i) ≠ data_cari) and (i < maks_array) do i i + 1 endwhile if (nama_array(i) = data_cari) then output(data_cari,’ ditemukan pada indeks ke-’,i) else output(data_cari,’ tidak ditemukan’) endif EndProcedure
Mis. diberikan data sebagai berikut:
Angka
Data yang dicari : 9 - Tempatkan data yang dicari pada sentinel - Telusuri array seperti sequential search tanpa sentinel, jika data ditemukan pada sentinel, maka data yang dicari tidak ada/tidak ditemukan, tapi jika data yang dicari ditemukan bukan pada sentinel, maka data yang dicari ditemukan.
5 1 9 4 2 9 1 2 3 4 5 6
sentinel
Procedure SeqSearchSentinel(Input nama_array:tipe_array) {I.S. : elemen array [1..maks_array] sudah terdefinisi} {F.S. : menampilkan data yg dicari ditemukan atau tidak ditemukan} Kamus: i : integer data_cari : tipedata Algoritma: input(data_cari) i 1 nama_array(maks_array + 1) data_cari while (nama_array (i) ≠ data_cari) do i i + 1 endwhile if (i < maks_array+1) then output(data_cari,’ ditemukan pada indeks ke-’,i) else output(data_cari,’ tidak ditemukan’) endif EndProcedure
Mis. diberikan data sebagai berikut: Angka
Data yang dicari : 9 Proses pencariannya sama seperti proses pencarian pada metode sequential search lainnya, hanya saja melibatkan sebuah variabel lain yg bertipe boolean.
5 1 9 4 2
1 2 3 4 5
Procedure seq_search_boolean (Input nama_array:tipe_array) {I.S. : elemen array [1..maks_array] sudah terdefinisi} {F.S. : menampilkan data yg dicari ditemukan atau tidak ditemukan} Kamus: i : integer ketemu : boolean data_cari : tipedata Algoritma: input(data_cari) i 1 ketemu false while (not ketemu) and (i ≤ maks_array) do if (nama_var_array(i) = data_cari) then ketemu true else i i + 1 endif endwhile if (ketemu) then output(data_cari,’ ditemukan pada indeks ke-’,i) else output(data_cari,’ tidak ditemukan’) endif EndProcedure
1. Data harus terurut, baik secara ascending atau
descending
2. Mekanismenya adalah dengan cara membagi larik
menjadi dua bagian yaitu bagian kiri (indeks
terkecil/Ia) sampai ke indeks tengah dan bagian
kanan mulai dari indeks tengah sampai indeks
terbesar (Ib)
3. Indeks tengah (k) : (Ia+Ib) div 2 (posisi tengah larik)
28
4. Jika data yang dicari lebih kecil dari data di posisi tengah, maka pencarian dilanjutkan ke bagian kiri
5. Jika data yang dicari lebih besar dari data di posisi tengah, maka pencarian dilanjutkan ke bagian kanan
29
Data yang dicari = 7 Banyak data = 5 Angka Angka
30
3 7 12 15 29
1 2 3 4 5
Ia k Ib Bag. Kiri Bag. Kanan
3 7
1 2
Ia Ib k
Bag. Kiri Bag. Kanan