Algoritma Pencarian (searching)

Slides:



Advertisements
Presentasi serupa
Pencarian ( Searching)
Advertisements

STRUKTUR DASAR ALGORITMA
7. PENJUMLAHAN DUA BUAH MATRIKS
PERTEMUAN 6 Algoritma Presented by : Sity Aisyah, M.Kom
PENGURUTAN (SORTING).
Searching Alpro-2.
PENCARIAN (SEARCHING)
Dasar Pemrograman ARRAY/LARIK.
Notasi Algoritma.
ARRAY 1 DIMENSI.
Algoritma dan Pemrograman
Searching.
- PERTEMUAN 9 - LARIK/ARRAY SATU DIMENSI (1D)
Algoritma (Struktur, Tipe Data, Input/Output)
Notasi Algoritma.
1 Nama Kelompok : Doddy Setiawan Moh. Abdul Latief Yosep Pangky ALGORITMA MERGE SORT.
CS1023 Pemrograman Komputer Lecture 20 Array / Tabel [2]
Algoritma Brute Force Oleh: Muhammad Musta’in ( )
Algoritma dan Pemrograman Subrutin
Pengulangan Bambang Irawan.
Array (bagian 2).
MATERI PERKULIAHAN ANALISIS ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
Algoritma dan Pemrograman STRUKTUR PEMILIHAN (SELECTION) lanjutan
4. Linked List (List Linier)
KUG1C3 Dasar Pemrograman
KUG1A3 Algoritma& Pemrograman
KUG1A3 Algoritma& Pemrograman
CSG3F3/ Desain dan Analisis Algoritma
Algoritma dan Pemrograman Searching
Algoritma & Pemrograman
Bahan Kuliah IF2211 Strategi Algoritma Oleh: Rinaldi Munir
Pencarian pada Array Tim PHKI Modul Dasar Pemrograman
STRUKTUR DASAR ALGORITMA
Struktur data Oleh: Tim Struktur Data IF ARRAY STATIS.
Algoritma dan Pemrograman Searching
STRUKTUR DASAR ALGORITMA
PENGURUTAN (SORTING).
Achmad Yasid Struktur Data.
Algoritma & Pemrograman 1
TEL 2103 Dasar Komputer & Pemograman Larik (Array)
Looping (Perulangan).
Array 1.
STRUKTUR DATA Array Statis.
Algoritma dan Pemrograman
TEL 2112 Dasar Komputer & Pemograman Larik (Array)
Array/Larik.
Analisis Algoritma dan Struktur Data
Pengulangan Bambang Irawan.
Teknik Informatika Politeknik Negeri Batam
Struktur Dasar Algoritma dan Runtunan
MATERI PERKULIAHAN ANALISIS ALGORITMA
Review Array Sri Nurhayati, MT.
SEARCHING (PENCARIAN)
Oleh : UMMU ZAHRA ALGORITMA.
ARRAY STATIS Sri Nurhayati, MT.
Searching & Sorting Searching Sorting Oleh : Oman Somantri, S.Kom
Algoritma dan Pemrograman Searching
Algoritma Brute Force.
SEARCHING Ada 3 metode pencarian yang akan kita bahas disini:
Algoritma dan Pemrograman STRUKTUR PEMILIHAN (SELECTION) lanjutan
Review Array Sri Nurhayati, MT.
ARRAY STATIS Sri Nurhayati, MT.
STUKTUR DATA “Sequential Search and Binary Search”
Pencarian (searching)
STRUKTUR DASAR ALGORITMA
SEARCHING Universitas Dian Nuswantoro Semarang 12/7/2018.
SEARCHING Ada 3 metode pencarian yang akan kita bahas disini:
SEARCHING ( PENCARIAN )
Larik/Array ALGORITMA DAN PEMROGRAMAN [IS ] Koordinator Mata Kuliah : Fathushahib, S.Kom., M.Kom Tim Dosen: Yudha Saintika, S.T., M.T.I.
Transcript presentasi:

Algoritma Pencarian (searching)

Definisi Algoritma Pencarian Proses pencarian adalah menemukan nilai (data) tertentu dalam sekumpulan data yang bertipe sama (tipe dasar atau tipe bentukan) larik (array) Pencarian (searching) merupakan proses yg mendasar dalam pengelohana data. Contoh: UPDATE, INSERT.

