Algoritma dan Pemrograman 2 PENCARIAN

dokumen-dokumen yang mirip
Algoritma dan Pemrograman 2 PENGURUTAN

Searching [pencarian] Algoritma Pemrograman

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

1 Pencarian. 1.1 Tinjauan Singkat Larik

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

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

BAB VI SEARCHING (PENCARIAN)

MODUL IV PENCARIAN DAN PENGURUTAN

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

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

Kompleksitas Algoritma

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

Kompleksitas Algoritma (1)

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

Algoritma dan Pemrograman Searching/Pencarian

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

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

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

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

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

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

ALGORITMA PENGURUTAN & PENCARIAN

Algoritma dan Pemrograman 2 PENGURUTAN

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

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

Pengurutan (Sorting) Algoritma Pemrograman

Kompleksitas Algoritma

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

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

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

CCH1A4 / Dasar Algoritma & Pemrogramanan

Algoritma Brute Force

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

SEARCHING. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 1

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

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

*** SELAMAT MENGERJAKAN

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

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

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

BAB VIII Pencarian(Searching)

Pencarian (Searching)

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

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

PENGAKSESAN BERKAS (FILE) DALAM C

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

A. TUJUAN PEMBELAJARAN

Array. Teknik Informatika Politeknik Negeri Batam

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

Array Dimensi Satu. Pendahuluan. Slamet Kurniawan, S.Kom

BAB VII ALGORITMA DIVIDE AND CONQUER

Algoritme dan Pemrograman

SORTING. Brigida Arie Minartiningtyas, M.Kom

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

BAB 3 SEARCHING A. TUJUAN

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-7 Pencarian (Searching) 2

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

Modul Praktikum Algoritma dan Struktur Data

LATIHAN UTS Tim Pengajar KU1071 Sem

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Penerapan Algoritma Sequential Search dalam Proses Pencarian Informasi pada Sistem Pembelajaran Organ Jantung Manusia

BAB V SORTING (PENGURUTAN) INTERNAL

PENGULANGAN. pencacah harus bertipe integer atau karakter pernyataan adalah satu atau lebih instruksi yang. Pernyataan

BAB II TINJAUAN PUSTAKA

STRATEGI DIVIDE AND CONQUER

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-6 Pencarian (Searching) 1

LAPORAN PRAKTIKUM SEMENTARA PENGANTAR PEMROGAMAN BAHASA C++

Kompleksitas Algoritma

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

Modul 15 Searching. 1.1 Kompetensi

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

DASAR PEMROGRAMAN. Institut Teknologi Sumatera

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

PENGANTAR KOMPUTER & SOFTWARE II. Array (Part II) Tim Pengajar KU Institut Teknologi Sumatera

Sequential Search (Linear Search)

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

Larik/ Array int a1, a2, a3, a4, a5;

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

ALGORITMA & PEMROGRAMAN

BAB VII PENCARIAN DATA (SEARCHING)

Algoritma Brute Force

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String

Struktur Data Array. Rijal Fadilah S.Si

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.

ARRAY / LARIK. Oleh : Agus Priyanto, M.Kom SEKOLAH TINGGI TEKNOLOGI TELEMATIKA TELKOM. Smart, Trustworthy, And Teamwork

Modul Praktikum Algoritma dan Struktur Data

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

BAB XI ARRAY (LARIK)

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

Ahmad Kamsyakawuni, S.Si, M.Kom. Jurusan Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Jember

Kompleksitas Algoritma

Algoritma Pemrograman

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK AMIKOM YOGYAKARTA

Analisis Algoritm. Fundamentals of the Anlysis of Algorithm Efficiency

BAB XI Manipulasi Binary Tree

ALGORITMA PERULANGAN

LAPORAN AKHIR PRAKTIKUM STRUKTUR DATA

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Adam Mukharil Bachtiar English Class Informatics Engineering Algorithms and Programming Searching

LOOPING. Brigida Arie Minartiningtyas, M.Kom

Transkripsi:

