BAB VI SEARCHING (PENCARIAN)

dokumen-dokumen yang mirip
Searching [pencarian] Algoritma Pemrograman

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

MODUL IV PENCARIAN DAN PENGURUTAN

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

ALGORITMA PENGURUTAN & PENCARIAN

1 Pencarian. 1.1 Tinjauan Singkat Larik

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Yaitu proses pengaturan sekumpulan objek menurut urutan atau susunan tertentu Acuan pengurutan dibedakan menjadi :

SORTING. Brigida Arie Minartiningtyas, M.Kom

SEQUENTIAL SEARCH 11/11/2010. Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

c. Hasil pencarian berupa nilai Boolean yang menyatakan status hasil pencarian. Versi 1 (Pembandingan elemen dilakukan sebagai kondisi pengulangan)

Pencarian pada Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 14 & 15

BAB V SORTING (PENGURUTAN) INTERNAL

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

Algoritma dan Pemrograman 2 PENCARIAN

Algoritma dan Pemrograman Searching/Pencarian

CCH1A4 / Dasar Algoritma & Pemrogramanan

Pencarian. 1. Memahami konsep pencarian 2. Mengenal beberapa algoritma pencarian 3. Menerapkan algoritma pencarian dalam program

Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien). Algoritma yang bagus adalah algoritma yang mangkus.

SEARCHING. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 1

Kompleksitas Algoritma

Kuliah ke : 4 Algoritma & Stuktur Data. Pengurutan (Sorting)

Pengurutan (Sorting) Keuntungan Data Terurut. Pengurutan Terbagi Dua Kelompok:

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Algoritma Searching Tenia wahyuningrum, S.Kom. MT dan Sisilia Thya Safitri, MT

Kompleksitas Algoritma (1)

ARRAY STATIS. Type namatype_array = array [1..maks_array] of tipedata. nama_var_array : namatype_array {indeks array dari 1 sampai maksimum array}

SORTING (PENGURUTAN DATA)

Pertemuan XII ALGORITMA. Algoritma & Pemrograman Ken Kinanti P 1. {Pencarian Beruntun / Sequential Search}

AnalisisFramework. Mengukur ukuran atau jumlah input Mengukur waktu eksekusi Tingkat pertumbuhan Efiesiensi worst-case, best-case dan average-case

Kompleksitas Algoritma

Pengurutan (Sorting) Algoritma Pemrograman

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

STRATEGI DIVIDE AND CONQUER

Array (Tabel) Tim Pengajar KU1071 Sem /11/3 TW/KU1071 1

Bubble Sort (Pengurutan Gelembung / Pemberatan)

A B C D E F. Gambar 1. Senarai berantai dengan 6 simpul

1. Kompetensi Mengenal dan memahami notasi-notasi algoritma yang ada.

ALGORITMA PENCARIAN. c. Hasil pencarian berupa nilai Boolean yang menyatakan status hasil pencarian.

PENGURUTAN (SORTING) 1. Introduction 2. Bubble Sort 3. Selection Sort 4. Insertion Sort

Algoritma dan Pemrograman Array/Tabel[2] Oleh: Eddy Prasetyo N

Algoritma Brute Force

SORTING. Struktur Data S1 Sistem Informasi. Ld.Farida

DATA SORTING. Altien Jonathan Rindengan, S.Si, M.Kom

BAB VII ALGORITMA DIVIDE AND CONQUER

BAB 8 SORTING DAN SEARCHING

Konsep Sorting dalam Pemrograman Saniman dan Muhammad Fathoni

7. SORTING DAN SEARCHING

LAPORAN AKHIR PRAKTIKUM STRUKTUR DATA

Pendahuluan. Sebuah algoritma tidak saja harus benar, tetapi juga harus efisien. Algoritma yang bagus adalah algoritma yang efektif dan efisien.

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 12 & 13

Algoritma dan Pemrograman Sorting (Pengurutan) IS1313. Oleh: Eddy Prasetyo N

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

BAB VIII Pencarian(Searching)

PENGURUTAN DATA 2.1 Definisi Pengurutan 2.2 Metode-metode Pengurutan

Adam Mukharil Bachtiar English Class Informatics Engineering Algorithms and Programming Searching

SEARCHING (PENCARIAN)

Meizano Ardhi M., S.T.

