數據結構—圖的應用

6.4圖的應用

概念回顧—生成樹

生成樹:所有頂點均由邊連接在一起,但不存在回路的圖。

(六)最小生成樹的實現 - 知乎

  • 一個圖可以有許多棵不同的生成樹、
  • 含有n個頂點 n-1 條邊的圖不一定是生成樹
  • 所有生成樹具有以下共同特點
    • 生成樹的頂點個數與圖的頂點個數相同;
    • 生成樹是圖的極小連通子圖,去掉一條邊則非連通;
    • 一個有n個頂點的連通圖的生成樹有 n-1 條邊;
    • 在生成樹中再加一條邊必然形成回路。
    • 生成樹中任意兩個頂點間的路徑是唯一的;

6.4.1無向圖的生成樹

Word排版成樹形結構技巧

? 設圖G=(V,E)是個連通圖,當從圖任一頂點出發遍歷圖G時,將邊集E(G)分層兩個集合T(G)和B(G)。其中T(G)是遍歷圖時所經過的邊的集合,B(G)是遍歷圖時未經過的邊的集合。顯然,G1(V,T)是圖G的極小連通子圖。即子圖G1是連通圖G的生成樹。

6.4.2最小生成樹

算法設計與分析之最小生成樹問題_W_Tortoise的博客-CSDN博客_最小生成樹問題

最小生成樹:給定一個無向網絡,在該網的所有生成樹中,使得各邊權值之和最小的那棵生成樹成為該網的最小生成樹,也叫最小代價生成樹

1、構造最小生成樹

構造最小生成樹的算法很多,其中多數算法都利用了MST的性質。

MST性質:設N=(V,E)是一個連通網,U是頂點集V的一個非空子集。若邊(u,v)是一條具有最小權值的邊,其中u∈U,v∈V-U,則必存在一棵包含邊(u,v)的最小生成樹。

最小生成樹概念及其構建(Prim算法、Kruskal算法)_serendipityLB的博客-CSDN博客_最小生成樹概念

MST性質解釋:

? 在生成樹的構造過程中,圖中n個頂點分屬兩個集合:

  • 已落在生成樹上的頂點集:U

  • 尚未落在生成樹上的頂點集:V-U

    接下來則應在所有連通U中頂點和V-U中頂點的邊中選取權值最小的邊。

2、構造最小生成樹算法
普里姆(Prim)算法

數據結構中的算法 - 作業部落 Cmd Markdown 編輯閱讀器

算法思想

  • 設N=(V,E)是連通網,TE是N上最小生成樹中邊的集合。
  • 初始令U={u0},(u0∈V),TE={}。
  • 在所有u∈U,v∈V-U的邊(u,v)∈E中,找一條代價最小的邊(u0,v0)。
  • 將(u0,v0)并入集合TE,同時v0并入U。
  • 重復上述操作直至U=V為止,則T=(V,TE)為N的最小生成樹。
克魯斯卡爾(Kruskal)算法

img

算法思想

  • 設連通圖N=(V,E),令最小生成樹初始狀態只有n個頂點而無邊的非連通圖T=(V,{}),每個頂點自成一個連通分量。
  • 在E中選取代價最小的邊,若該邊依附的頂點落在T中不同的連通分量上(即:不能形成環),則將此邊加入到T中;否則,舍去此邊,選取下一條代價最小的邊。
  • 依此類推,直至T中所有頂點都在同一連通分量上為止。

最小生成樹可能不唯一

兩種算法比較
算法名普里姆算法克魯斯卡爾算法
算法思想選擇點選擇邊
時間復雜度O(n2) (n為頂點數)O(eloge) (e為邊數)
適應范圍稠密圖稀疏圖

6.4.3最短路徑

典型用途:交通網絡的問題—從甲地到乙地之間是否有公路連通?在有多條通路的情況下,哪一條路最短?

數據結構與算法—單源最短路徑dijkstra算法 - 知乎

交通網絡用有向網來表示:

頂點——表示地點

弧——表示兩個地點有路連通,

