BFS at DFS

Anonim

BFS vs DFS

Ang Breadth First Search (kilala rin bilang BFS) ay isang paraan ng paghahanap na ginagamit upang palawakin ang lahat ng mga node ng isang partikular na graph. Gagawa ito ng gawaing ito sa pamamagitan ng paghahanap ng bawat solong solusyon upang masuri at palawakin ang mga node na ito (o isang kumbinasyon ng mga pagkakasunud-sunod dito). Bilang tulad, ang isang BFS ay hindi gumagamit ng isang heuristic algorithm (o isang algorithm na naghahanap para sa isang solusyon sa pamamagitan ng maramihang mga sitwasyon). Matapos makuha ang lahat ng mga node, idaragdag ang mga ito sa isang queue na kilala bilang First In, First Out queue. Ang mga node na hindi pa ginalugad ay 'nakaimbak' sa isang lalagyang minarkahan 'bukas'; sa sandaling ginalugad sila ay dadalhin sa isang lalagyan na minarkahan 'sarado'.

Ang Lalim Unang Paghahanap (kilala rin bilang DFS) ay isang paraan ng paghahanap na lumalalim nang mas malalim sa isang node ng isang paghahanap hanggang ang isang layunin ay naabot (o hanggang doon ay isang node na walang anumang iba pang mga permutasyon o 'mga anak'). Pagkatapos ng isang layunin ay natagpuan, ang paghahanap backtracks sa isang nakaraang node na nawala sa isang solusyon, paulit-ulit ang proseso hanggang sa ang lahat ng mga nodes ay matagumpay na naghanap. Dahil dito, patuloy ang mga node para sa karagdagang paggalugad - ito ay tinatawag na di-recursive na pagpapatupad.

Ang mga tampok ng BFS ay ang puwang at oras ng pagiging kumplikado, pagkakumpleto, patunay ng pagkakumpleto, at optimality. Ang pagiging kumplikado ng espasyo ay tumutukoy sa proporsyon ng bilang ng mga node sa pinakamalalim na antas ng paghahanap. Ang pagiging kumplikado ng oras ay tumutukoy sa aktwal na dami ng 'oras' na ginagamit para sa pag-isipan ang bawat landas ng isang node sa isang paghahanap. Ang pagkumpleto ay, mahalagang, isang paghahanap na nakakahanap ng solusyon sa isang graph anuman ang uri ng graph na ito. Ang patunay ng pagkakumpleto ay ang pinakamababaw na antas kung saan ang isang layunin ay matatagpuan sa isang node sa isang tiyak na lalim. Panghuli, ang optimality ay tumutukoy sa isang BFS na hindi timbang - isang graph na ginagamit para sa yunit-hakbang na gastos.

Ang DFS ay ang pinaka-natural na output gamit ang isang spanning tree - na isang puno na binubuo ng lahat ng mga vertex at ilang mga gilid sa isang undirected graph. Sa pagbubuo na ito, ang graph ay nahahati sa tatlong klase: Ipasa ang mga gilid, na tumuturo mula sa isang node sa isang node ng bata; likod na mga gilid, pagturo mula sa isang node sa isang mas maaga na node; at mga cross edge, na hindi gumagawa ng alinman sa isa sa mga ito.

Buod:

1. Hinahanap ng BFS ang bawat solong solusyon sa isang graph upang palawakin ang mga node nito; ang isang DFS ay naglulubog ng malalim sa loob ng node ng bata hanggang sa maabot ang isang layunin.

2. Ang mga katangian ng isang BFS ay espasyo at oras na kumplikado, kumpleto, patunay ng pagkakumpleto, at optimality; Ang pinaka-natural na output para sa isang DFS ay isang spanning tree na may tatlong klase: mga forward edge, mga back edge, at mga cross edge.