*** SELAMAT MENGERJAKAN

Algoritme dan Pemrograman

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Queue.

ANALISIS ALGORITMA. Disusun Oleh: Analisis Masalah dan Running Time. Adam Mukharil Bachtiar Teknik Informatika UNIKOM

Kompleksitas Algoritma

Penggunaan Graf dalam Pemodelan Matematis Permainan Delapan Jari

Matematika Diskrit Kompleksitas Algoritma. Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

BAB VII PENCARIAN DATA (SEARCHING)

BAB III QUEUE (ANTRIAN)

Kompleksitas Algoritma

Algoritma dan Pemrograman 2 PENGURUTAN

Menghapus Pointer Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai bentuk umum : Dispose(peubah) ;

Array. Teknik Informatika Politeknik Negeri Batam

Operasi File. Chapter 13

Nama : Suseno Rudiansyah NPM : Kelas : X2T Prodi : Teknik Informatika Tugas : Kuis Algoritma 2

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

LATIHAN UTS Tim Pengajar KU1071 Sem

SORTING. Hartanto Tantriawan, S.Kom., M.Kom

Algoritma dan Struktur Data. Searching dan Sorting

Searching. Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Materi 5: SEARCHING (PENCARIAN) Dosen:

Pengertian Algoritma Pengurutan

Larik/Array ALGORITMA DAN PEMROGRAMAN [IS ] Dosen: Yudha Saintika, S.T., M.T.I

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

Algoritma & Pemrograman

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

BAB II STACK (TUMPUKAN)

Analisis Algoritm. Fundamentals of the Anlysis of Algorithm Efficiency

Teori Algoritma TIPE DATA

Decrease and Conquer

Selamat Mengerjakan. 2. Keluaran dari baris 10 adalah? a. 1 b. 4 c. 2.5 d. 2 e Keluaran dari baris 11 adalah? a. 1 b. 4 c. 2.5 d. 2 e.

LOOPING. Brigida Arie Minartiningtyas, M.Kom

ALGORITMA SEARCHING. Oleh : Agus Priyanto, M.Kom SEKOLAH TINGGI TEKNOLOGI TELEMATIKA TELKOM. Smart, Trustworthy, And Teamwork

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

BAB XI Manipulasi Binary Tree

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

MODUL 1. Struktur Bahasa PASCAL secara umum

Transkripsi:

BAB VI SEARCHING (PENCARIAN) 7. 1 Pencarian Beruntun (Sequential Search) Prinsip kerja pencarian beruntun adalah membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau semua elemen sudah diperiksa. Pencarian beruntun ada dua macam yaitu pencarian beruntun pada larik terurut dan pencarian beruntun pada larik tidak terurut. 7.1.1 Pencarian Beruntun pada Larik yang Tidak Terurut Pencarian dilakukan dengan memeriksa setiap elemen larik mulai dari elemen pertama sampai elemen yang dicari ditemukan atau sampai seluruh elemen sudah diperiksa. Contoh Perhatikan larik L di berikut ini 44 55 12 42 94 18 06 67 1 2 3 4 5 6 7 8 Misalkan nilai yang dicari adalah X = 94 Maka, elemen yang diperiksa 44, 55, 12, 42, 94 (ditemukan) Indeks larik yang dikembalikan idx = 4. Misalkan nilai yang dicari adalah X = 44 Maka, elemen yang diperiksa 44 (ditemukan) Indeks larik yang dikembalikan idx = 1. Misalkan nilai yang dicari adalah X = 10 Maka, elemen yang diperiksa 44, 55, 12, 42, 94, 18, 06, 67 (tidak ditemukan) Indeks larik yang dikembalikan idx = 0. Algoritma pencarian beruntun sbb Procedure cari runtun1(llarik, ninteger; xinteger; var idxxinteger); {mencari X di dalam larik L[1..N] secara beruntun, dimulai dari elemen pertama sampai X ditemukan atau seluruh elemen larik L sudah diperiksa. Keluaran dari proses ini adalah indeks idxx dimana L[idxX] =X. idxx berharga 0 jika X tidak ditemukan} Var i integer; {indeks untuk pencarian} i = 1; {periksa selama i < n dan L[i] x} while (i < n) and (L[i] <> x) do i = i + 1; {maju ke elemen berikutnya} {i = n atau L[i] = x} {simpulkan hasil pencarian} if (L[i] <> x ) then idxx = 0 idxx = i; Halaman. 1

