Breadth First Search (BFS )
BFS (carian luas-dahulu, carian luas-dahulu) - kaedah traversal graf, sangat kerap digunakan dalam kedua-dua algoritma ringkas dan lanjutan. Breadth-First Search berfungsi dengan melangkah melalui tahap individu graf, bermula pada nod sumber dan beransur-ansur menjauhinya. Ini jelas ditunjukkan dalam animasi.
Untuk menulis BFS yang paling mudah, anda perlu dapat bekerja dengan struktur data yang membolehkan anda mengambil dari awal dan meletakkannya ke penghujung, dan juga boleh menyimpan graf dalam bentuk senarai bersebelahan (iaitu dengan baris gilir ).
Penerangan rasmi algoritma
1) Letakkan nombor bucu dari mana carian bermula ke dalam baris gilir kosong pada mulanya.
2) Ekstrak bucu U dari permulaan baris gilir dan tandakannya sebagai digunakan dalam tatasusunan berasingan.
3) Pada penghujung baris gilir, tambahkan semua bucu yang boleh kita capai menggunakan tepi daripada bucu U, dan yang belum dilabelkan.
4) Jika baris gilir kosong, maka semua nod graf yang disambungkan telah diimbas, jika tidak, kembali ke langkah 2.
Kerumitan
Memandangkan algoritma melawati semua nod graf dalam kes terburuk, apabila menyimpan graf sebagai senarai bersebelahan, kerumitan masa algoritma ialah O(|V| + |E|) , dengan V ialah set bucu graf dan E ialah set tepi. Dalam erti kata lain, algoritma berfungsi dalam kes terburuk untuk nombor daripada tepi + bilangan bucu.
|
BFS (breadth-first search) ialah kaedah traversal graf, sangat kerap digunakan dalam kedua-dua algoritma ringkas dan lanjutan. Breadth-First Search berfungsi dengan melangkah melalui tahap individu graf, bermula pada nod sumber dan beransur-ansur menjauhinya. Ini jelas ditunjukkan dalam animasi.
Untuk menulis BFS yang ringkas, anda perlu dapat bekerja dengan baris gilir, struktur data yang membolehkan anda mengambil dari awal dan meletakkannya di penghujung, dan juga boleh menyimpan graf dalam bentuk daripada senarai bersebelahan.
Penerangan formal algoritma
1) Letakkan nombor bucu dari mana carian bermula ke dalam baris gilir kosong pada mulanya.
2) Ekstrak bucu U dari permulaan baris gilir dan tandakannya sebagai digunakan dalam tatasusunan berasingan.
3) Pada penghujung baris gilir, tambahkan semua bucu yang boleh kita capai menggunakan tepi dari bucu U dan yang belum ditandakan lagi.
4) Jika baris gilir kosong, maka semua nod graf yang disambungkan telah diimbas, jika tidak, kembali ke langkah 2.
Kesukaran kerja
Oleh kerana, dalam kes yang paling teruk, algoritma melawati semua nod graf, apabila menyimpan graf dalam bentuk senarai bersebelahan, kerumitan masa algoritma ialah O(|V| + | E|), dengan V ialah set bucu graf, dan E ialah set tepi. ;
Dalam erti kata lain, algoritma berfungsi dalam kes terburuk untuk bilangan tepi + bilangan bucu.
|
Untuk memulihkan laluan terpendek, buat tatasusunan "nenek moyang" \(p[]\) span>, di mana, untuk setiap bucu, menyimpan nombor bucu yang kita gunakan untuk mencapai bucu ini.
|