Spesifikasi Masalah Pencarian : Hasil/keluaran dari persoalan pencarian bergantung pada spesifikasi rinci dari persolan tersebut, seperti hasil/keluaran: Sebuah pesan (message) : ditemukan atau tidak ditemukan di dalam Larik. Contoh : write(‘ditemukan’) atau write(‘ tidak ditemukan’) Indeks emelen Larik dari data/nilai yg ditemukan, jika tidak ditemukan indeks diisi dg harga khusus, misal:-1 Contoh: x= 76 idx=3, x=100  idx=-1 Nilai boolean yg menyatakan status hasil pencarian : jika ada data/nilai ditemukan, maka peubah/variabel yg bertipe boolean diisi dg true, dan kalau tidak ketemu diisi dengan false. Contoh: x= 76 ketemu=true, x=100  ketemu= false Spesifikasi Masalah Pencarian :

Pencarian untuk duplikasi data : Apabila data yang dicari terdapat lebih dari satu banyaknya, maka hanya data yang pertama kali ditemukan yang diacu, dan algoritma pencarian selesai. Contoh : Larik A mempunyai dua buah nilai 42, maka algoritma selesai ketika nilai 42 pertama ditemukan, yaitu pada elemen ke-6, dan hasilnya adalah idx = 6, atau ketemu = true. Nilai 42 lainnya tidak dipertimbangkan lagi dalam pencarian.

Metode pencarian data di dalam array diklasifikasikan menjadi dua, yaitu : Metode pencarian beruntun (sequantial search) Metode pencarian bagi dua/pencarian biner (binary search)

Metode pencarian beruntun (sequantial search) Disebut juga dengan pencarian lurus (linear search) Proses membandingkan setiap elemen larik(array) satu persatu beruntun, mulai elemen pertama sampai elemen yg dicari ditemukan, atau seluruh elemen sudah diperiksa

Contoh : Metode pencarian beruntun (sequantial search) Misalkan nilai yang dicari adalah 42 Pemeriksaaan dilakukan terhadap elemen 60, 12, 76, 23, 11, 42 (ditemukan) Ternyata nilai ditemukan pada elemen ke 6 : Indek larik yang dikembalikan : idx  6 Proses pencarian dihentikan. Misalkan nilai yang dicari adalah 20 Pemeriksaan dilakukan terhadap elemen 60, 12, 76, 23, 11, 42, 18, 42 (tidak ditemukan) Ternyata nilai tidak ditemukan di dalam array, Indeks larik yang dikembalikan : idx  -1

Dua Versi algoritma pencarian beruntun ( sequential search) Aksi pembandingan dilakukan sebagai kondisi pengulangan : Tidak menggunakan peubah (variabel) boolean dalam proses pencarian. Aksi pembandingan dilakukan di dalam badan pengulangan : menggunakan peubah (variabel) boolean dalam proses pencarian.

Versi 1: Aksi pembandingan dilakukan sebagai kondisi pengulangan : Hasil pencarian yg diinginkan: sebuah peubah boolean yg bernilai true bila nilai ditemukan atau bernilai false bila data/nilai tidak ditemukan Algoritma : Setiap elemen array dibandingkan dengan nilai/data yg dicari mulai dari elemen pertama Aksi pembandingan dilakukan selama indeks array belum melebihi banyaknya elemen array (n) dan A[i] tidak sama dengan nilai/data yg dicari. Aksi pembandingan dihentikan, bila A[i] = nilai/data yang dicari atau i=n. Elemen terakhir A[i] diperiksa secara khusus. Keluaran yg dihasilkan adalah sebuah peubah boolean bernilai true jika data ditemukan, atau false jika data tidak ditemukan.

Algoritma versi 1: hasil pencarian  sebuah variabel boolean Fungsi : Function cariberuntun(input A:Larikint, input n:integer, input x :integer)  boolean Deklarasi: I : integer Algoritma: I  1 While(i<n) and (A[i] ≠ x) do I  I +1 Endwhile If A[i] = x then return true {x ditemukan} Else return false {x tidak ada dalam larik A} endif Prosedur : Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output ketemu:boolean) Deklarasi : I : integer Algoritma : I  1 While(i<n) and (A[i] ≠ x) do I  I +1 Endwhile If A[i] = x then ketemu  true {x ditemukan} Else ketemu  false {x tidak ada dalam larik A} endif dada