Algoritma pencarian beruntun versi boolean Procedure cari runtun_versiboolean(llarik, ninteger; xinteger; var idxxinteger); {mencari X di dalam larik L[1..N] secara beruntun, dimulai dari elemen pertama sampai X ditemukan atau seluruh elemen larik L sudah diperiksa. Keluaran dari proses ini adalah indeks idxx dimana L[idxX] =X. idxx berharga 0 jika X tidak ditemukan versi boolean} Var i integer; {indeks untuk pencarian} ketemu integer; i = 1; ketemu = false; {periksa selama i <= n dan ketemu masih bernilai false} while (i <= n) and (not ketemu) do i f L[i] = x then ketemu = true {hentikan proses pencarian} i = i + 1; {maju ke elemen berikutnya} {i > n atau ketemu = true} {simpulkan hasil pencarian} if ketemu then idxx = i idxx = 0; 7. 1. 2 Pencarian Beruntun dengan Sentinel Sentinel merupakan elemen fiktif yang sengaja ditambahkan sesudah elemen terakhir larik. Jika elemen terakhir larik adalah L[N], maka sentinel dipasang pada elemen L[N + 1]. Sentinel ini harganya sama dengan da ta yang di cari. Akibatnya, proses pencarian selalu berhasil menemukan data yang dicari. Walaupun demikian harus diperiksa lagi letak data tersebut ditemukan, apakah (i) diantara elemen-elemen larik sesungguhnya yaitu dari L[1] sampai L[N], atau (ii) pada elemen fiktif yaitu L[N + 1] yang berarti X sesungguhnya tidak terdapat di dalam larik L. Jika X tidak ditemukan, maka sentinel tesebut sekaligus sudah ditambahkan. Perlu diingat batas pendefinisian indeks larik, sebab komputer tidak boleh mengakses elemen larik yang indeksnya melebihi rentang indeks yang sudah didefinisikan. Perhatikan larik di bawah ini 13 16 14 21 76 21 1 2 3 4 5 6 N = 6 (jumlah elemen larik semula) (i) Misalkan elemen yang dicari adalah X = 21. Maka tambahkan 21 sebagai elemen sentinel di L [N + 1] 13 16 14 21 76 21 21 1 2 3 4 5 6 7 Elemen yang diperiksa selama pencarian 13, 16, 14, 21 Indeks larik yang dikembalikan 4 Karena 4 N+1 berarti X = 21 terdapat di dalam larik L semula. (ii) Misalkan elemen yang dicari adalah X = 13. Maka tambahkan 13 sebagai elemen sentinel di L [N + 1] Halaman. 2

13 16 14 21 76 21 13 1 2 3 4 5 6 7 Elemen yang diperiksa selama pencarian 13 Indeks larik yang dikembalikan 1 Karena 1 N+1 berarti X = 13 terdapat di dalam larik L semula. (iii) Misalkan elemen yang dicari adalah X = 15. Maka tambahkan 15 sebagai elemen sentinel di L [N + 1] 13 16 14 21 76 21 15 1 2 3 4 5 6 7 Elemen yang diperiksa selama pencarian 13, 16, 14, 21, 76, 21, 15 Indeks larik yang dikembalikan 7 Karena 7 = N+1 berarti X = 15 tidak terdapat di dalam larik L semula. Algoritma Pencarian Beruntun dengan Sentinel Const max integer = 10; {jumlah maksimum elemen larik} Type Larik = array [1..max+1] of integer; {tipe larik} Procedure cari beruntunsentinel(llarik, ninteger; xinteger; var idxxinteger); {mencari X di dalam larik L[1..N] secara beruntun dimulai dari elemen pertama sampai X ditemukan atau seluruh elemen larik L sudah diperiksa. Keluaran dari proses ini adalah indeks idxx dimana L[idxX] =X. idxx berharga 0 jika X tidak ditemukan} Var i integer; {indeks untuk pencarian} ketemu boolean; i = 1; ketemu = false; {periksa selama I <= N dan ketemu masih bernilai false} while (I <= N) and (not ketemu) do if (L[I] = X) then ketemu = true {hentikan proses pencarian} {L[I] X} I = I + 1; {maju ke elemen berikutnya} {I > N or ketemu = true} if (ketemu) then idxx = I idxx = 0; {X ditemukan} {X tidak ditemukan di dalam larik} 7.1.3 Pencarian Beruntun pada Larik yang Terurut Secara singkat proses pencarian pada tabel terurut adalah sebagai berikut Dimulai dari elemen pertama pada tabel dilakukan pembandingan dengan elemen yang dicari. Jika elemen dalam tabel masih lebih kecil dari elemen yang dicari, pencarian dihentikan dan bisa dipastikan bahwa elemen yang dicari memang tidak ditemukan. Jika elemen yang dicari tidak ditemukan dan kits ingin menyisipkan elemen tersebut pada posisinya yang tepat, maka seringkali diperlukan adanya penggeseran terhadap elemen-elemen yang nantinya akan terletak pada subskrib yang lebih besar dari elemen yang dicari. Halaman. 3

