Breadth

11
Breadth-first search Dalam teori grafik ,-pertama pencarian luas (BFS) adalah algoritma pencarian grafik yang dimulai pada root node dan mengeksplorasi semua node tetangga. Lalu untuk masing-masing node terdekat, itu belum dijelajahi mereka mengeksplorasi node tetangga, dan seterusnya, sampai menemukan tujuan. Breadth-first search Urutan node diperluas Kelas Algoritma pencarian Data structure Grafik performance Kasus terburuk kinerja kasus terburuk ruang kompleksitas O ( | V | + | E | ) = O ( b d ) O (| V | + | E |) = O (b d) Bagaimana cara kerjanya

description

gfgfhfhfhfhfh

Transcript of Breadth

Page 1: Breadth

Breadth-first searchDalam teori grafik ,-pertama pencarian luas (BFS) adalah algoritma pencarian grafik yang dimulai pada root node dan mengeksplorasi semua node tetangga. Lalu untuk masing-masing node terdekat, itu belum dijelajahi mereka mengeksplorasi node tetangga, dan seterusnya, sampai menemukan tujuan.

Breadth-first search

Urutan node diperluas Kelas Algoritma pencarian Data structure Grafik performance Kasus terburuk kinerja kasus terburuk ruang kompleksitas O ( | V | + | E | ) = O ( b d ) O (| V | + | E |) = O (b d)

Bagaimana cara kerjanya BFS adalah sebuah pencarian uninformed metode yang bert

ujuan untuk memperluas dan memeriksa semua node dari sebuah grafik atau kombinasi urutan dengan sistematis mencari melalui setiap solusi. Dengan kata lain, secara mendalam

Page 2: Breadth

akan mencari seluruh grafik atau urutan tanpa mempertimbangkan tujuan sampai menemukannya. Ia tidak menggunakan heuristik algoritma.

Dari sudut pandang algoritma , anak semua

node diperoleh dengan memperluas simpul ditambahkan ke FIFO antrian . Dalam implementasi khas, node yang belum diperiksa untuk tetangga mereka ditempatkan dalam beberapa wadah (seperti antrian atau daftar link ) yang disebut "terbuka" dan kemudian setelah diperiksa ditempatkan dalam wadah "tertutup".

Peta contoh Jerman dengan beberapa hubungan antara kota

Pohon yang pertama kali luas diperoleh saat menjalankan BFS pada peta yang diberikan dan mulai di Frankfurt

Contoh animasi pencarian luas-pertama

Algoritma (informal) 1. Enqueue node root. 2. Dequeue node dan memeriksanya.

o Jika elemen yang dicari ditemukan di node ini, berhenti mencari dan mengembalikan hasilnya.

o Jika tidak ada penerus enqueue (kelenjar anak langsung) yang belum ditemukan.

3. Jika antrian kosong, setiap node pada grafik telah diselidiki - berhenti pencarian dan kembali "tidak ditemukan".

4. Ulangi dari Langkah 2.

. Catatan: Menggunakan tumpukan bukan antrian itu akan mengubah algoritma ini menjadi pertama pencarian mendalam .

Page 3: Breadth

Fitur

Kompleksitas Space

Karena semua node satu tingkat harus disimpan sampai anak mereka simpul pada tingkat berikutnya telah dihasilkan, kompleksitas ruang sebanding dengan jumlah node pada tingkat terdalam. Dengan adanya faktor percabangan b dan kedalaman grafik d ruang kompleksitas asimtotik adalah jumlah node pada tingkat terdalam, O (b d). Ketika jumlah vertex dan tepi dalam grafik dikenal sebelumnya, kompleksitas ruang juga dapat dinyatakan sebagai O (| E | + | V |) dimana | E | adalah kardinalitas dari himpunan sisi (jumlah tepi), dan | V | adalah kardinalitas dari himpunan vertex. In the worst case the Dalam kasus terburuk grafik memiliki kedalaman 1 dan semua titik harus disimpan. Karena eksponensial di kedalaman grafik, cari luas-yang pertama sering tidak praktis untuk masalah-masalah besar pada sistem dengan ruang terbatas.

