Abstrak Pencarian jarak terpendek merupakan suatu permasalahan yang sering timbul pada pengguna
transportasi,
karena
pengguna
transportasi
dalam
melakukan
perjalanan
membutuhkan solusi bagaimana rute yang akan dilalui adalah rute atau jarak yang paling minimum (terkecil). Sehingga efisiensi waktu dapat terpenuhi. Program pencarian jarak terpendek yang dibuat, didasarkan pada dua metode yaitu metode Breadth First Search dan Hill Climbing Search. Metode Breadth First Search merupakan metode yang menguji semua keadaan dalam pohon pelacakan dalam waktu yang sama. Dari kiri ke kanan dari atas ke bawah satu tingkat pada waktu yang sama. Mulai dari keadaan awal, Breadth First Search memperhatikan semua keadaan pada tiap tingkat sebelum meneruskan ke tingkat lebih bawah berikutnya. Metode Hill Climbing Search adalah suatu metode untuk mencari dan menentukan rute yang paling singkat dengan memperkecil jumlah kota atau tempat yang disinggahi dengan menggunakan cara mencari tempat terjauh yang mendekati dengan tujuan. Program dirancang untuk mensimulasikan jarak antar kota yang digambarkan sebagai sebagai graph kemudian dihasilkan rute yang terpilih dengan jarak minimum.
1
Bab I Breadth First Search (BFS) I.1 Pengertian Breadth First Search
Breadth-first search adalah algoritma yang melakukan pencarian secara melebar yang mengunjungi simpul secara preorder yaitu mengunjungi suatu simpul kemudian mengunjungi semua simpul yang bertetangga dengan simpul tersebut terlebih dahulu. Selanjutnya, simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul yang tadi dikunjungi, demikian seterusnya. Jika graf berbentuk pohon berakar, maka semua simpul pada aras d dikunjungi lebih dahulu sebelum simpul-simpul pad aras d+1. Algoritma ini memerluka-n sebuah antrian q untuk menyimpan simpul yang telah dikunjungi. Simpul-simpul ini diperlukan sebagai acuan untuk mengunjungi simpul-simpul yang bertetanggaan dengannya. Tiap simpul yang telah dikunjungi masuk ke dalam antrian hanya satu kali. Algoritma ini juga membutuhkan table Boolean untuk menyimpan simpul yang te lah dikunjungi sehingga tidak ada simpul yang dikunjungi lebih dari satu kali. Pohon BFS yang dimulai dengan simpul akar akan maju satu demi satu level. Graf tak berbobot adalah graf yang semua sisinya sama, sehingga jalur terpendek hanya ditentukan dari jumlah simpul yang dilalui.
Gambar 1 Graf
Pada contoh graf di atas, misalnya jika kita mulai dari simpul 1 maka urutan simpul yang dikunjungi adalah 1,2,5,7,3,4,6. Algoritma BFS lebih jelasnya sebagai berikut: Kunjungi simpul asal, kemudian kunjungi simpul yang bertetangga dengan simpul asal. Kemudian kunjungi simpul-simpul yang bertetangga dengan simpul yang tadi dikunjungi dan seterusnya. traversal dari algoritma ini tak bersifat unik. Karena traversal inilah, algoritma ini dapat digunakan sebagai algoritma pencarian jalur terpendek. Jika dibuat pohon dengan 1 sebagai akarnya adalah sebagai berikut: 2
2. Aplikasi algoritma bfs dalam masalah mencari jalur terpendek Agar lebih mudah dalam memahami algoritma ini, kita nyatakan dalam matriks karena graf bias direpresentasikan dalam matriks dan lebih mudah dalam penentuan posisi dan ketetanggaan dalam realisasi algoritma. Diberikan sebuah matriks ukuran n x m: 1234567 10000000 20201100 30001000 40000000 50001030 60001000 70000000 80000000
m adalah banyaknya kolom pada matriks. n adalah banyaknya baris pada matriks. (x,y) menyatakan koordinat pada matriks. Misalkan m=7 dan n=8. Status 0 menggambarkan bahwa jalan tersebut dapat dilalui, status 0 menggambarkan jalan tersebut tak dapat dilalui, status 2 menggambarkan sel awal, dan status 3 menggambarkan sel yang harus dituju. Kita ingin mencari jalan terpendek dari (2,2) ke (6,5) tetapi tidak boleh mengambil jalur diagonal. Hal ini mirip dengan graf yang tak berarah di mana sel-sel yang dapat dikunjungi itu sebagai simpul dan jalur yang dapat dilalui sebagai sisi(yang semua nilainya sama). Sel mulamula juga dapat kita analogikan sebagai simpul awal dan sel tujuan dapat kita analogikan sebagai simpul tujuan. Jika kita ingin merepresentasikannya dalam graf, maka grafnya adalah sebagai berikut
3
Sketsa Penyelesaian (Informal)
Untuk menyelesaikan masalah jalur terpendek dengan menggunakan BFS dapat dilakukan langkah-langkah berikut: 1. Letakkan simpul awal pada antrian. 2. Ambil antrian pertama lalu periksa: a. Jika simpul awal sudah sama dengan simpul akhir, maka akhiri pencarian dan kembalikan solusi. b. Jika tidak, masukkan semua suksesor dari simpul tersebut pada akhir antrian, jika ada. 3. Jika antrian simpul kosong dan semua simpul sudah dicek, akhiri pencarian dan solusi tidak ditemukan. 4. Ulangi mulai langkah 2. I.2 Pseudo-Code
Inisialisasi Matriks Boolean yang diset false Inisialisasi Sebuah Antrian Kosong Buat Simpul Asal Masukkan Simpul Asal ke dalam Antrian Buat Simpul Tujuan Boolean ketemu=false int jarak = 1 While AntrianTidakKosong and not ketemu do Ambil simpul n dari antrian if n=simpul_tujuan then ketemu=true output(jarak) return solusi else increment (level) Bangkitkan suksesor n dari n for setiap suksesor n dari n 4
if(dikunjungi[posisi x dari n ][posisi y dari n ]=false) then Set parent dari n menjadi n Masukkan n ke dalam antrian endfor endwhile
I.3 Kode Program
Untuk dapat lebih mengerti realisasi algoritma ini, lebih baik jika kita melihat kode programnya secara langsung. Dalam makalah ini, kode program ditulis dalam bahasa java. Representasi dalam matriks. //Kelas Pencarian dengan BFS untuk masalah //di atas
public class BFS{ public static void main(String args[]){ //Inisialisasi Matriks
int n=7; int m=8; Grid Matriks[][]=new Grid[m+1][n+1]; for (int i=1;i
boolean Matbol[][]=new boolean[m+1][n+1]; for (int i=1;i
LinkedList Antrian=new LinkedList(); //Buat Simpul Asal
Simpul SimpulAsal=new Simpul(2,2); //Masukkan Simpul Asal ke dalam //Antrian
Antrian.addFirst(SimpulAsal); //Buat Simpul Tujuan
Simpul SimpulTujuan=new Simpul(6,5); boolean ketemu=false; int jarak=1; Simpul S; while(!(Antrian.size()=0) && (!ketemu)){ 5
S=Antrian.remove(); Matbol[S.getX()][S.getY()]=true; if((S.getX()==SimpulTujuan.getX( )) && (S.getY()==SimpulTujuan.getY())) { ketemu=true; System.out.println( Jarak = +jarak); //Solusi telah ditemukan
While(S!=SimpulAsal){ //tandai jalan Matriks[S.getX()] [S.getY()]. setStatus(5); S=S.getParent(); } } import java.util.*; //Kelas ini untuk pencarian
class Simpul{ private int x;// posisi x pada matriks private int y;// posisi y pada matriks private Simpul parent;//menyatakan parent //dari elemen //Konstruktor
public Simpul(int _x,int _y){ x=_x; y=_y; parent=null; } public Simpul(int _x,int _y, Simpul p){ x=_x; y=_y; parent = p; } //getter
public int getX(){return x;} public int getY(){return y;} public int getParent(){return parent;} //setter
public void setX(int _x){x=_x;} public void setY(int _y){Y=_y;} public void setParent(Simpul p) {parent=n;} } //Kelas ini untuk membuat sel pada matriks
class Grid{ private int x; //posisi x private int y; //posisi y private int status; //status pada grid //0. bisa dikunjungi 1. tak bisa //dikunjugi
//1. tak bisa //dikunjungi //Konstruktor public Grid(int _x,int _y){ x=_x; y=_y; } //Konstruktor
public Grid(int _x,int _y){ x=_x; y=_y; } //getter
public int getX(){return x;} 6
public int getY(){return y;} public int getStatus(){return status;} //setter
public void setX(int _x){x=_x;} public void setY(int _y){Y=_y;} public void setStatus(int s){status=s;} }
I.4 Algoritma: Pencarian Breadth-First
1. Buat variabel yang disebut node-DAFTAR dan set ke keadaan awal. 2. Loop sampai negara tujuan ditemukan atau node-DAFTAR kosong. a. Hapus elemen pertama, katakanlah E, dari node-DAFTAR. Jika node-DAFTAR kosong kemudian keluar. b. Untuk setiap cara yang masing-masing dapat sesuai dengan aturan negara dijelaskan dalam E lakukan: i)
Terapkan aturan untuk menghasilkan negara baru.
ii) Jika negara baru adalah negara tujuan, berhenti dan kembali negara ini. iii) Jika menambahkan keadaan ini sampai akhir node-DAFTAR I.5 Metode Pencarian
Salah satu contoh kakas pencarian yang menggunakan metode BFS adalah WebCrawler. WebCrawler adalah suatu kakas yang membuat indeks isi dari suatu dokumen
di Web yang selanjutnya akan dimanfaatkan oleh mesin pencari. Terdapat tiga langkah yang dilakukan oleh WebCrawler ini ketika mengunjungi dokumen, yaitu menandai bahwa suatu dokumen telah dikunjungi, mengenali link yang terdapat pada dokumen tersebut, kemudian isinya didaftarkan pada daftar indeks. Pada akhirnya, WebCrawler aakan menampilkan file yang paling banyak berkaitan dengan kata kunci. Contoh hasil pencarian dengan WebCrawler Kata kunci : "molecular biology human genome project" Hasil pencarian: 1000 Guide to Molecular Biology Databases 0754 Guide to Molecular Biology Databases 0562 Biology Links 0469 bionet newsgroups 0412 Motif BioInformatics Server 0405 LBL Catalog of Research Abstracts (1993) 0329 Molecular Biology Databases 0324 GenomeNet WWW server 7
0317 DOE White Paper on Bio-Informatics 0292 Molecular biology 0277 Oxford University Molecular Biology Data Centre Home Page 0262 Biology Internet Connections 0244 Harvard Biological Laboratories - Genome Research 0223 About the GenomeNet 0207 Biology Index Algoritma BFS yang diterapkan pada WebCrawler ini adalah mendaftarkan setiap link yang ada dan menyimpannya dalam data base kemudian mengunjunginya satu persatu sambil mencatat link yang berhubungan I.6 Keuntungan dan Kekurangan Pencarian Breadth-First Search
Pencarian Breadth pertama tidak akan pernah terjebak menjelajahi jalan selamanya tidak berguna. Jika ada solusi, BFS pasti akan menemukan itu. Jika ada lebih dari satu solusi maka BFS dapat menemukan satu jumlah minimal yang memerlukan sedikit langkah. Kelemahan utama dari pencarian Breadth pertama adalah kebutuhan memorinya. Karena setiap tingkat pohon harus disimpan dalam rangka untuk menghasilkan tingkat berikutnya, dan jumlah memori sebanding dengan jumlah node yang tersimpan, kompleksitas ruang BFS adalah O (b
d).
Akibatnya, BFS adalah sangat ruang-terikat dalam praktek sehingga
akan menguras memori yang tersedia pada komputer khas dalam hitungan menit. Jika solusi berada jauh dari akar, nafas pencarian pertama akan memakan banyak waktu.
8
Bab II Depth First Search (DFS) II.1 Pengertian Depth First Search
Depth-first search (DFS) adalah sebuah pencarian uninformed yang berlangsung dengan memperluas node anak pertama dari pencarian pohon yang muncul dan dengan demikian akan lebih dalam dan lebih sampai node tujuan ditemukan, atau sampai hits node yang tidak memiliki anak. Kemudian pencarian backtracks , kembali ke node baru-baru ini kebanyakan belum selesai menjelajahi
II.2 Metode Pencarian
Algoritma DFS yang diterapkan pada mesin pencari dalam melakukan pengindeksan adalah mengunjungi suatu server kemudian menyimpan semua link yang berhubungan dengan server tersebut baru kemudian mengunjungi server lain. Salah satu yang menerapkan algoritma DFS pada mesin pencarian adalah FTPSearch. FTPSearch adalah suatu mesin pencari
dokumen
yang
tersimpan
di
jaringan
ITB.
Dapat
diakses
pada
http://ftpsearch.itb.ac.id. FTPSearch akan menampilkan daftar hasil pencarian berdasarkan server. File-file yang tersimpan pada suatu server akan ditampilkan terlebih dahulu kemudian baru berpindah pada server lain. FTPSearch tidak memperhatikan file mana yang lebih berkaitan dengan kata kunci karena FTPSearch tidak melakukan observasi sampai pada isi dokumen tapi hanya melihat judul dokumen.
II.3 Pola strategi menemukan file pada suatu mesin pencari
Secara umum terdapat 3 pola strategi yang dilakukan oleh user mesin pencari untuk menemukan file yang sesuai dengan kata kunci yaitu strictly depth-first strategy, extreme breadth first strategy dan partially breath-first pattern). Metode strictly depth-first srategy
berarti pengguna mengamati tiap link hasil dari mesin pencari mulai dari atas, dan memutuskan segera untuk membuka dokumen atau tidak. Metode extreme breath-first strategy berarti pengguna melihat keseluruhan link daftar hasil pencarian kemudian memilih
link yang mengacu ke dokumen yang paling sesuai lalu mengunjungi link tersebut. Sekali-kali pengguna juga melihat kembali daftar hasil pencarian lalu mengunjungi ulang beberapa link yang menurut dia berkaitan. Metode partially breath-first pattern 9
merupakan metode campuran dimana pengguna melihat beberapa link baru memutuskan link mana yang akan dibuka.
II.4 Hasil Eksperimen
Pada eksperimen yang dilakukan oleh penelitian yang dilakukan oleh Kerstin Klockner, Nadine Wirshum, Anthony Jameson, empat puluh satu subjek diberi waktu sepuluh menit untuk mendapatkan informasi tentang “Assessment centers” dengan cara membuka dokumen yang relevan yang dikembalikan oleh Google sebagai respon pencarian. Sebuah daftar hasil pencarian terdiri dari 25 hasil telah disiapkan sebelumnya dan disajikan dalam sebuah halaman web. Subjek harus menggulung layer untuk dapat melihat keseluruhan halaman. Gerakan mata para subjek dan aksi klik tetikus direkam dengan bantuan pendeteksi ASL 504. Berdasarkan rekaman video yang dibuat melalui pendeteksi itu, pemrosesan hasil pencarian yang dilakukan para subjek dianalisis. Tiga kategori diidentifikasi : Sebagian besar subjek (65%) mengaplikasikan strategi DFS. Kebalikannya, minoritas subjek mengaplikasikan pola strategi BFS yang ekstrim, melihat ke seluruh daftar hasil pencarian sebelum membuka sebuah dokemen. Pola BFS yang parsial ditunjukkan oleh sisa 20% subjek, yang terkadang melihat ke beberapa entri berikutnya sebelum memilih dokumen yang akan dibuka. Pada eksperimen dua, dua puluh tujuh subjek diminta untuk melakukan dua aktivitas yang sama dengan eksperimen satu, dengan waktu 5 menit untuk masing-masing aktivitas. Untuk menciptakan situasi yang membuat BFS terlihat relative menarik, kita memperbolehkan subjek untuk membuka maksimal sepuluh dari 25 dokumen yang di daftar, memberi penghargaan kepada mereka untuk setiap penemuan dokumen yang relevan (hampir setengah dari dokumen relevan). Di sini, strategi yang berlawanan ditemukan lagi : 52% subjek tidak menunjukkan niat untuk melihat keseluruhan daftar. Minoritas subjek sebanyak 11% menggunakan strategi BFS yang ekstrim, melihat ke seluruh daftar sebelum membuka sebuah dokumen; sisanya sebanyak 37% mengaplikasikan strategi campuran, melihat dulu ke dua sampai enam dokumen berikutnya dalam daftar. Sebagai pendekatan pada algoritma DFS yang kita eksplor dalam paper ini adalah untuk memanipulasi depth-first forest secara eksplisit, tahap pertama adalah mengkonstruksi depthfirst forest dari sebuah graph. Untuk melakukan hal tersebut kita membutuhkan definisi trees dan forests.
10
Sebuah forest adalah a lists of trees, dan sebuah trees adalah sebuah node yang mengandung beberapa value, bersamaan dengan sebuah forest dari sub-trees. Baik trees maupun forests keduanya polimorphic dalam tipe dari data yang boleh mereka kandung. Data Tree a = Node a (Forest a) type Forest a = [Tree a] Sebuah DFS dari sebuah graph mengambil suatu graph dan sebuah urutan awal verteksverteks. Semua verteks dalam graph dalam urutan awalnya akan menjadi the return forest. dfs :: Graph -> [Vertex] -> Forest Vertex fungsi ini merupakan inti dari bahasan ini.
II.5 Implementasi DFS
Dalam rangka menerjemahkan sebuah graph menjadi sebuah depth-first spanning tree kita menggunakan suatu teknik umum yang digunakan dalam pemrograman fungsional yang bersifat lazy: generate then prune. Diberikan sebuah graph dan a list of vertices, pertama kita akan men -generate sebuah forest (mungkin saja infinite) yang terdiri dari semua verteks dan edges dalam suatu graph, dan kemudian prune (forest yang telah kita buat) untuk menghilangkan pengulangan.
II.6 Generating
Kita mendefinisikan fungsi generate yang, jika diberikan suatu graph g dan sebuah verteks v akan membangun sebuah tree yang root nya adalah v yang mengandung semua verteks dalam g yang 'reachable' dari v. generate :: Graph -> Vertex -> Tree Vertex generate g v = Node v (map (generate g) (g!v)) Jika graph g adalah siklik, maka tree yang dibangkitkan akan infinite. Tentu saja karena tree dibangkitkan on demand, hanya seporsi tertentu yang akan dibangkitkan.Bagian yang di prune tidak akan pernah dikonstruksi.
II.7 Pruning
Tujuan utama dari proses pruning adalah untuk mengabaikan subtrees yang memiliki akar-akarnya (roots) telah terkonstruksi sebelumnya. Oleh karena itu kita perlu me -maintain sekumpulan verteks yang jumlahnya terhingga (secara tradisionil disebut dengan 'marks ') dan verteks- verteks yang akan diabaikan. 11
Cara yang termudah untuk mencapai hal ini adalah dengan menggunakan state transformers, dan menirukan teknik imperatif yang me-maintain suatu array of booleans, yang diindeks oleh sekumpulan elemen. Inilah yang kita lakukan. Implementasi dan sekumpulan verteks adalah sebagai berikut : type Set s = MutArr s Vertec Bool mkEmpty :: Bounds -> ST s (Set s) mkempty bnds = newArr bnds False contains :: Set s -> Vertex -> ST s Bool contains m v = readArr m v include :: Set s -> Vertex -> ST s () include m v = writeArr m v True Sebuah set disajikan sebagai sebuah mutable array, diindeks oleh verteks-verteks, yang mengandung
nilai-nilai
boolean.
Untuk
men-generate
sebuah
set
terhingga
kita
mengalokasikan suatu ukuran array tertentu dengan semua elemen kita inisialisasi dengan nilai False. Keanggotaan dari Set dapat diatur hanya dengan menggunakan prosedur pembacaan dan penulisan array. Prune didefinisikan sebagai berikut : prune :: Bounds -> Forest Vertex -> Forest Vertex rune bnds ts = runST (mkEmpty bnds 'thenST' \m -> chop m ts) Fungsi prune dimulai dengan memperkenalkan sebuah thread dari state yg baru, kemudian men-generates sebuah array kosong didalam thread tersebut dan memanggil 'prosedur' chop. Hasil akhir dari prune adalah harga yang dibangkitkan oleh chop, yaitu state akhir yang diabaikan. chop :: Set s -> Forest Vertex -> Forest Vertex chop m [] = returnST [] chop m (Node v ts : us) = contains m v 'thenST' \visited -> if visited then chop m us else include m v 'thenST' \ _ -> chop m ts 'thenST' \as -> 12
chop m us 'thenST' \bs -> returnST ((Node vas) : bs) Ketika melakukan chopping pada a list of trees, rootnya yang pertama diuji. Jika sudah ada sebelumnya, seluruh tree tersebut akan diabaikan. Kalau tidak akan ditambah pada suatu set yang direpresentasikan oleh m, dan dua pemanggilan 'chop' berikutnya dibuat dalam sekuen. Yang pertama, disebut chop m ts, melakukan prunes thd forest yang merupakan akarnya adalah v, menambahkan semua forest tersebut pada set dari vekrteks yang sudah ditandai. Setelah semuanya selesai, sub-forest yang hendak di prune diberi lama as, dan sisanya adalah forest aslinya yang di chop. Hasilnya diberi nama dengan bs, dan sebuah forest dikonstruksikan dari kedua list tersebut. Semua ini dikerjakan secara lazy, on demand. State combinators memaksa komputasi untuk mengikuti uruatan atau sequence yang sudah ditentukan sebelumnya. Pada titik ini kita mungkin heran, bagaimana pemrograman fungsional dapat dikatakan lebih menguntungkan. Karena ternyata, code nya terlihat mirip dengan imperatif dalam beberapa hal komentar yang demikian itu mungkin ada benarnya, namun perlu dicatat bahwa hal ini adalah satu-satunya tempat dalam fase pengembangan dimana kita melakukan operasi destruktif untuk meningkatkan efisiensi. Tambahan lagi, enkapsulasi secara sempurna telah disediakan oleh runST yang menjamin bahwa dfs mempunyai eksterior fungsional murni. Komponen-komponen dari generate dan prune kemudian digabungkan untuk menghasilkan definisi drTi depth-first search. Dfs f vs = prune (bounds g) (map (generate g) vs) argumen vs adalah a list of vertices, sehingga fungsi generate di map ke vs. Forest yang dihasilkan kemudian di prune secara preorder.
II.8 Kompleksitas
Model untuk analisis kompleksitas dari program imperatif standar (tradisional) menyatakan bahwa algoritma DFS adalah linier dalam ukuran graphnya (oleh karena itu, dapat dieksekusi dalam O(V+E)) Model yang bersesuaian dengan itu pada pemrograman fungsional pada algoritma yang ditawarkan oleh Launcburry juga linier dan waktu pengeksekusiannya juga konstan namun diperkirakan akan kehilangan sebuah faktor kira-kira 6, jika dibandingkan dengan implementasinya dalam bahasa C. 13
4. Analisa Imperatif
Fungsional
Aliran parameter fungsi terlihat secara eksplisit (baik passing by value maupun by reference.
Aliran parameter fungsi terlihat secara implisit yankni tersembunyi dibalik definisi tipe dari fungsi tersebut.
Pemrograman tidak harus selalu menggunakan fungsi standar (seringkali kita dapat membuat user-defined function) sehingga dalam banyak hal kita tidak perlu memahami definisi fungsi standar
Karena semua fungsi didefinisikan oleh fungsi lain yang mempunyai orde lebih rendah, akan lebih nyaman bila kita mengerti mendefinisikan fungsi standar (yakni fungsi primitif yang sudah disediakan)
Sangat mungkin masih terdapat bugs (runtime errors) setelah program selesai
Karena tidak diizinkan adanya variabel side effect kita dapat memastikan bahwa bugs
II.9 Analisis
Berdasarkan penelitian yang dilakukan oleh Kerstin Klockner, Nadine Wirshum, Anthony Jameson pada makalahnya yang berjudul “Depth- and Breadth-First Processing of Search Result” kita dapat menyimpulkan bahwa pengguna cenderung melakukan pencarian secara strictly depth-first strategy . Yaitu melihat suatu link yang paling atas dari hasil pencarian kemudian mengaksesnya dan terus menelusuri link yang terdapat pada document tersebut yang berkaitan dengan kata kunci yang dicari. Sehingga agar pencarian oleh FTP search lebih efektif perlu ada penyesuaian dengan algoritma mesin pencari. Algoritma yang menurut kami paling sesuai adalah algoritma BFS pada mesin pencari yang akan menampilkan daftar file yang paling dekat relefansinya dengan kata kunci. Metode FTP search melakukan hal yang sama dengan WebCrawler yaitu mengunjungi setiap server, mencatat link file dan memasukkannya ke dalam basis data. Sehingga file yang paling relevan ditempatkan di bagian paling atas daftar hasil pencarian. Perbedaan dengan web crawler ftp search akan mengelompokkan file-file tersebut berdasarkan server. Kelebihan metode baru ini bagi pengguna FTP search adalah pengguna akan dapat langsung melihat file yang paling relevan pada bagian atas daftar hasil pencarian dan meminimalisasi pengaksesan lintas server.
14
Bab III Kesimpulan Berdasarkan analisis yang dilakukan maka algoritma BFS pada mesin pencarian dengan memperhatikan kebiasaan pengguna dalam membuka file daftar hasil pencarian akan mengefektifkan pencarian file di ftp search. Sehingga daftar hasil pencarian FTP search dapat lebih memudahkan pengguna dalam melakukan pencarian. pada paper ini telah di coba mengimplementasikan DFS dalam dua pendekatan yaitu imperatif dan fungsional. Ada beberapa hat yang perlu dicatat : 1. Pemrograman fungsional pada dasarnya menawarkan suatu cara disain dan implementasi yang lebih bersifat alami / natural yang lebih conform dengan cara berfikir manusia, namun demikian ada batasan-batasan dalam bahasa pemrograman fungsional terutama yang pure (seperti dihindarinya side-effect dan lazy evaluation) harus betul-betul difahami terlebih dahulu. 2. Pada implementasi yang mengharuskan adanya side-effect maka hal itu dapat disimulasikan dengan menggunakan monad.
15
Daftar Pustaka
[1] Pinkerton Brian.1994.”Finding What People Want: Experiences with the WebCrawler” [2] Kl¨ockner Kerstin. 2005 “Depth- and Breadth-First Processing of Search Result Lists: An Example Paper in the SIGCHI Style” [3] Salter Richard http://www.cs.oberlin.edu/classes/dragn/labs/graphs/graphs5.html. Diakses tanggal 17 Mei 2005 [4] Munir Rinaldi. 2005.”Diktat Kuliah Strategi Algoritmik” [5] www.informatika.org/~rinaldi/Stmik/Makalah/MakalahStmik33.pdf [6] ©2004 Digitized by USU digital library
16