Algoritma lengkap u/ panggil prosedur : versi 1 Deklarasi : I : integer Algoritma : I  1 While(i<n) and (A[i] ≠ x) do I  I +1 Endwhile If A[i] = x then ketemu  true {x ditemukan} Else ketemu  false {x tidak ada dalam larik A} Endif ALGORITMA : read(n) bacaLarik(A,, n) read (x) cariberuntun(A, n, x, found) if found = true then write(x, ‘ ditemukan’) else write(x, ‘ tidak ditemukan’) endif Program Pencarian Deklarasi: const Nmaks = 100 type LarikInt : array[1..Nmaks] of integer A: LarikInt x:integer found : boolean n : integer Procedure bacalarik(output A:LarikInt, input n:integer) Deklarasi : I : integer Algoritma: for I  1 to n do read(A[i]) endfor Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output ketemu:boolean)

Versi 1: Aksi pembandingan dilakukan sebagai kondisi pengulangan : Hasil pencarian yg diinginkan: indeks elemen array (larik) yang mengandung nilai/data yang dicari. Algoritma : Setiap elemen array dibandingkan dengan nilai/data yg dicari mulai dari elemen pertama Aksi pembandingan dilakukan selama indeks array belum melebihi banyaknya elemen array (n) dan A[i] tidak sama dengan nilai/data yg dicari. Aksi pembandingan dihentikan, bila A[i] = nilai/data yang dicari atau i=n. Elemen terakhir A[i] diperiksa secara khusus. Keluaran yg dihasilkan adalah sebuah peubah index (misal: idx) yang berisi indeks larik tempat data/nilai yang dicari ditemukan. jika data data tidak ditemukan, idx diisi dengan nilai -1.

Algoritma versi 1: hasil pencarian sebuah Indeks elemen array Fungsi : Function cariberuntun(input A:Larikint, input n:integer, input x :integer)  integer Deklarasi: I : integer Algoritma: I  1 While(i<n) and (A[i] ≠ x) do I  I +1 Endwhile If A[i] = x then return i {x ditemukan} Else return -1 {x tidak ada dalam larik A} endif Prosedur : Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output idx: integer) Deklarasi : I : integer Algoritma : I  1 While(i<n) and (A[i] ≠ x) do I  I +1 Endwhile If A[i] = x then idx  i {x ditemukan} Else idx  -1 {x tidak ada dalam larik A} endif dada

Contoh Kasus : versi 1 menambah (append) nilai/data ke dalam larik (array) Tentukan atau lakukan pencarian apakah data/nilai tersebut sudah ada dalam array. Jika belum ada, maka nilai/data tersebut ditambahkan pada elemen ke n+1. Penambahan satu elemen baru tidak melampaui ukuran maksimal larik(array) (Nmaks). Setelah penambahan elemen baru, ukuran larik(array) efektif menjadi n+1.

Algoritma : penambah (append) nilai/data ke dalam larik (array) Program Tambahelemenlarik Deklarasi: const Nmaks = 100 type LarikInt : array[1..Nmaks] of integer L: LarikInt x, idx, n :integer Procedure bacalarik(output A:LarikInt, input n:integer) Deklarasi : I : integer Algoritma: for I  1 to n do read(A[i]) endfor Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output idx:integer)

Algoritma : I  1 While(i<n) and (A[i] ≠ x) do I  I +1 Endwhile If A[i] = x then idx  i {x ditemukan} Else idx  -1 {x tidak ada dalam larik A} Endif ALGORITMA : read(n) bacaLarik(A,, n) read (x) cariberuntun(A, n, x, idx) if idx ≠ -1 then write(x, ‘ sudah terdapat di dalam larik’) else n  n + 1 { naikkan ukuran larik } A[n]  x { tambahkan nilai x} endif

Versi 2 : Aksi pembandingan dilakukan di dalam badan pengulangan : (bukan di awal pengulangan) Hasil pencarian yg diinginkan: sebuah peubah boolean yg bernilai true bila nilai ditemukan atau bernilai false bila data/nilai tidak ditemukan Algoritma : Diperlukan sebuah peubah boolean untuk menyatakan apakah nilai sudah ditemukan. Peubah boolean (misal. Ketemu) diinisialisasi dg nilai false. Setiap elemen array dibandingkan dengan nilai/data yg dicari mulai dari elemen pertama Jika A[i] = nilai/data yang dicari, peubah Ketemu diisi dengan nilai true, pengulangan dihentikan. Sebaliknya, jika A[i] ≠ nilai yg dicari, pembandingan dilanjutkan untuk elemen berikutnya. Keluaran yg dihasilkan adalah nilai yg disimpan di peubah(variabel) ketemu.