Kompleksitas Waktu

Sejak dalam pencarian kasus terburuk luas-pertama harus mempertimbangkan semua jalur ke

semua node memungkinkan kompleksitas waktu pencarian luasnya-pertama yaitu O (b d). Kompleksitas juga waktu dapat dinyatakan sebagai O (| E | + | V |) karena setiap node dan setiap tepi akan dibahas dalam kasus terburuk.

Kelengkapan

pencarian Breadth-pertama selesai. Ini berarti bahwa jika ada solusi, cari luas-pertama akan menemukannya tanpa jenis grafik. Namun, jika grafik yang terbatas dan tidak ada solusi pencarian luas-pertama akan berbeda.

Bukti kelengkapan

Jika node tujuan dangkal adalah beberapa kedalaman hingga mengatakan d,-pertama pencarian luas akhirnya akan menemukannya setelah memperluas semua node dangkal (asalkan b faktor percabangan ada batasnya).

optimalitas

Dalam pencarian luas-umum pertama tidak optimal karena selalu kembali hasil dengan ujung paling sedikit antara node awal dan node tujuan. Jika grafik adalah grafik tertimbang, dan karenanya memiliki biaya yang terkait dengan setiap langkah, sebuah tujuan berikutnya untuk memulai tidak harus menjadi tujuan termurah yang tersedia. masalah ini diselesaikan dengan meningkatkan-luasnya untuk mencari pertama -biaya pencari yang seragam yang mempertimbangkan biaya jalan. Namun demikian, jika grafik tidak berbobot, dan karena itu semua biaya tahap adalah sama, cari luas-pertama akan menemukan terdekat dan solusi yang terbaik.

Aplikasi

Page 4: Breadth

Breadth-pertama dapat digunakan untuk memecahkan berbagai masalah dalam teori graph, misalnya:

Menemukan semua node yang terhubung dalam satu komponen Menyalin Koleksi, Algoritma Cheney Menemukan jalur terpendek antara dua simpul u dan v (dalam grafik tertimbang ) Pengujian grafik untuk bipartiteness (Reverse) Cuthill-McKee mesh penomoran Ford-Fulkerson metode untuk menghitung arus maksimum dalam jaringan aliran Serialisasi / Deserialization dari serialisasi vs pohon biner untuk disortir,

memungkinkan pohon yang akan dibangun kembali dengan cara yang efisien.

Mencari komponen terhubung

Himpunan node dicapai melalui BFS (pencarian-luasnya pertama) membentuk komponen terhubung yang berisi node awal.

bipartiteness Pengujian

BFS dapat digunakan untuk menguji bipartiteness , dengan memulai pencarian di titik manapun dan bolak memberikan label ke node dikunjungi selama pencarian. Artinya, memberi label 0 ke node awal, 1 untuk semua tetangga, 0 untuk tetangga mereka tetangga ', dan seterusnya. Jika pada setiap langkah sebuah node memiliki (dikunjungi) tetangga dengan label yang sama seperti dirinya sendiri, maka grafik tidak bipartit. Jika pencarian berakhir tanpa situasi seperti ini terjadi, maka grafik adalah bipartit.

Depth-first search (DFS) adalah algoritma untuk melintasi atau mencari sebuah pohon , struktur pohon , atau grafik Satu dimulai pada akar (memilih beberapa node sebagai root dalam kasus grafik) dan mengeksplorasi sejauh mungkin sepanjang masing-masing cabang sebelum mundur .

Definisi formalSecara formal, DFS adalah sebuah pencarian uninformed yang berlangsung dengan memperluas simpul anak pertama dari pencarian pohon yang muncul dan dengan demikian akan semakin dalam sampai node tujuan ditemukan, atau sampai hits node yang tidak memiliki anak. Kemudian pencarian backtracks , kembali ke node terakhir kebanyakan belum selesai menjelajahi. Dalam implementasi non-rekursif, semua node yang baru diperluas ditambahkan ke stack untuk eksplorasi.