Algoritma dan Pemrograman 2 PENCARIAN Pencarian (searching) merupakan proses yang fundamental dalam pengolahan data. Proses pencarian adalah menemukan nilai (data) tertentu didalam sekumpulan data yang bertipe sama. Data dapat disimpan secara temporer dalam memori utama atau disimpan secara permanen dalam memori sekunder. Dalam memori utama data disimpan dalam bentuk array(larik) sedangkan dalam memori sekunder dalam bentuk file(arsip). Pencarian elemen dalam larik disebut juga pencarian internal, sedangkan pencarian data yang disimpan dalam memori sekunder disebut juga pencarian eksternal. Persoalan Pencarian Diberikan sebuah larik L yang sudah terdefinisi elemen-elemennya, x adalah elemen yang bertipe sama dengan elemen larik L. Carilah x didalam larik L. Hasil dari proses pencarian dapat bermacam-macam : a) Pencarian hanya memeriksa keberadaan x. Keluaran yang diinginkan misalnya berupa pesan bahwa x ditemukan atau tidak ditemukan. contoh : write(x, ditemukan ) atau write(x, tidak ditemukan ) b) Hasil pencarian adalah indeks elemen larik. Jika x ditemukan maka indek elemen larik tempat x berada diisikan kedalam idx. Jika x tidak terdapat didalam larik L maka idx diisi dengan nilai khusus misalnya -1. contoh : D 35 15 60 70 25 10 12 0 1 2 3 4 5 6 Misalkan x=70, maka idx=3. Tetapi jika x=100, maka idx=-1

Algoritma dan Pemrograman 3 c) Hasil pencarian adalah sebuah nilai boolean yang menyatakan status hasil pencarian. Jika x ditemukan maka sebuah variabel bertipe boolean misalnya ketemu diisi dengan nilai true, jika sebaliknya maka ketemu diisi dengan false. I. Pencarian Beruntun (sequential search) Metode pencarian beruntun adalah proses membandingkan setiap elemen larik satu persatu secara beruntun, mulai dari elemen pertama sampai dengan elemen yang dicari ditemukan atau seluruh elemen sudah ditemukan. I. a. Versi 1 (Pembandingan elemen dilakukan diawal pengulangan) (1). Hasil pencarian : sebuah variabel boolean bernilai true bila x ditemukan atau false bila x tidak ditemukan. Sudah ada array 1D yang dideklarasikan dengan int L[11] dan sudah ada isinya dengan ilustrasi sebagai berikut : n 0 1 2 3 4 5 6 7 8 9 10 12 17 10 5 15 25 11 7 25 16 19 Misal elemen yang akan dicari adalah x. Setiap elemen larik L dibandingkan dengan x mulai dari elemen pertama L[0]. Aksi pembandingan dilakukan selama indek larik i belum melebihi n dan L[i] belum sama dengan n. Aksi pembandingan dihentikan jika L[i] = x atau i = n. Elemen terakhir L[n] diperiksa secara khusus.

Algoritma dan Pemrograman 4 procedure SeqSearch1(input L : LarikInt, input n : integer, input x : integer, output ketemu : boolean) DEKLARASI i : integer DESKRIPSI i 0 while (i < n) and (L[i] x) do i i + 1 endwhile if L[i] = x then ketemu true ketemu false #include<iostream.h> void SeqSearch1(int Data[], int n, int x, bool *ketemu); void main(void) int Data[]=23,56,10,90,35,45,9,100,200,65; int x,i,jmldat=10;bool ketemu; cout<<"elemen Array : "; for(i=0;i<jmldat;i++)cout<<data[i]<<" ";cout<<endl; cout<<"masukan data yang akan dicari?:";cin>>x; SeqSearch1(Data,jmlDat,x,&ketemu); if(ketemu!=false) cout<<"data yang dicari ditemukan"<<endl; cout<<"data yang dicari tidak ada dalam array"<<endl; void SeqSearch1(int Data[],int n,int x, bool *ketemu) int i=0; while(i<n-1 && Data[i]!=x)i++; if(data[i]==x)*ketemu=true; *ketemu=false; (2). Hasil Pencarian : indek elemen larik yang mengandung x Setiap elemen larik L dibandingkan dengan x mulai dari elemen pertama L[0]. Aksi pembandingan dilakukan selama indek larik i belum melebihi n dan L[i] belum sama dengan n. Aksi pembandingan dihentikan jika L[i] = x atau i = n. Elemen terakhir L[n] diperiksa secara khusus. Keluaran yang

