国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

說說你對圖的理解?相關操作有哪些?

這篇具有很好參考價值的文章主要介紹了說說你對圖的理解?相關操作有哪些?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

說說你對圖的理解?相關操作有哪些?

一、是什么

在計算機科學中,圖是一種抽象的數(shù)據(jù)類型,在圖中的數(shù)據(jù)元素通常稱為結點,V是所有頂點的集合,E是所有邊的集合

如果兩個頂點v,w,只能由vw,而不能由wv,那么我們就把這種情況叫做一個從?v?到?w?的有向邊。v也被稱做初始點,w也被稱為終點。這種圖就被稱做有向圖

如果vw是沒有順序的,從v到達w和從w到達v是完全相同的,這種圖就被稱為無向圖

圖的結構比較復雜,任意兩個頂點之間都可能存在聯(lián)系,因此無法以數(shù)據(jù)元素在存儲區(qū)中的物理位置來表示元素之間的關系

常見表達圖的方式有如下:

  • 鄰接矩陣

  • 鄰接表

鄰接矩陣

通過使用一個二維數(shù)組G[N][N]進行表示N個點到N-1編號,通過鄰接矩陣可以立刻看出兩頂點之間是否存在一條邊,只需要檢查鄰接矩陣行i和列j是否是非零值,對于無向圖,鄰接矩陣是對稱的

說說你對圖的理解?相關操作有哪些?

鄰接表

存儲方式如下圖所示:

說說你對圖的理解?相關操作有哪些?

?在javascript中,可以使用Object進行表示,如下:

const graph = {
  A: [2, 3, 5],
  B: [2],
  C: [0, 1, 3],
  D: [0, 2],
  E: [6],
  F: [0, 6],
  G: [4, 5]
}

圖的數(shù)據(jù)結構還可能包含和每條邊相關聯(lián)的數(shù)值(edge value),例如一個標號或一個數(shù)值(即權重,weight;表示花費、容量、長度等)

二、操作

關于的圖的操作常見的有:

  • 深度優(yōu)先遍歷
  • 廣度優(yōu)先遍歷

首先構建一個圖的鄰接矩陣表示,如下面的圖:

說說你對圖的理解?相關操作有哪些?

?用代碼表示則如下:

const graph = {
  0: [1, 4],
  1: [2, 4],
  2: [2, 3],
  3: [],
  4: [3],
}

深度優(yōu)先遍歷

也就是盡可能的往深處的搜索圖的分支

實現(xiàn)思路是,首先應該確定一個根節(jié)點,然后對根節(jié)點的沒訪問過的相鄰節(jié)點進行深度優(yōu)先遍歷

確定以 0 為根節(jié)點,然后進行深度遍歷,然后遍歷1,接著遍歷 2,然后3,此時完成一條分支0 - 1- 2- 3的遍歷,換一條分支,也就是4,4后面因為3已經(jīng)遍歷過了,所以就不訪問了

用代碼表示則如下:

const visited = new Set()
const dfs = (n) => {
  console.log(n)
  visited.add(n) // 訪問過添加記錄
  graph[n].forEach(c => {
    if(!visited.has(c)){ // 判斷是否訪問呢過
      dfs(c)
    }
  })
}

廣度優(yōu)先遍歷

先訪問離根節(jié)點最近的節(jié)點,然后進行入隊操作,解決思路如下:

  • 新建一個隊列,把根節(jié)點入隊
  • 把隊頭出隊并訪問
  • 把隊頭的沒訪問過的相鄰節(jié)點入隊
  • 重復二、三步驟,知道隊列為空

用代碼標識則如下:

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

三、總結

通過上面的初步了解,可以看到圖就是由頂點的有窮非空集合和頂點之間的邊組成的集合,分成了無向圖與有向圖

圖的表達形式可以分成鄰接矩陣和鄰接表兩種形式,在javascript中,則可以通過二維數(shù)組和對象的形式進行表達

圖實際是很復雜的,后續(xù)還可以延伸出無向圖和帶權圖,對應如下圖所示:

說說你對圖的理解?相關操作有哪些?

參考文獻

  • https://zh.wikipedia.org/wiki/%E5%9B%BE_(%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84)
  • https://www.kancloud.cn/imnotdown1019/java_core_full/2159607

如果對您有所幫助,歡迎您點個關注,我會定時更新技術文檔,大家一起討論學習,一起進步。

?說說你對圖的理解?相關操作有哪些?文章來源地址http://www.zghlxwxcb.cn/news/detail-855150.html

