Makalah Squential Search

14
SISTEM BERKAS RANGKUMAN TENTANG SQUENTIAL SEARCH DAN BINARY SEARCHING NAMA : Indra Ayusma NIM : 120103141 KELAS : TI-B2 STMIK DUTA BANGSA SURAKARTA TAHUN AJAR 2012/2013

description

sequential

Transcript of Makalah Squential Search

Page 1: Makalah Squential Search

SISTEM BERKAS

RANGKUMAN TENTANG SQUENTIAL SEARCH DAN BINARY SEARCHING

NAMA : Indra Ayusma

NIM : 120103141

KELAS : TI-B2

STMIK DUTA BANGSA

SURAKARTA

TAHUN AJAR 2012/2013

SEQUENTIAL AND BINARY SEARCHING

Page 2: Makalah Squential Search

Konsep dan Istilah

Internal Search : algoritma pencarian yang dilakukan dalam main memory komputer

External Search : algoritma pencarian yang melibatkan external media menambah main memory

Key : sebuah subset dari isi sebuah data yang digunakan untuk perbandingan selama proses pencarian

Big-O Notation : notasi yang digunakan untuk mengindikasikan kenaikan (Order of growth) unjuk kerja dari sebuah algoritma searching

Sequential Search

Sequential Search adalah teknik pencarian data dimana data dicari secara urut dari depan ke belakang atau dari awal sampai akhir. berdasarkan key yang di cari Kelebihan dari proses pencarian secara sequential ini

- jika data yang dicari terletak didepan, maka data akan ditemukan dengan cepat.

Tetapi dibalik kelebihannya ini, teknik ini juga memiliki kekurangan.

- jika data yang dicari terletak dibelakang atau paling akhir, maka akan membutuhkan waktu yang lama dalam proses pencariannya.

- beban komputer akan semakin bertambah jika jumlah data dalam array sangat banyak.

Proses:

1. Mulai dari awal(atau dari akhir) cek seluruh record dalam array atau list, baca satu persaru2. Temukan record sesuai dengan key yang dicari.3. Proses Searching berhenti karena salah satu alasan.4. Success – Found the target key5. End of List – No more records to compare

Diaplikasikan pada Array (sorted &unsorted) atau Linked List

Sequential Search Analysis

Page 3: Makalah Squential Search

Bagaimana worst case dan average case untuk metode sequential search?

- Kita harus mendefinisikan O-notation untuk nilai dari operasi yang dibutuhkan dalam pencarian

- Jumlah operasi pencarian bergantung pada nilai n, yaitu jumlah elemen dalam list.

Worst Case Time for Sequential Search:

Untuk sebuah array dengan elemen, makaworst case time untuk sequential search requires n array accesses: O

Kondisi yang mengharuskan pengecekanterhadap semua elemen array (record) adalah:

- Record yang dicari berada pada posisiterakhir dari array.- Setelah pengecekan seluruh elemen array,ternyata record yang dicari tidak berhasilditemukan

dalam array tersebut

Algoritma Sequential Search

1. i ← 02. ketemu ←false3. Selama (tidak ketemu) dan (i < N) kerjakan baris 44. Jika (Data[i] = key) maka5. ketemu ←true6. jika tidak7. i ←i+18. Jika (ketemu) maka9. i adalah indeks dari data yang dicari10. jika tidak11. data tidak ditemukan

Implementasi sequential searching on java code

Page 4: Makalah Squential Search

[1].<br />public class sequential_search {<br /> public static void main(String[ ]args) throws Exception {<br /> int a[ ] = new int[4];<br /> int x,i,posisi;<br /> boolean ada;<br /> a[0] = 2;<br /> a[1] = 62;<br /> a[2] = 32;<br /> a[3] = 42;<br /> ada = false;<br /> posisi = 0;<br /> x = 32;<br /><br /> for (i=0; i&lt;=3; i++){<br /> if (a[i] == x) {<br /> ada = true;<br /> if (ada== true){<br /> System.out.print(" ketemu posisi " + (i+1));<br /> }<br /> else{System.out.print(" tidak ada ");<br /> }<br /> }<br /> }<br /> }<br />}<br /><br />

Binary Search

- Define working range as entire list- Repeat till done- Select the middle record- Compare the target key value with the keyof the selected “record”- Comparison results:- Key < middle record : Range = First half- Key > middle record : Range = Last half- Key = middle record: Success, Done- Applies only to Sorted Array List

Algoritma Binary Search

- L ← 0- R ← N–1- ketemu ←false- Selama (L <= R) dan (tidak ketemu) kerjakan baris 5sampai dengan 8- m ← (L+R) /2- Jika (Data[m] = key) maka ketemu ←true- Jika (key < Data[m]) maka R ←m–1- Jika (key > Data[m]) maka L ←m+1- Jika (ketemu) maka- m adalah indeks dari data yang dicari- jika tidak- data tidak ditemukan

Contoh implementasi search :

//ListsCompared.java

//compare times to do searches, iterations and random accesses in ArrayList and LinkedList

//generate random ints, add to an arraylist and to a linkedlist,

//do iterations, do random accesses, do random searches,

//then sort and do random binary searches, comparing times.

Page 5: Makalah Squential Search

import java.util.*;

import javax.swing.*;