Algoritma dan Pemrograman 5 dihasilkan oleh prosedur adalah variabel idx yang berisi indek larik tempat x ditemukan. Jika x tidak ditemukan, idx diisi dengan -1. procedure SeqSearch2(input L : LarikInt, input n : integer, input x : integer, output idx : integer) DEKLARASI i : integer DESKRIPSI i 0 while (i < n) and (L[i] x) do i i + 1 endwhile if L[i] = x then idx i idx -1 #include<iostream.h> void SeqSearch2(int Data[], int n, int x, int *idx); void main(void) int Data[]=23,56,10,90,35,45,9,100,200,65; int idx,x,i,jmldat=10; cout<<"elemen Array : "; for(i=0;i<jmldat;i++)cout<<data[i]<<" ";cout<<endl; cout<<"masukan data yang akan dicari?:";cin>>x; SeqSearch1(Data,jmlDat,x,&idx); if(idx!=-1) cout<<"data yang dicari berada pada indek "<<idx<<endl; cout<<"data yang dicari tidak ada dalam array"<<endl; void SeqSearch1(int Data[],int n,int x, int *idx) int i=0; while(i<n-1 && Data[i]!=x)i++; if(data[i]==x)*idx=i; *idx=-1;

Algoritma dan Pemrograman 6 I. b. Versi 2 (Pembandingan elemen dilakukan didalam pengulangan) (1). Hasil pencarian : sebuah variabel boolean bernilai true bila x ditemukan atau false bila x tidak ditemukan. procedure SeqSearch3(input L : LarikInt, input n : integer, input x : integer, output ketemu : boolean) DEKLARASI i : integer DESKRIPSI i 0 ketemu false while (i <= n) and (not ketemu) do if L[i] = x then ketemu true i i + 1 endwhile #include<iostream.h> void SeqSearch3(int Data[], int n, int x, bool *ketemu); void main(void) int Data[]=23,56,10,90,35,45,9,100,200,65; int x,i,jmldat=10;bool ketemu; cout<<"elemen Array : "; for(i=0;i<jmldat;i++)cout<<data[i]<<" ";cout<<endl; cout<<"masukan data yang akan dicari?:";cin>>x; SeqSearch3(Data,jmlDat,x,&ketemu); if(ketemu==true) cout<<"data yang dicari ditemukan"<<endl; cout<<"data yang dicari tidak ada dalam array"<<endl; void SeqSearch3(int Data[],int n,int x, bool *ketemu) int i=0;*ketemu=false; while(i<n &&!(*ketemu)) if(data[i]==x) *ketemu=true; i++;

Algoritma dan Pemrograman 7 Pada versi ini variabel boolean ketemu diinisialisasi dengan nilai false. Setiap elemen L dibandingkan dengan x mulai dari elemen pertama. Jika L[i] sama dengan x, variabel ketemu diisi nilai true dan pengulangan dihentikan. Jika L[i] tidak sama dengan x, pembandingan dilanjutkan untuk elemen berikutnya. Setiap elemen diperiksa termasuk elemen terakhir. (2). Hasil Pencarian : indek elemen larik yang mengandung x procedure SeqSearch4(input L : LarikInt, input n : integer, input x : integer, output idx : integer) DEKLARASI i : integer ketemu : boolean DESKRIPSI i 0 ketemu false while (i <= n) and (not ketemu) do if L[i] = x then ketemu true i i + 1 endwhile if ketemu then idx i idx -1 #include<iostream.h> void SeqSearch4(int Data[], int n, int x, int *idx); void main(void) int Data[]=23,56,10,90,35,45,9,100,200,65; int idx,x,i,jmldat=10; cout<<"elemen Array : "; for(i=0;i<jmldat;i++)cout<<data[i]<<" ";cout<<endl; cout<<"masukan data yang akan dicari?:";cin>>x; SeqSearch4(Data,jmlDat,x,&idx); if(idx!=-1) cout<<"data yang dicari berada pada indek "<<idx<<endl; cout<<"data yang dicari tidak ada dalam array"<<endl; void SeqSearch4(int Data[],int n,int x, int *idx) int i=0;bool ketemu=false; while(i<n &&!ketemu) if(data[i]==x)ketemu=true;