Procedure cari runtun_ascaending(alarik, var adaboolean;var ninteger; var posisiinteger; data integer); {elemen vektor bertipe integer. Jika data yang dicari ditemukan, letaknya disimpan sebagai peubah posisi. Jika tidak ditemukan, data baru tersebut akan disisipkan ke dalam vektor} Var i, j integer; {indeks untuk pencarian} i = 1; j=0; ada = false; repeat if a[i] = data then {elemen yang dicari ditemukan} posisi = i; ada = true; end if a[i] > data then {elemen yang dicari tidak ditemukan} j = i; {posisi elemen yang baru} i = N-1; inc(i); until (i = n) or ada; if not ada then {data tidak ketemu} if j = 0 then {elemen baru menempati subkrib terakhir} a [n+1] = data; {menyisip di tengah} for i = n downto j do {menggeser elemen} a[i+1] = a[i]; a[j] = data; {menempatkan elemen baru} inc (n); {menambah ukuran vektor} 7. 2. Pencarian Biner /Bagi Dua (Binary Search) Pencarian dua/biner (binary search) merupakan metode pencarian yang diterapkan pada sekumpulan data yang sudah terurut baik secara ascending maupun descending. Salah satu keuntungan data yang terurut adalah memudahkan pencarian dalam hal ini adalah pencarian bagidua. Syarat utama penerapan pencarian bagi dua adalah data yang sudah terurut (ascending/menaik atau descending/menurun). Selama proses pencarian diperlukan dua buah indeks larik yaitu indeks terkecil dan indeks terbesar. Indeks terkecil sebagai indeks ujung kiri larik dan terbesar sebgai indeks ujung kanan larik. Istilah kiri dan kanan dinyatakan dengan membayangkan elemen larik terentang horizontal. Misalkan indeks kiri adalah Atas (a) dan indeks kanan adalah Bawah (b). Pada mulanya, ia=1 dan ib=n. Langkah 1 Bagi dua elemen larik pada elemen tengah. Elemen tengah adalah elemen dengan indeks k = (a + b) div 2. Elemen tengah, L[k], membagi larik menjadi dua bagian, yaitu bagian kiri L[ia..k-1] dan bagian kanan L[k+1..ib]. Langkah 2 Periksa apakah L[k] = X (X adalah elemen yang dicari dalam larik). Jika L[k] = X, pencarian dihentikan karena X ditemukan. Jika L[k] <> X, harus ditentukan apakah pencarian akan dilakukan pada larik bagian kiri atau bagian kanan. Jika L[k] < X, maka pencarian dilakukan pada larik bagian kiri. Sebaliknya, jika L[k] > X, pencarian dilakukan pada larik bagian kanan. Langkah 3 Ulangi langkah 1 sampai X ditemukan atau ia > ib yaitu ukuran larik sudah nol. Contoh pencarian biner Misalakan diberikan larik L, dengan 8 elemen yang sudah terurut descending seperi berikut Halaman. 4