弧上的權值——表示兩地點之間的距離,交通費或途中所花費的時間等。

? 如何能夠使一個地點到另一個地點的運輸時間最短或運費最省?這就是一個求兩個地點間的最短路徑問題。

問題抽象:在有向網中A點(源點)到達B點(終點)的多條路徑中個,尋找一條各邊權值之和最小的路徑,即最短路徑。

? 最短路徑與最小生成樹不同,路徑上不一定包含n個頂點,也不一定包含n-1條邊。

第一類問題:兩點間最短路徑

數據結構之圖(八)——最短路徑問題_我有最短的最短的長度和最短路徑圖_daocaoren_的博客-CSDN博客

第二類問題:某源點到其他各點最短路徑

img

[最短路徑問題]Dijkstra算法(含還原具體路徑) - 技術經驗 - W3xue

兩種常見的最短路徑問題:

  1. 單源最短路徑—用**Dijkstra(迪杰斯特拉)**算法
  2. 所有頂點間的最短路徑—用**Floyd(弗洛伊德)**算法
1、Dijkstra算法
  • 初始化:先找出從源點v0到各終點vk的直達路徑(v0,vk),即通過一條弧到達的路徑。

  • 選擇:從這些路徑中找出一條長度最短的路徑(v0,u)

  • 更新:然后對其余各條路徑進行適當的調整:

    • 若在圖中存在弧(u,vk),且(v0,u)+(u,vk)<(v0,vk),則以路徑(v0,u,vk)代替(v0,vk)。
  • 在調整后的各條路徑中,再找長度最短的路徑,依此類推。

迪杰斯特拉(Dijkstra)算法:按路徑長度遞增次序產生最短路徑。

  1. 把V分成兩組:

    • S:已求出最短路徑的頂點的集合。
    • T=V-S:尚未確定最短路徑的頂點集合。
  2. 將T中頂點按最短路徑遞增的次序加入到S中。

    保證(1)從源點v0到S中各頂點的最短路徑長度都不大于從v0到T中任何頂點的最短路徑長度。

    ? (2)每個頂點對應一個距離值:

    ? S中頂點:從v0到此頂點的最短路徑長度。

    ? T中頂點:從v0到此頂點的只包括S中頂點作中間頂點的最短路徑長度。

所有頂點間的最短路徑

方法一:每次以一個頂點為源點,重復執行Dijkstra算法n次。

方法二:弗洛伊德(Floyd)算法。

2、Floyd算法

算法思想

  • 逐個頂點試探
  • 從vi到vj的所有可能存在的路徑中
  • 選出一條長度最短的路徑

例如:采用Floyd算法,求圖中各頂點之間最短路徑

img

求最短路徑步驟:

? 初始時設置一個n階方陣,令其對角線元素為0,若存在弧<vi,vj>,則對應元素為權值,否則為∞

? 逐步試著在原直接路徑中增加中間頂點,若加入中間頂點后路徑變短,則修改之;否則,維持原值。所有頂點試探完畢,算法結束。

6.4.4拓撲排序

1、有向無環圖

有向無環圖:無環的有向圖,簡稱DAG圖(Directed Acycline Graph)

有向無環圖的應用—AOV網 和 拓撲排序-阿里云開發者社區

? 有向無環圖常用來描述一個工程或系統的進行過程。(通常把計劃、施工、生產、程序流程等當成是一個工程)

? 一個工程可以分為若干個子工程,只要完成了這些子工程(活動),就可以導致整個工程的完成。

**AOV網:**拓撲排序

? 用一個有向圖表示一個工程的各子工程及其相互制約的關系,其中以頂點表示活動,弧表示活動之間的優先制約關系,稱這種有向圖為頂點表示活動的網,簡稱AOV網(Activity Vertex network)。

數據結構——拓撲排序+關鍵路徑 - 嗶哩嗶哩

? 特點:

  • 若從 i 到 j 有一條有向路徑,則 i 是 j 的前驅;j 是 i 的后繼。
  • 若<i,j>是網中有向邊,則 i 是 j 的直接前驅;j 是 i 的直接后繼。
  • AOV網中不允許有回路,因為如果有回路存在,則表明某項活動以自己為先決條件,顯然這是荒謬的。