Algoritma dan Pemrograman 8 i++; if(ketemu) *idx=i; *idx=-1; II. Kinerja Metode Pencarian Beruntun Metode Pencarian Beruntun berjalan lambat. Waktu pencarian sebanding dengan jumlah elemen larik. Misal larik berukuran n elemen maka pada kasus dimana x tidak terdapat dalam larik atau x ditemukan pada elemen terakhir, maka harus dilakukan perbandingan sebanyak n kali. Jadi waktu pencarian dengan metode pencarian beruntun sebanding dengan n. III. Metode Pencarian Beruntun pada larik terurut Larik yang jumlah elemen-elemennya terurut dapat meningkatkan kinerja algoritma pencarian beruntun. Contoh : (a). Diberikan larik L tidak terurut : 13 16 14 21 76 15 untuk mencari 15, dibutuhkan perbandingan sebanyak 6 kali. (b). Misalkan larik L diatas sudah diurut naik : 13 14 15 16 21 76 untuk mencari 15, dibutuhkan perbandingan hanya 3 kali Prosedur berikut adalah algoritma pencarian beruntun pada larik yang terurut menaik, yang merupakan modifikasi dari algoritma sebelumnya dengan merubah L[i] x menjadi L[i] x.

Algoritma dan Pemrograman 9 procedure SeqSearch(input L : LarikInt, input n : integer, input n : integer, output idx : integer) DEKLARASI i : integer DESKRIPSI i 0 while(i < n) and (L[i] < x) do i i + 1 endwhile if L[i] = x then idx i idx -1 #include<iostream.h> void SeqSearch(int Data[], int n, int x, int *idx); void main(void) int Data[]=23,26,30,50,55,65,69,78,80,90; int idx,x,i,jmldat=10; cout<<"elemen Array : "; for(i=0;i<jmldat;i++)cout<<data[i]<<" ";cout<<endl; cout<<"masukan data yang akan dicari?:";cin>>x; SeqSearch(Data,jmlDat,x,&idx); if(idx!=-1) cout<<"data yang dicari berada pada indek "<<idx<<endl; cout<<"data yang dicari tidak ada dalam array"<<endl; void SeqSearch(int Data[],int n,int x, int *idx) int i=0; while(i<n-1 && Data[i]<x)i++; if(data[i]==x) *idx=i; *idx=-1; IV. Metode Pencarian Bagidua/Biner (Binary Search) Metode pencarian bagidua lebih efisien dibandingkan metode pencarian beruntun. Metode ini memerlukan data yang sudah terurut. Dalam proses pencarian diperlukan dua buah indeks array, yaitu indeks terkecil (indeks kiri) dan indeks terbesar (indeks kanan).