ia=1 2 3 4 5 6 7 ib=8 (i) Misalkan elemen yang di cari adalah X = 44. Langkah 1 ia = 1 dan ib = 8. Indeks elemen tengah k = (1 + 8) div 2 = 4 (diarsir) 1 2 3 4 5 6 7 8 kiri kanan Langkah 2 L[4] = 44? Ya. (X ditemukan, pencarian dihentikan). (ii) Misalkan elemen yang di cari adalah X = 42. Langkah 1 ia = 1 dan ib = 8. Indeks elemen tengah k = (1 + 8) div 2 = 4 (diarsir) ia=1 2 3 4 5 6 7 ib=8 Langkah 2 kiri kanan L[4] = 42? Tidak. Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan L[4] > 42? Ya. Lakukan pencarian pada larik bagian kanan dengan ia = k + 1 = 4 +1 = 5 dan ib = 8 (tetap) 42 18 12 06 ia=5 6 7 ib=8 Langkah 1 ia = 5 dan ib = 8. Indeks elemen tengah k = (5 + 8) div 2 = 6 (diarsir) 42 18 12 06 5 6 7 8 Kiri Kanan Langkah 2 L[6] = 42? Tidak. Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan L[6] > 42? Tidak. Lakukan pencarian pada larik bagian kiri dengan ia = 5 (tetap) dan ib = k - 1 = 6 1 = 5 42 5 Halaman. 5

Langkah 1 ia = 5 dan ib= 5 Indeks elemen tengah k = (5 + 5) div 2 =5 (diarsir) 42 5 Langkah 2 L[5] = 42? Ya. (X ditemukan, pencarian dihentikan) (iii) Misalkan elemen yang di cari adalah X = 97. Langkah 1 ia = 1 dan ib = 8. Indeks elemen tengah k = (1 + 8) div 2 = 4 (diarsir) ia=1 2 3 4 5 6 7 ib=8 kiri kanan Langkah 2 L[4] = 97? Tidak. Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan L[4] > 97? Tidak. Lakukan pencarian pada larik bagian kiri dengan ia = 1 (tetap) dan ib = k 1 = 4 1= 3 94 67 55 ia=1 2 ib=3 Langkah 1 ia = 1 dan ib = 3. Indeks elemen tengah k = (1 +3) div 2 = 2 (diarsir) 94 67 55 1 2 3 Kiri Kanan Langkah 2 L[2] = 97? Tidak. Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan L[2] > 97? Tidak. Lakukan pencarian pada larik bagian kiri dengan ia = 1 (tetap) dan ib = k - 1 = 2 1 = 1 94 1 Langkah 1 ia = 1 dan ib= 1 Halaman. 6

Indeks elemen tengah k = (1 + 1) div 2 =1 (diarsir) 94 Langkah 2 1 L[1] = 97? Tidak. Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan L[1] > 97? Tidak. Lakukan pencarian pada larik bagian kiri dengan ia = 1 (tetap) dan ib = k - 1 = 1 1 = 0 karena ia > ib, maka tidak ada lagi bagian larik yang tersisa. Jadi, X tidak ditemukan di dalam larik, pencarian dihentikan. Algoritma pencarian bagidua (biner) Procedure cari binerdescending(llarik, ninteger; xinteger; var idxxinteger); {mencari X di dalam larik L[1..N] yang sudah terurut menaik dengan metode pencarian biner. Keluaran dari proses ini adalah indeks idxx dimana L[idxX] =X. idxx berharga 0 jika X tidak ditemukan} Var ia, ib, k integer; ketemu boolean; ia = 1; ib = N; ketemu = false; while (not ketemu) and (ia <= ib) do k = (ia + ib) div 2; {bagidua larik L pada posisi k} if (L[k] = X) then ketemu = true {L[k] X} if (L[k] > X) then {akan dilakukan pencarian pada larik begian kanan, set indeks ujung kiri larik yang baru} ia = k + 1 ib = k 1; {ketemu = true or ia > ib} if (ketemu) then {X ditemukan} idxx = k {X tidak ditemukan di dalam larik} idxx = 0; Untuk pencarian biner pada larik yang sudah terurut menaik, hanya perlu mengganti If (L[k] > X ) then dengan If (L[k] < X ) then Untuk larik berukuran N elemen - algoritma pencarian beruntun melakukan pembandingan elemen larik sebanyak N kali. - algoritma pencarian biner melakukan pembandingan elemen larik sebanyak 2 log(n) kali. Karena 2 log(n) < N untuk N yang besar, maka algoritma pencarian biner lebih cepat daripada algoritma beruntun. Halaman. 7