問題:如何判別AOV網中是否存在回路?

**AOE網:**關鍵路徑

? 用一個有向圖表示一個工程的各子工程及其相互制約的關系,以弧表示活動,以頂點表示活動的開始或結束事件,稱這種有向圖為邊表示活動的網,簡稱為AOE網(Activity On Edge)。

拓撲排序

? 在AOV網沒有回路的前提下,我們將全部活動排列成一個線性序列,使得若AOV網中有弧<i,j>存在,則在這個序列中,i 一定排在 j 的前面,具有這個性質的線性序列稱為拓撲有序序列,相應的拓撲有序排序的算法稱為拓撲排序

拓撲排序的方法

  • 在有向圖中選一個沒有前驅的頂點且輸出之。
  • 從圖中刪除該頂點和所有以它為尾的弧。
  • 重復上述兩步,直至全部頂點均已輸出;或者當圖中不存在無前驅的頂點為止。

圖(五)——AOV網的拓撲排序與AOE網的關鍵路徑_大前端程序員的自我修養-CSDN博客

一個AOV網的拓撲序列不是唯一的

檢測AOV網中是否存在環方法:

? 對有向圖構造其頂點的拓撲有序序列,若網中所有頂點都在它的拓撲有序序列中,則該AOV網必定不存在環。

數據結構與算法-圖解版 | Laravel China 社區

關鍵路徑

img

? 把工程計劃表示為邊表示活動的網絡,即AOE網,用頂點表示事件,弧表示活動,弧的權表示活動持續時間

事件表示在它之前的活動已經完成,在它之后的活動可以開始。

對于AOE網,我們關心兩個問題:

  1. 完成整項工程至少需要多少時間?
  2. 那些活動是影響工程進度的關鍵?

關鍵路徑——路徑長度最長的路徑。

路徑長度——路徑上各活動持續時間之和。

如何確定關鍵路徑,需要定義4個描述量:

10分鐘了解關鍵路徑及如何求得關鍵路徑_壯壯不太胖^QwQ的博客-CSDN博客_關鍵路徑怎么求

ve(vj)——表示事件 vj 的最早發生時間。

? 例如:ve(v1)=0 ve(v2)=30

vl(vj)——表示事件 vj 的最遲發生時間。

? 例如:vl(v4)=165

e(i)——表示活動 ai 的最早開始時間。

? 例如:e(a3)=30

l(i)——表示活動 ai 的最遲開始時間。

? 例如:l(a3)=120

l(i) - e(i)——表示完成活動 ai 的時間余量。

? 例如:l(3) - e(3)=90

關鍵活動——關鍵路徑上的活動,即 l(i)==e(i)(即l(i) - e(i) == 0)的活動。

10分鐘了解關鍵路徑及如何求得關鍵路徑_壯壯不太胖^QwQ的博客-CSDN博客_關鍵路徑怎么求

關鍵路徑的討論

10分鐘了解關鍵路徑及如何求得關鍵路徑_壯壯不太胖^QwQ的博客-CSDN博客_關鍵路徑怎么求

  1. 若網中有幾條關鍵路徑,則需加快同時在幾條關鍵路徑上的關鍵活動。

    如:a11,a10,a8,a7。

  2. 如果一個活動處于所有的關鍵路徑上,那么提高這個活動的速度,就能縮短整個工程的完成時間。如:a1、a4。

  3. 處于所有的關鍵路徑上的活動完成時間不能縮短太多,否則會使原來的關鍵路徑變成不是關鍵路徑。這時,必須重新尋找關鍵路徑。如:a1由6天變成3天,就會改變關鍵路徑。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何運用小程序技術閉環運營鏈路?

如何通過線上小程序獲取用戶線索&#xff0c;提高企業抗風險能力&#xff0c;建立有效的營銷數字化系統一直是困擾每一個小程序開發者與運營者的問題。 當我們選擇使用小程序設計自己的運營流程時&#xff0c;從「推廣」到「轉化」&#xff0c;再到最終的「留存」都是運營過程…