Algoritma dan Pemrograman 10 Misalkan indeks kiri adalah i dan indeks kanan adalah j. Data sudah terurut menurun. Pada mulanya indek kiri i diinisialisasi dengan 1 dan dan j diinisialisasi dengan n. 81 76 21 18 16 13 10 7 i = 0 1 2 3 4 5 6 7 = j Langkah-langkah dalam metode ini adalah: Langkah 1: Bagi dua elemen larik pada elemen tengah. Elemen tengah adalah elemen dengan indeks k = (i + j) div 2 Langkah 2: Periksa apakah L[k] = x? Jika L[k] = x, pencarian selesai Jika L[k] < x, pencarian dilakukan pada larik bagian kiri, j = k-1 Jika L[k] > x, pencarian dilakukan pada larik bagian kanan, i = k + 1 Langkah 3 : Ulangi langkah 1 hingga x ditemukan atau i > j (yaitu ukuran array sudah 0) Contoh 1: misal elemen yang dicari x = 18 Langkah 1: i = 0, j = 7 k = (0 + 7) div 2 = 3 81 76 21 18 16 13 10 7 0 1 2 3 4 5 6 7 kiri kanan Langkah 2 : Bandingkan L[3] = x?, ya (x ditemukan, proses pencarian selesai)

Algoritma dan Pemrograman 11 Contoh 2: Misal elemen yang dicari x = 16 Langkah 1: i = 0 dan j = 7 k = (0 + 7) div 2 = 3 81 76 21 18 16 13 10 7 0 1 2 3 4 5 6 7 kiri kanan Langkah 1 : i = 4, j = 7 k = (4 + 7) div 2 = 5 16 13 10 7 4 5 6 7 kiri kanan Langkah 1 : i = 4, j = 4, k = (4 +4) div 2 = 4 16 4 Langkah 2: L[k] = x?, tidak L[k] < x?, tidak L[k] > x?, ya, berarti pencarian dilakukan pada array kanan dengan indeks i = k +1 16 13 10 7 i = 4 5 6 7 = j Langkah 2 : L[k] = x?, tidak L[k] < x?, tidak L[k] > x?, ya, maka pencarian dilakukan pada array bagian kiri j = k -1 = 5-1 = 4 16 4 Langkah 2 : L[k] = x?, ya ( x ditemukan, pencarian dihentikan) Jadi nilai 16 berada pada index k, yaitu L[4]

Algoritma dan Pemrograman 12 procedure BinarySearch(input L : LarikInt, input n : integer, input x : integer, output idx : integer) DEKLARASI i,j,k : integer ketemu : boolean DESKRIPSI i 0 j n ketemu false while (not ketemu) and (i n) do k (i + j) div 2 if (L[k] = x ) then ketemu true if (L[k] x) then i k + 1 j k - 1 endwhile if ketemu then idx k idx -1 #include<iostream.h> #define jmldat 8 void BinSearch(int Data[], int n, int x, int *idx); void main(void) int Data[jmlDat]=81,76,21,18,16,13,10,7,x,idx,i; cout<<"elemen Array : "; for(i=0;i<jmldat;i++)cout<<data[i]<<" ";cout<<endl; cout<<"masukan data yang akan dicari?:";cin>>x; BinSearch(Data,jmlDat,x,&idx); if(idx!=-1)cout<<"data yang dicari berada pada indeks : "<<idx<<endl; cout<<"data yang dicari tidak ada dalam array"<<endl; void BinSearch(int Data[],int n,int x, int *idx) bool ketemu = false; int top = n-1,bottom = 0,mid; while(bottom<=top &&!ketemu) mid=(top+bottom)/2; if(data[mid]==x)ketemu=true; if(data[mid]<x)top=mid-1; bottom=mid+1; if(ketemu) *idx=mid; *idx=-1;

Algoritma dan Pemrograman 13 Tugas : 1. Tulislah algoritma dan program C++ untuk pencarian sequensial versi 1. Pencarian dilakukan dalam sebuah fungsi yang mengembalikan indek array tempat data yang dicari berada. 2. Tulislah algoritma dan program C++ untuk pencarian sequensial versi 2. Pencarian dilakukan dalam sebuah fungsi yang mengembalikan indek array tempat data yang dicari berada. 3. Tulislah algoritma dan program C++ untuk pencarian sequensial dengan data yang sudah terurut menurun. 4. Tulislah algoritma dan program C++ untuk pencarian metode bagidua dengan array terurut naik.