」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 圖表和應用

圖表和應用

發佈於2024-08-24
瀏覽:233

許多現實世界的問題可以使用圖演算法來解決。圖對於建模和解決現實問題很有用。例如,找到兩個城市之間的最少航班數量的問題可以使用圖來建模,其中頂點代表城市,邊代表兩個相鄰城市之間的航班​​,如下圖所示。求最小聯程航班數的問題
兩個城市之間的問題簡化為尋找圖中兩個頂點之間的最短路徑。

Graphs and Applications

圖問題的研究稱為圖論。圖論由 Leonhard Euler 於 1736 年創立,當時他引入圖術語來解決著名的柯尼斯堡七橋問題。普魯士柯尼斯堡市(現為俄羅斯加里寧格勒)被普雷格爾河分開。河上有兩個島嶼。城市和島嶼由七座橋樑連接,如下圖(a)所示。問題是,一個人可以步行,每座橋只過一次,然後回到起點嗎?歐拉證明這是不可能的。

Graphs and Applications

為了建立證明,歐拉首先透過消除所有街道來抽象化柯尼斯堡城市地圖,產生如上圖 (a) 所示的草圖。接下來,他將每個陸塊替換為一個點,稱為頂點節點,並將每座橋替換為一條線,稱為,如圖所示上圖(b)。這種具有頂點和邊的結構稱為 .

看圖,我們問是否存在一條從任意頂點出發,恰好遍歷所有邊一次,並返回到起始頂點的路徑。歐拉證明,要存在這樣的路徑,每個頂點都必須有偶數條邊。因此,柯尼斯堡七橋問題無解。

圖問題通常使用演算法來解決。圖算法在電腦科學、數學、生物學、工程、經濟學、遺傳學和社會科學等各個領域都有許多應用。

基本圖形術語

圖由頂點和連接頂點的邊組成。本章不假設您具備任何圖論或離散數學的先驗知識。我們使用簡單明了的術語來定義圖表。

Graphs and Applications

什麼是圖表?圖是一種數學結構,表示現實世界中實體之間的關係。例如,上圖代表城市之間的航班​​,下圖(b)代表陸地之間的橋樑。

Graphs and Applications

圖由一組非空頂點(也稱為節點或點)和一組連接頂點的邊組成。為了方便起見,我們將圖形定義為 G = (V, E),其中 V 表示一組頂點,E 表示一組邊。例如下圖的V和E如下:

Graphs and Applications

V = {"西雅圖", "舊金山", "洛杉磯",
「丹佛」、「堪薩斯城」、「芝加哥」、「波士頓」、「紐約」、
「亞特蘭大」、「邁阿密」、「達拉斯」、「休士頓」};

E = {{"西雅圖", "舊金山"},{"西雅圖", "芝加哥"},
{“西雅圖”,“丹佛”},{“舊金山”,“丹佛”},
...
};

圖可以是有向的,也可以是無向的。在有向圖中,每條邊都有一個方向,這表示您可以透過邊從一個頂點移動到另一個頂點。您可以使用有向圖來建模父/子關係,其中從頂點 A 到 B 的邊表示 A 是 B 的父項。下圖 (a) 顯示了有向圖。

Graphs and Applications

無向圖中,您可以在頂點之間雙向移動。下圖是無向圖。

Graphs and Applications

邊可以加權也可以不加權。例如,您可以為上圖中圖表中的每條邊分配一個權重,以指示兩個城市之間的飛行時間。

圖中的兩個頂點被稱為相鄰如果它們由同一條邊連接。類似地,如果兩邊連接到同一頂點,則稱它們是相鄰。圖中連接兩個頂點的邊稱為與兩個頂點關聯。頂點的是與其相關的邊的數量。

兩個頂點如果相鄰,則稱為鄰居。類似地,如果兩邊相鄰,則稱為 鄰居

A 循環是將頂點連結到自身的邊。如果兩個頂點由兩條或多條邊連接,這些邊稱為平行邊簡單圖是沒有任何環或平行邊的圖。在完全圖中,每兩對頂點都是相連的,如下圖(b)所示。

Graphs and Applications

若圖中任兩個頂點之間存在路徑,則該圖是連通的。圖G的子圖是一個圖,其頂點集是G的子集,邊集是G的子集。例如,上圖(c)的圖是上圖(b)的子圖。

假設該圖是連通且無向的。 循環是一條從某個頂點開始並在同一頂點結束的閉合路徑。如果連通圖沒有環,則它是。圖G的生成樹是G的連通子圖,且此子圖是包含G中所有頂點的樹。

版本聲明 本文轉載於:https://dev.to/paulike/graphs-and-applications-54lo?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-05-24
  • Java為何無法創建泛型數組?
    Java為何無法創建泛型數組?
    通用陣列創建錯誤 arrayList [2]; JAVA報告了“通用數組創建”錯誤。為什麼不允許這樣做? 答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<my...
    程式設計 發佈於2025-05-24
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-05-24
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-05-24
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-05-24
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&華儀的函數時,在接受成員函數指針的函數時,要在函數上既要提供指針又可以提供指針和指針到函數的函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此...
    程式設計 發佈於2025-05-24
  • Java中假喚醒真的會發生嗎?
    Java中假喚醒真的會發生嗎?
    在Java中的浪費喚醒:真實性或神話? 在Java同步中偽裝喚醒的概念已經是討論的主題。儘管存在這種行為的潛力,但問題仍然存在:它們實際上是在實踐中發生的嗎? Linux的喚醒機制根據Wikipedia關於偽造喚醒的文章,linux實現了pthread_cond_wait()功能的Linux實現,...
    程式設計 發佈於2025-05-24
  • 如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    程式設計 發佈於2025-05-24
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-05-24
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-05-24
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-05-24
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-05-24
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-05-24
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-05-24
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-05-24

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3