到了這里,關于說說你對圖的理解?相關操作有哪些?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 說說你對slot的理解?slot使用場景有哪些?

    說說你對slot的理解?slot使用場景有哪些?

    定義 在Vue.js中,slot(插槽)是一種用于組件之間內(nèi)容分發(fā)的機制。它允許你在父組件中編寫子組件的內(nèi)容,從而增加了組件的靈活性和可重用性。 Slot 藝名插槽,花名“占坑”,我們可以理解為 slot 在組件模板中占好了位置,當使用該組件標簽時候,組件標簽里面的內(nèi)容就

    2024年02月07日
    瀏覽(23)
  • 說說你對keep-alive的理解是什么?

    說說你對keep-alive的理解是什么?

    keep-alive 是 vue 中的內(nèi)置組件,能在組件切換過程中將狀態(tài)保留在內(nèi)存中,防止重復渲染 DOM keep-alive ?包裹動態(tài)組件時,會緩存不活動的組件實例,而不是銷毀它們 keep-alive 可以設置以下 props 屬性: include ?- 字符串或正則表達式。只有名稱匹配的組件會被緩存 exclude ?- 字符串

    2024年03月09日
    瀏覽(35)
  • javascript基礎二十一:說說你對BOM的理解,常見的BOM對象你了解哪些?

    javascript基礎二十一:說說你對BOM的理解,常見的BOM對象你了解哪些?

    一、是什么 BOM (Browser Object Model),瀏覽器對象模型,提供了獨立于內(nèi)容與瀏覽器窗口進行交互的對象 其作用就是跟瀏覽器做一些交互效果,比如如何進行頁面的后退,前進,刷新,瀏覽器的窗口發(fā)生變化,滾動條的滾動,以及獲取客戶的一些信息如:瀏覽器品牌版本,屏幕分

    2024年02月07日
    瀏覽(35)
  • 說說你對vue的mixin的理解,有什么應用場景?

    說說你對vue的mixin的理解,有什么應用場景?

    Mixin 是面向對象程序設計語言中的類,提供了方法的實現(xiàn)。其他類可以訪問 mixin 類的方法而不必成為其子類 Mixin 類通常作為功能模塊使用,在需要該功能時“混入”,有利于代碼復用又避免了多繼承的復雜 先來看一下官方定義 mixin (混入),提供了一種非常靈活的方式,來

    2024年03月09日
    瀏覽(30)
  • 說說你對棧、隊列的理解?應用場景?

    說說你對棧、隊列的理解?應用場景?

    棧(stack)又名堆棧,它是一種運算受限的線性表,限定僅在表尾進行插入和刪除操作的線性表 表尾這一端被稱為棧頂,相反地另一端被稱為棧底,向棧頂插入元素被稱為進棧、入棧、壓棧,從棧頂刪除元素又稱作出棧 所以其按照先進后出的原則存儲數(shù)據(jù),先進入的數(shù)據(jù)被壓

    2024年04月11日
    瀏覽(22)
  • 說說你對堆的理解?如何實現(xiàn)?應用場景?

    說說你對堆的理解?如何實現(xiàn)?應用場景?

    堆(Heap)是計算機科學中一類特殊的數(shù)據(jù)結構的統(tǒng)稱 堆通常是一個可以被看做一棵完全二叉樹的數(shù)組對象,如下圖: 總是滿足下列性質: 堆中某個結點的值總是不大于或不小于其父結點的值 堆總是一棵完全二叉樹 堆又可以分成最大堆和最小堆: 最大堆:每個根結點,都有根

    2024年04月22日
    瀏覽(35)
  • 說說你對二分查找的理解?如何實現(xiàn)?應用場景?

    說說你對二分查找的理解?如何實現(xiàn)?應用場景?

    ? 在計算機科學中,二分查找算法,也稱折半搜索算法,是一種在有序數(shù)組中查找某一特定元素的搜索算法 想要應用二分查找法,則這一堆數(shù)應有如下特性: 存儲在數(shù)組中 有序排序 搜索過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束 如果

    2024年04月25日
    瀏覽(20)
  • 說說你對貪心算法、回溯算法的理解?應用場景?

    說說你對貪心算法、回溯算法的理解?應用場景?

    貪心算法,又稱貪婪算法,是算法設計中的一種思想 其期待每一個階段都是局部最優(yōu)的選擇,從而達到全局最優(yōu),但是結果并不一定是最優(yōu)的 舉個零錢兌換的例子,如果你有1元、2元、5元的錢幣數(shù)張,用于兌換一定的金額,但是要求兌換的錢幣張數(shù)最少 如果現(xiàn)在你要兌換

    2024年04月28日
    瀏覽(31)
  • 說說你對選擇排序的理解?如何實現(xiàn)?應用場景?

    說說你對選擇排序的理解?如何實現(xiàn)?應用場景?

    選擇排序(Selection sort)是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進去都是? O(n2) 的時間復雜度,所以用到它的時候,數(shù)據(jù)規(guī)模越小越好 其基本思想是:首先在未排序的數(shù)列中找到最小(or最大)元素,然后將其存放到數(shù)列的起始位置 然后再從剩余未排序的元素中繼續(xù)尋找最

    2024年04月23日
    瀏覽(21)
  • 說說你對歸并排序的理解?如何實現(xiàn)?應用場景?

    說說你對歸并排序的理解?如何實現(xiàn)?應用場景?

    歸并排序(Merge Sort)是建立歸并操作上的一種有效,穩(wěn)定的排序算法,該算法是采用分治法的一個非常典型的應用 將已有序的子序列合并,得到完全有序的序列,即先使每個子序列有序,再使子序列段間有序 例如對于含有? n ?個記錄的無序表,首先默認表中每個記錄各為一

    2024年04月24日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包