日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(九)数据结构之“图”

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (九)数据结构之“图” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構之“圖”

  • 圖是什么
  • 圖的常用操作
  • 圖的深度/廣度優先遍歷
    • 什么是深度/廣度優先遍歷
    • 深度優先遍歷算法口訣
    • 廣度優先遍歷算法口訣
  • LeetCode:65.有效數字
  • LeetCode:417.太平洋大西洋水流問題
  • LeetCode:133.克隆圖
  • 思考題

圖是什么

  • 圖是網絡結構的抽象模型,是一組由邊連接的節點
  • 圖可以表示任何二元關系,比如道路、航班…

.

  • JS中沒有圖,但是可以用Object和Array構建圖
  • 圖的表示法:鄰接矩陣、鄰接表、關聯矩陣…

圖的常用操作

深度優先遍歷
廣度優先遍歷

圖的深度/廣度優先遍歷

const graph = {0: [1, 2],1: [2],2: [0, 3],3: [3] };module.exports = graph;

什么是深度/廣度優先遍歷

深度優先遍歷:盡可能深的搜索圖的分支
廣度優先遍歷:先訪問離根節點最近的節點

深度優先遍歷算法口訣


沒訪問過的防止陷入死循環

const graph = require('./graph');const visited = new Set(); const dfs = (n) => {console.log(n);visited.add(n);graph[n].forEach(c => {if(!visited.has(c)){dfs(c);}}); };dfs(2);

廣度優先遍歷算法口訣

新建一個隊列,把根節點入隊
把隊頭出隊并訪問
把隊頭的沒訪問過的相鄰節點入隊
重復第二、三步,直到隊列為空

const graph = require('./graph');const visited = new Set(); visited.add(2); const q = [2]; while (q.length) {const n = q.shift();console.log(n);graph[n].forEach(c => {if (!visited.has(c)) {q.push(c);visited.add(c);}}); }

LeetCode:65.有效數字






時間復雜度O(n),n為字符串長度,空間復雜度為O(1)

LeetCode:417.太平洋大西洋水流問題





時間復雜度O(m * n),空間復雜度 O(m * n)

LeetCode:133.克隆圖



法一:深度優先遍歷

時間復雜度O(n),n為圖的節點數,空間復雜度O(n)
法二:廣度優先遍歷

時間復雜度O(n),空間復雜度O(n)

思考題

1、請用圖畫出你的朋友圈,無需Coding
2、請用圖畫出你的偶像的人物關系,無需Coding

總結

以上是生活随笔為你收集整理的(九)数据结构之“图”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。