Para waktu dan ruang analisis DFS berbeda menurut wilayah penerapannya. Dalam ilmu komputer teoretis, DFS biasanya digunakan untuk melintasi seluruh grafik, dan membutuhkan waktu O (| V | + | E |) , linear dalam ukuran grafik. Dalam aplikasi ini juga menggunakan ruang O (| V |) dalam kasus terburuk untuk menyimpan tumpukan vertex di jalan pencarian saat ini serta set-vertex sudah dikunjungi. Oleh karena itu, dalam pengaturan ini, waktu dan batas ruang adalah sama seperti untuk luas pencarian pertama dan pilihan yang kedua algoritma untuk menggunakan kurang tergantung pada kompleksitas dan lebih pada sifat-sifat yang berbeda dari orderings titik dua algoritma menghasilkan.

Page 5: Breadth

Untuk aplikasi dari DFS untuk mencari masalah dalam kecerdasan buatan , Namun, grafik yang akan dicari sering terlalu besa

r untuk mengunjungi secara keseluruhan atau bahkan tak terbatas, dan DFS mungkin menderita dari non-pemutusan kontrak kerja ketika panjang jalur di pohon pencarian tak terbatas. Oleh karena itu, pencarian hanya dilakukan dengan kedalaman terbatas, dan karena ketersediaan memori yang terbatas biasanya tidak menggunakan struktur data yang melacak himpunan semua node yang sudah dikunjungi sebelumnya. Dalam hal ini, waktu masih linier dalam jumlah vertex diperluas dan tepi (walaupun nomor ini tidak sama dengan ukuran keseluruhan grafik karena beberapa titik bisa dicari lebih dari sekali dan lain-lain tidak sama sekali) tetapi ruang kompleksitas ini varian dari DFS hanya sebanding dengan batas kedalaman, jauh lebih kecil daripada ruang yang dibutuhkan untuk mencari sampai kedalaman yang sama dengan -pertama pencarian luas . Untuk aplikasi tersebut, DFS juga meminjamkan sendiri jauh lebih baik untuk heuristik metode memilih cabang yang tampak mungkin. Ketika suatu batas kedalaman yang tepat tidak diketahui apriori, pertama cari memperdalam kedalaman-iteratif berlaku DFS berulang kali dengan urutan batas meningkat; dalam modus kecerdasan buatan analisis, dengan faktor percabangan lebih besar dari satu, meningkatkan memperdalam berulang kali berjalan dengan hanya faktor konstan selama kasus di mana batas kedalaman yang benar dikenal karena pertumbuhan geometrik jumlah node per tingkat.

ContohUntuk grafik berikut:

Page 6: Breadth

pencarian mendalam-pertama mulai dari A, dengan asumsi bahwa tepi kiri dalam grafik ditunjukkan dipilih sebelum tepi kanan, dan dengan asumsi pencarian sebelumnya-ingat node dikunjungi dan tidak akan mengulangi mereka (karena ini

adalah grafik kecil), akan mengunjungi node dalam urutan sebagai berikut: A, B, D, F, E, C, G.

Melakukan pencarian yang sama tanpa mengingat hasil sebelumnya mengunjungi node dalam mengunjungi node dalam urutan A,

B

, D, F, E, A, B, D, F

, E, dll selamanya, terperangkap dalam A, B, D, F , E siklus dan tidak pernah mencapai C atau G.

Iteratif memperdalam mencegah loop ini dan akan mencapai node berikut pada kedalaman berikut, dengan asumsi itu hasil dari kiri-ke-kanan seperti di atas:

0: A 1: A (diulang), B, C, E

(Perhatikan bahwa iterasi memperdalam sekarang melihat C, ketika sebuah pencarian depth-first konvensional tidak.)

