摘要:深度優(yōu)先遍歷和廣度優(yōu)先遍歷什么是深度優(yōu)先和廣度優(yōu)先其實(shí)簡單來說深度優(yōu)先就是自上而下的遍歷搜索廣度優(yōu)先則是逐層遍歷如下圖所示深度優(yōu)先廣度優(yōu)先兩者的區(qū)別對(duì)于算法來說無非就是時(shí)間換空間空間換時(shí)間深度優(yōu)先不需要記住所有的節(jié)點(diǎn)所以占用空間小而廣度優(yōu)先
深度優(yōu)先遍歷和廣度優(yōu)先遍歷
什么是深度優(yōu)先和廣度優(yōu)先
其實(shí)簡單來說 深度優(yōu)先就是自上而下的遍歷搜索 廣度優(yōu)先則是逐層遍歷, 如下圖所示
1.深度優(yōu)先
2.廣度優(yōu)先
兩者的區(qū)別
對(duì)于算法來說 無非就是時(shí)間換空間 空間換時(shí)間
深度優(yōu)先不需要記住所有的節(jié)點(diǎn), 所以占用空間小, 而廣度優(yōu)先需要先記錄所有的節(jié)點(diǎn)占用空間大
深度優(yōu)先有回溯的操作(沒有路走了需要回頭)所以相對(duì)而言時(shí)間會(huì)長一點(diǎn)
深度優(yōu)先采用的是堆棧的形式, 即先進(jìn)后出廣度優(yōu)先則采用的是隊(duì)列的形式, 即先進(jìn)先出
const data = [ { name: "a", children: [ { name: "b", children: [{ name: "e" }] }, { name: "c", children: [{ name: "f" }] }, { name: "d", children: [{ name: "g" }] }, ], }, { name: "a2", children: [ { name: "b2", children: [{ name: "e2" }] }, { name: "c2", children: [{ name: "f2" }] }, { name: "d2", children: [{ name: "g2" }] }, ], } ] // 深度遍歷, 使用遞歸 function getName(data) { const result = []; data.forEach(item => { const map = data => { result.push(data.name); data.children && data.children.forEach(child => map(child)); } map(item); }) return result.join(","); } // 廣度遍歷, 創(chuàng)建一個(gè)執(zhí)行隊(duì)列, 當(dāng)隊(duì)列為空的時(shí)候則結(jié)束 function getName2(data) { let result = []; let queue = data; while (queue.length > 0) { [...queue].forEach(child => { queue.shift(); result.push(child.name); child.children && (queue.push(...child.children)); }); } return result.join(","); } console.log(getName(data)) console.log(getName2(data))
作者:zwmmm
鏈接:https://juejin.im/post/5c4a96...
來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106142.html
摘要:今天就來看看基于圖的兩種搜索算法,分別是廣度優(yōu)先搜索和深度優(yōu)先搜索算法,這兩個(gè)算法都十分的常見,在平常的面試當(dāng)中也可能遇到。 1. 概論 前面說到了圖這種非線性的數(shù)據(jù)結(jié)構(gòu),并且我使用了代碼,簡單演示了圖是如何實(shí)現(xiàn)的。今天就來看看基于圖的兩種搜索算法,分別是廣度優(yōu)先搜索和深度優(yōu)先搜索算法,這兩個(gè)算法都十分的常見,在平常的面試當(dāng)中也可能遇到。 在圖上面的搜索算法,其實(shí)主要的表現(xiàn)形式就是從圖...
摘要:不撞南墻不回頭深度優(yōu)先搜索基礎(chǔ)部分對(duì)于深度優(yōu)先搜索和廣度優(yōu)先搜索,我很難形象的去表達(dá)它的定義。這就是深度優(yōu)先搜索了,當(dāng)然,這個(gè)題目我們還有別的解法,這就到了我們說的廣度優(yōu)先搜索。 不撞南墻不回頭-深度優(yōu)先搜索 基礎(chǔ)部分 對(duì)于深度優(yōu)先搜索和廣度優(yōu)先搜索,我很難形象的去表達(dá)它的定義。我們從一個(gè)例子來切入。 輸入一個(gè)數(shù)字n,輸出1~n的全排列。即n=3時(shí),輸出123,132,213,231,...
摘要:算法之深度優(yōu)先遍歷和廣度優(yōu)先遍歷背景在開發(fā)頁面的時(shí)候,我們有時(shí)候會(huì)遇到這種需求在頁面某個(gè)節(jié)點(diǎn)中遍歷,找到目標(biāo)節(jié)點(diǎn),我們正常做法是利用選擇器,或者,但在本文,我們從算法的角度去查找節(jié)點(diǎn),同時(shí)理解一下深度優(yōu)先遍歷和廣度優(yōu)先遍歷的原理。 JS算法之深度優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS) 背景 在開發(fā)頁面的時(shí)候,我們有時(shí)候會(huì)遇到這種需求:在頁面某個(gè)dom節(jié)點(diǎn)中遍歷,找到目標(biāo)dom節(jié)點(diǎn),...
摘要:引言搜索對(duì)象的深度拷貝,往往會(huì)冒出轉(zhuǎn)換和遞歸拷貝大法。但遇到大數(shù)據(jù)量,它們都有調(diào)用棧爆棧的風(fēng)險(xiǎn)今天,我們嘗試?yán)脴涞睦蒙疃葟V度優(yōu)先遍歷來實(shí)現(xiàn)對(duì)象的深度拷貝。以下代碼在環(huán)境下全部測試通過。 引言 搜索JavaScript對(duì)象的深度拷貝,往往會(huì)冒出JSON轉(zhuǎn)換和遞歸拷貝大法。但遇到大數(shù)據(jù)量,它們都有調(diào)用棧爆棧的風(fēng)險(xiǎn)今天,我們嘗試?yán)脴涞睦蒙疃?廣度優(yōu)先遍歷來實(shí)現(xiàn)對(duì)象的深度拷貝。以下代碼...
摘要:先畫個(gè)樹,然后解釋何為深度,何為廣度第一層子集第二層子集第二層子集第三層,子集第三層第四層圖就不畫太復(fù)雜了,最高四層的結(jié)構(gòu),如果換成的形式的話可以理解成第一層第二層 先畫個(gè)樹,然后解釋 何為深度, 何為廣度 第一層 子集 | ...
閱讀 965·2021-11-17 09:33
閱讀 424·2019-08-30 11:16
閱讀 2478·2019-08-29 16:05
閱讀 3361·2019-08-29 15:28
閱讀 1402·2019-08-29 11:29
閱讀 1958·2019-08-26 13:51
閱讀 3396·2019-08-26 11:55
閱讀 1214·2019-08-26 11:31