ABeam×Startup丨德碩管理咨詢(深圳)創新研究團隊前往靈境至維·既明科技進行拜訪交流

近日&#xff0c;德碩管理咨詢&#xff08;深圳&#xff09;&#xff08;以下簡稱“ABeam-SZ”&#xff09;創新研究團隊一行前往靈境至維既明科技有限公司&#xff08;以下簡稱“靈境至維”&#xff09;進行拜訪交流&#xff0c;探討線上虛擬空間的商業模式。 現場合影 &…

前臺測試轉后臺優化歷險記,應屆生薪資8K逆襲,從此扶搖直上九萬里!

優橙教育每一期都會有不少從前臺測試轉到后臺的小伙伴應邀而來&#xff0c;其實每個人的經歷都是大致相同的&#xff0c;這時候肯定會有很多小伙伴問&#xff0c;為什么出來花錢出來參加培訓而不是在項目上轉呢&#xff1f; 或許是因為在項目上摸爬滾打太久了&#xff0c;吃不下…

Qt掃盲-QWidget理論使用總結

QWidget理論使用總結 一、概述二、頂層 控件 和子 控件三、復合控件四、自定義控件和繪制五、大小提示和大小策略六、事件七、一組函數和屬性八、QWidget樣式表九、透明度和雙緩沖十、創建半透明窗口 一、概述 widget 是用戶界面的最小單位&#xff1a;它從window系統接收鼠標…

Jsoup爬取簡單信息

1. 豆瓣圖書最受關注 1.1 創建SpringBoot項目或者Maven項目 1.2 引入jsoup <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3<…

Qt應用開發(基礎篇)——堆棧窗口 QStackedWidget

一、前言 QStackedWidget繼承于QFrame&#xff0c;QFrame繼承于QWidget&#xff0c;是Qt常用的堆棧窗口部件。 框架類QFrame介紹 QStackedWidget堆棧窗口&#xff0c;根據下標切換&#xff0c;一次顯示一個小部件&#xff0c;常用于應用界面切換、圖片輪詢播放等場景。 二、QSt…

用Java調用C#的WebService接口

這是一個用Java調用C#版程序的例子,廢話不多說,上代碼: C#接口代碼: using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Services.Description;[WebService(Namespace = " http://www.ta…

如何在Springboot項目中讀取zip壓縮包并且把文件導出成zip壓縮包

文章目錄 設想場景實現流程小結 設想場景 為方便老師錄入大量學生圖片信息&#xff0c;在添加照片時&#xff0c;學生的相關資料以身份證號碼圖片描述命名如 &#xff08;1231231234567一寸照片.jpg&#xff09; &#xff08;1231231234567身份證正面照片.jpg&#xff09; &am…

中小企業體育代言:探索費用策略與實際操作

隨著體育市場的不斷擴大和企業品牌的不斷提升&#xff0c;中小型企業正逐漸將目光投向了體育明星代言&#xff0c;希望通過這一策略來提升品牌知名度、美譽度&#xff0c;進而吸引目標消費者的注意力并提升銷售量。然而&#xff0c;中小型企業請體育明星代言的費用究竟是多少呢…

docker 離線模式-部署容器