2: A B,, D, F, C, G, E, F

(Perhatikan bahwa masih melihat C, tetapi itu datang belakangan juga diketahui bahwa melihat E melalui jalan yang berbeda, dan loop kembali ke F dua kali..)

3: A B,, D, F, E, C, G, E, F, B

Untuk grafik ini, kedalaman lebih yang ditambahkan, dua siklus "ABFE" dan "AEFB" hanya akan mendapatkan lagi sebelum algoritma menyerah dan mencoba cabang lain.

Output d

ari pertama pencarian mendalam

Page 7: Breadth

Alam sebagian besar hasil pencarian pertama kedalaman grafik (jika dianggap sebagai fungsi daripada prosedur ) adalah pohon rentang dari vertex mencapai selama pencarian. Berdasarkan pohon rentang, tepi grafik asli dapat terbagi menjadi tiga kelas: tepi depan, yang titik dari simpul pohon itu untuk salah satu keturunannya, kembali tepi, yang titik dari simpul ke salah satu dari nenek moyangnya, dan tepi salib, yang tidak melakukan keduanya. Kadang-kadang pohon tepi, pinggiran yang termasuk ke dalam pohon rentang itu sendiri, yang diklasifikasikan secara terpis

ah dari tepi ke depan. Dapat ditunjukkan bahwa jika grafik ini tidak diarahkan maka semua ujungnya adalah ujung atau tepi-tepi pohon kembali.

orderings Vertex

Hal ini juga memungkinkan untuk menggunakan pencarian depth-first order yang linier titik dari grafik asli (atau pohon). Terdapat tiga cara yang umum untuk melakukan hal ini:

preordering adalah daftar vertex dalam urutan yang pertama kali dikunjungi oleh algoritma pencarian pertama yang mendalam. Ini adalah cara yang kompak dan alam menggambarkan kemajuan pencarian, seperti yang dilakukan sebelumnya di artikel ini. Sebuah preordering pohon ekspresi adalah ekspresi dalam notasi Polandia .

Page 8: Breadth

postordering adalah daftar vertex dalam urutan bahwa mereka terakhir dikunjungi oleh algoritma. Sebuah postordering sebuah pohon ekspresi adalah ekspresi dalam notasi Polandia terbalik .

Sebuah postordering reverse kebalikan dari postordering sebuah, yaitu daftar vertex dalam urutan sebaliknya dari kunjungan terakhir mereka. Saat mencari pohon, postordering reverse adalah sama dengan preordering, namun secara umum mereka berbeda saat mencari grafik. Sebagai contoh, ketika mencari grafik diarahkan

mulai dari A node, mengunjungi salah satu simpul secara berurutan, untuk menghasilkan daftar baik ABDBACA, atau ACDCABA (tergantung pada algoritma memilih untuk mengunjungi B atau C pertama). Perhatikan bahwa ulangi dilihat dalam bentuk mundur ke node, untuk memeriksa apakah masih belum dikunjungi tetangga, termasuk di sini (bahkan jika ditemukan memiliki none). Jadi preorderings mungkin adalah ABDC dan ACDB (urutan oleh kejadian paling kiri node dalam daftar di atas), sedangkan sebaliknya postorderings mungkin adalah ACBD dan ABCD (urutan oleh kejadian paling kanan node dalam daftar di atas). Reverse

Page 9: Breadth

postordering menghasilkan penyortiran topologi dari setiap grafik asiklik diarahkan . Memesan ini juga bermanfaat dalam analisis aliran kontrol karena sering kali merupakan Linearisasi alami aliran kontrol. Grafik di atas mungkin merupakan aliran kontrol dalam sebuah fragmen kode seperti

jika (A), ( B ) Else ( C ) Ddan wajar untuk mempertimbangkan kode ini dalam urutan ABCD atau ACBD, tetapi tidak alami untuk menggunakan perintah ABDC atau ACD B.