class ListsCompared {

public static void main(String[] args) {

String input;

int size;

int range;

int randInt;

int numberAccesses, randIndex;

int numberSearches, hits, misses;

long timeStart, timeEnd;

double elapsedSeconds;

ArrayList myArrayList = new ArrayList();

LinkedList myLinkedList = new LinkedList();

input = JOptionPane.showInputDialog( "Enter number of random ints to generate" );

size = Integer.parseInt( input );

input = JOptionPane.showInputDialog( "Enter upper range of the random ints" );

range = Integer.parseInt( input );

for (int i=1; i<=size; i++) {

randInt = (int)(Math.random()*range);

myArrayList.add(new Integer(randInt));

myLinkedList.add(new Integer(randInt));

}

//****************************************************

//** iteration tests

Iterator it = myArrayList.iterator();

timeStart = System.currentTimeMillis();

while (it.hasNext())

Page 6: Makalah Squential Search

it.next(); //don't actually do anything with each item

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("ArrayList iteration ("+size+" items)");

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per item: " + (elapsedSeconds/size) + "s");

it = myLinkedList.iterator();

timeStart = System.currentTimeMillis();

while (it.hasNext())

it.next();

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("LinkedList iteration ("+size+" items)");

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per item: " + (elapsedSeconds/size) + "s");

System.out.println();

//****************************************************

//** random access tests

input = JOptionPane.showInputDialog( "Enter number of random accesses to do in the list" );

numberAccesses = Integer.parseInt( input );

//*** ArrayList

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberAccesses; i++) {

randIndex = (int)(Math.random()*size); //random index

myArrayList.get(randIndex);

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

Page 7: Makalah Squential Search

System.out.println("ArrayList ("+size+" items) random "+numberAccesses+ " gets");

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberAccesses) + "s");

//*** LinkedList

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberAccesses; i++) {

randIndex = (int)(Math.random()*size); //random index

myLinkedList.get(randIndex);

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("LinkedList ("+size+" items) random "+numberAccesses+ " gets");

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberAccesses) + "s");

System.out.println();

//****************************************************

//** unsorted sequential search tests

input = JOptionPane.showInputDialog( "Enter number of random sequential searches to do in the unsorted list" );

numberSearches = Integer.parseInt( input );

//***sequential search ArrayList

hits = misses = 0;

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberSearches; i++) {

randInt = (int)(Math.random()*range);

if (myArrayList.contains(new Integer(randInt)))

hits++;

else

misses++;

Page 8: Makalah Squential Search

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("ArrayList ("+size+" items) unsorted sequential search: hits: "+hits+" misses: "+misses);

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberSearches) + "s");

//***sequential search LinkedList

hits = misses = 0;

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberSearches; i++) {

randInt = (int)(Math.random()*range);

if (myArrayList.contains(new Integer(randInt)))

hits++;

else

misses++;

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("LinkedList ("+size+" items) unsorted sequential search hits: "+hits+" misses: "+misses);

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberSearches) + "s");

System.out.println();

//****************************************************

//** sorted sequential search tests

//sort the data

Collections.sort(myArrayList);

Collections.sort(myLinkedList);

Page 9: Makalah Squential Search

//***sequential search ArrayList

hits = misses = 0;

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberSearches; i++) {

randInt = (int)(Math.random()*range);

if (myArrayList.contains(new Integer(randInt)))

hits++;

else

misses++;

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("ArrayList ("+size+" items) sorted sequential search: hits: "+hits+" misses: "+misses);

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberSearches) + "s");

//***sequential search LinkedList

hits = misses = 0;

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberSearches; i++) {

randInt = (int)(Math.random()*range);

if (myArrayList.contains(new Integer(randInt)))

hits++;

else

misses++;

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

Page 10: Makalah Squential Search

System.out.println("LinkedList ("+size+" items) sorted sequential search hits: "+hits+" misses: "+misses);

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberSearches) + "s");

System.out.println();

//**************************************************

//** binary search tests

input = JOptionPane.showInputDialog( "Enter number of random binary searches to do in the sorted list" );

numberSearches = Integer.parseInt( input );

//***binary search ArrayList

hits = misses = 0;

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberSearches; i++) {

randInt = (int)(Math.random()*range);

if (Collections.binarySearch(myArrayList,(new Integer(randInt))) >= 0) //***

hits++;

else

misses++;

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("ArrayList ("+size+" items) binary search hits: "+hits+" misses: "+misses);

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberSearches) + "s");

//***binary search LinkedList

hits = misses = 0;

timeStart = System.currentTimeMillis();

for (int i=1; i<=numberSearches; i++) {

Page 11: Makalah Squential Search

randInt = (int)(Math.random()*range);

if (Collections.binarySearch(myArrayList,(new Integer(randInt))) >= 0) //***

hits++;

else

misses++;

}

timeEnd = System.currentTimeMillis();

elapsedSeconds = (timeEnd-timeStart)/1000.0;

System.out.println("LinkedList ("+size+" items) binary search hits: "+hits+" misses: "+misses);

System.out.println(" Elapsed time: " + elapsedSeconds + "s" +

" Time per search: " + (elapsedSeconds/numberSearches) + "s");

System.out.println();

}

}

/*

range same as size

For each of ArrayList and LinkedList:

iteration:

#items total time time per item

---------- ---------- -------------

10,000

100,000

1,000,000

random access:

#items #accesses total time time per item

---------- --------- ---------- -------------

10,000 1000

Page 12: Makalah Squential Search

10,000 10000

100,000 10000

100,000 100000

for both unsorted and sorted sequential search

#items #searches total time time per search

---------- --------- ---------- ---------------

10,000 1000

10,000 10000

100,000 1000

binary search

#items #searches total time time per search

---------- --------- ---------- ---------------

10,000 1000

10,000 10000

100,000 10000

100,000 100000

1,000,000 1000000

*/