有網絡的情況下下載需要的鏡像 比如(下面以tomcat為例子&#xff0c;其他鏡像類似) docker pull tomcat打包鏡像文件到本地 docker save tomcat -o tomcat.tar將tomcat.tar 上傳到內網服務器&#xff08;無外網環境&#xff09; 導入鏡像 docker load -i tomcat.tar創建容器…

element-ui的el-dialog,簡單的封裝。

el-dialog是使用率很高的組件 使用el-dialog很多都是按照文檔的例子&#xff0c;用一個變量控制是否顯示&#xff0c;再來一個變量控制標題。 如果我這個對話框多個地方使用的話還要創建多個變量&#xff0c;甚至關閉之后還要清空一些變量&#xff0c;應該可以簡化一點。我寫…

Windows Hyper-V Ubuntu 22.04 LTS安裝

文章目錄 Ubuntu準備Hyper-V啟用虛擬化支持services.msc 打開服務列表&#xff0c;關注Hyper-V服務是否啟動打開管理器創建虛擬機 啟動備份 Ubuntu 下載Ubuntu-Desktop&#xff0c;這是個iso文件。 準備 20GB以上的磁盤空間&#xff0c;ubuntu安裝后的虛擬磁盤文件超過15GB一…

C/C++test兩步完成CMake項目靜態分析

您可能一直在靜態分析中使用CMake。但您是否嘗試過將Parasoft C/Ctest與CMake一起使用嗎&#xff1f;以下是如何使用C/Ctest在基于CMake的項目中運行靜態分析的詳細說明。 CMake是用于構建、測試和打包軟件的最流行的工具之一。Parasoft C/Ctest通過簡化構建管理過程&#xff…

【Minecraft】Fabric Mod開發完整流程1 - 環境配置與第一個物品

前言 Fabric 是 Minecraft 一款非官方的模組 API,與 Forge mod 不同。它以輕量級和高性能為設計目標,專注于支持新版本的 Minecraft。 Fabric 和 Forge 在各自的加載編譯流程上差別很大&#xff0c;所以你很難看見有同時支持二者的 mod&#xff0c;除非做了兼容性處理 Fabri…

【Java筆記】對象存儲服務MinIO

1 MinIO簡介 MinIO基于Apache License v2.0開源協議的對象存儲服務&#xff0c;可以做為云存儲的解決方案用來保存海量的圖片&#xff0c;視頻&#xff0c;文檔。由于采用Golang實現&#xff0c;服務端可以工作在Windows,Linux, OS X和FreeBSD上。配置簡單&#xff0c;基本是復…

mac-右鍵-用VSCode打開

1.點擊訪達&#xff0c;搜索自動操作 2.選擇快速操作 3.執行shell腳本 替換代碼如下&#xff1a; for f in "$" doopen -a "Visual Studio Code" "$f" donecommand s保存會出現一個彈框&#xff0c;保存為“用VSCode打開” 5.使用

基于百度語音識別API智能語音識別和字幕推薦系統——深度學習算法應用(含全部工程源碼)+測試數據集

目錄 前言總體設計系統整體結構圖系統流程圖 運行環境模塊實現1. 數據預處理2. 翻譯3. 格式轉換4. 音頻切割5. 語音識別6. 文本切割7. main函數 系統測試工程源代碼下載其它資料下載 前言 本項目基于百度語音識別API&#xff0c;結合了語音識別、視頻轉換音頻識別以及語句停頓…

【人工智能124種任務大集合】-集齊了自然語言處理(NLP),計算機視覺(CV),語音識別,多模態等任務

大家好&#xff0c;我是微學AI&#xff0c;今天給大家介紹一下人工智能124種任務大集合&#xff0c;任務集合主要包括4大類&#xff1a;自然語言處理&#xff08;NLP&#xff09;、計算機視覺&#xff08;CV&#xff09;、語音識別、多模態任務。 我這里整理了124種應用場景任…

JavaScript基礎之基于數據類型和引用數據類型

原文合集地址如下&#xff0c;有需要的朋友可以關注 本文地址 數據類型 JavaScript的數據類型有7中&#xff0c;包括6個基本類型和一個引用類型 基本數據類型&#xff1a;number, string, boolean, null, undefined, symbol 引用數據類型&#xff1a;object&#xff08;數組…

工業物聯網數據橋接教程:Modbus 橋接到 MQTT

Modbus 介紹 Modbus 是一種串行通信協議&#xff0c;用于連接工業自動化設備&#xff0c;最初由 Modicon 公司開發&#xff0c;誕生于 1979 年&#xff0c;現在已成為通用的通訊標準之一&#xff0c;廣泛用于工業自動化場景。 Modbus 采用主從模式&#xff0c;支持多種傳輸方…