Algoritma versi 2: hasil pencarian  sebuah variabel boolean Fungsi : Function cariberuntun(input A:Larikint, input n:integer, input x :integer)  boolean Deklarasi: I : integer Algoritma: Ketemu  false I  1 While(I ≤ n) and (not ketemu) do if A[i] = x then ketemu  true {x ditemukan} else I  I +1 endif Endwhile { I > n or ketemu } return ketemu Prosedur : Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output ketemu:boolean) Deklarasi : I : integer Algoritma : Ketemu  false I  1 While(I ≤ n) and (not ketemu) do if A[i] = x then ketemu  true {x ditemukan} else I  I +1 endif Endwhile { I > n or ketemu } dada

Algoritma versi 2: hasil pencarian  sebuah indeks elemen larik Prosedur : Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output idx: integer) Deklarasi : I : integer ketemu : boolean Algoritma : Ketemu  false I  1 While(I ≤ n) and (not ketemu) do if A[i] = x then ketemu  true {x ditemukan} else I  I +1 endif Endwhile { I > n or ketemu } if ketemu  true then idx  1 else idx  -1 endif dada

Algoritma versi 2: hasil pencarian  sebuah indeks elemen larik Fungsi : Function cariberuntun(input A:Larikint, input n:integer, input x :integer)  integer Deklarasi: I : integer ketemu : boolean Algoritma: Ketemu  false I  1 While(I ≤ n) and (not ketemu) do if A[i] = x then ketemu  true {x ditemukan} else I  i +1 endif Endwhile { I > n or ketemu } if ketemu  true then return 1 else return -1 endif dada

Kinerja Algoritma Pencarian Beruntun (Sequential search) Data yg belum terurut : Secara umum pencarian Lambat Waktu pencarian sebanding dengan jumlah elemen larik Data yg sudah terurut : Dapat meningkatkan kinerja pencarian Karena dapat segera menyimpulkan bahwa data yg dicari tidak terdapat di dalam larik bila ditemukan elemen larik yg lebih besar dari data yg dicari

Pencarian beruntun – data yg terurut

Metode pencarian bagidua (binary search) Algoritma pencarian pada data terurut yang paling efisien (data harus sudah terurut) Digunakan untuk kebutuhan pencarian dg waktu yang cepat (tidak membaca dari awal sampai akhir) Mencari data dg cara membagi larik menjadi dua Dalam proses pencarian diperlukan dua buah indeks larik, yaitu indeks terkecil (indeks ujung kiri larik) dan indeks terbesar (indeks ujung kanan larik).

Langkah-langkah pencarian bagidua Misal indeks kiri = I, indeks kanan j : Bagi dua elemen larik pada elemen tengah. Elemen tengah adalah indeks k = ( I + j ) div 2 Elemen tengah A[k] membagi larik menjadi dua bagian : bagian kiri A[i..k-1] dan bagian kanan A[k+1..j] Periksa apakah A[k] = x(data yg dicari), Jika ya pencarian selesai (x sudah ditemukan) Jika A[k] ≠ x, harus ditentukan apakah pencarian sebelah kiri atau kanan Jika A[k] < x, maka pencarian dilakukan pada larik sebelah kanan Jika A[k] > x, maka pencarian dilakukan pada larik sebelah kiri. Ulangi langkah 1

Ilustrasi pencarian bagidua : Misal data yang dicari adalah 22 :

Algoritma pencarian bagidua :

Kinerja pencarian bagidua : Untuk kasus terburuk: x tidak diketemukan, atau x ditemukan setelah ukuran larik tinggal 1 elemen). ,misal banyaknya elemen larik=256, maka menghasilkan pembagian larik sebanyak 8 kali, sedang dengan pencarian beruntun melakukan pembandingan sebanyak 256 kali. Untuk larik yang terurut, algoritma pencarian bagi dua (binary search) jauh lebih cepat daripada algoritma pencarian beruntun (sequential search).

Algoritma pencarian beruntun atau pencarian bagidua? Sequential Search Dapat digunakan baik untuk data yg belum terurut maupun data terurut Kinerja lebih lambat Binary Search Hanya dapat digunakan untuk data yg terurut saja. Kinerja lebih cepat