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

圖表和應用

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

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

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]刪除
最新教學 更多>
  • 限制 Laravel 模型上的急切載重關係
    限制 Laravel 模型上的急切載重關係
    介紹 有時,當您渴望在 Laravel 模型上載入關係時,您可能想要限制返回的相關模型的數量。 例如,在部落格平台上,您可能想要載入系統中的每位作者及其三篇貼文。 在 Laravel 的舊版本中,限制急切加載的關係是一項有點繁瑣的任務。我從來沒有真正找到一種感覺正確的優雅方式來...
    程式設計 發佈於2024-11-07
  • 如何使用 GDB 在 C++ 中列印向量元素?
    如何使用 GDB 在 C++ 中列印向量元素?
    透過GDB 在C 中列印向量元素在GDB 中調試C 程式碼時,檢查std::vector 的內容可能具有挑戰性。例如,考慮一個名為 myVector 的 std::vector。我們如何有效地印製它的元素? 在 GCC 4.1.2 中,解決方案涉及存取向量的內部指標 myVector._M_impl...
    程式設計 發佈於2024-11-07
  • 如何在不同瀏覽器中自訂下拉清單寬度?
    如何在不同瀏覽器中自訂下拉清單寬度?
    IE 下拉清單寬度修改在Internet Explorer 中,下拉清單鏡像其保管箱的寬度,而在Firefox 中,它會適應內容。此限制需要擴展保管箱以容納最長的選擇,從而導致網頁美觀不美觀。 基於CSS 的可變寬度解決方案要克服此問題,使用CSS 允許下拉框和下拉列表使用不同的寬度,請考慮以下事項...
    程式設計 發佈於2024-11-07
  • 在 C++ 中格式化時如何右對齊輸出字串?
    在 C++ 中格式化時如何右對齊輸出字串?
    在C 中透過右對齊格式化輸出字串處理包含資料(例如座標)的文字檔案時,需要對齊列中的項目經常出現正確格式化的問題。在 C 中,輸出字串的操作對於實現這種對齊至關重要。本文解決了輸出字串右對齊的問題,提供了使用標準 C 技術的解決方案。 為了處理輸入文字文件,使用 line.split() 函數將每一...
    程式設計 發佈於2024-11-07
  • CSS 漸層產生器
    CSS 漸層產生器
    歡迎來到「免費 CSS 工具」系列。 在本系列中,我們將找到完全免費且易於使用的 CSS 工具。 在解釋瞭如何使用該工具後,我將與您分享該工具的連結。 工具連結:此工具可在 webdevtales.com 上取得 工具1:CSS漸層生成器 工具檢視: 介紹 歡迎使用 CSS 漸...
    程式設計 發佈於2024-11-07
  • 為什麼小型函數會讓你成為編碼英雄的原因
    為什麼小型函數會讓你成為編碼英雄的原因
    嘿,代碼愛好者們! ?您是否曾經發現自己迷失在無盡的線條海洋中,想知道一個功能在哪裡結束,另一個功能從哪裡開始?我們都去過那裡。今天,我們來談談為什麼將程式碼分解成更小的、可管理的區塊不僅僅是一種最佳實踐——它還能改變你的開發技能和職業生涯。 1.未來的你會感謝你 想像一下:現在是...
    程式設計 發佈於2024-11-07
  • JavaScript 變數名稱中美元符號的含義是什麼?
    JavaScript 變數名稱中美元符號的含義是什麼?
    為什麼在 JavaScript 變數名稱中使用美元符號? 提供的 JavaScript 程式碼包含一個名為「$item」的變量,該變數引發問題:變數名稱中美元符號的用途是什麼? 在 JavaScript 中,變數名稱前面的美元符號對於解譯器來說沒有特殊意義。它用作輕鬆識別包含 jQuery 物件的變...
    程式設計 發佈於2024-11-07
  • Laravel 中的授權 - 初學者指南
    Laravel 中的授權 - 初學者指南
    掌握 Laravel 中的授權:Gates 與策略類別 ?? 在現代 Web 應用程式中,控制誰可以存取或修改資源至關重要。例如,在部落格應用程式中,您可能希望確保只有貼文的擁有者才能編輯或刪除它。 Laravel 提供了兩種優雅的方式來處理授權:Gates 和 Policy Cl...
    程式設計 發佈於2024-11-07
  • Laravel 的枚舉
    Laravel 的枚舉
    報告 在我從事的一個專案中,有一個選擇欄位定義了不會更改的值。因此,為了列出此選擇中的項目,我決定建立一個枚舉類,然後描述這些值。但是,該項目需要支援英語和西班牙語,並且選擇選項的文本需要適應這一點,同時又不丟失對相應枚舉項的引用。換句話說,如果我選擇了“馬”這個項目,我需要係統知道這個項目仍然是“...
    程式設計 發佈於2024-11-07
  • \“模組 vs 主要:現代英雄 vs package.json 的復古傳奇!\”
    \“模組 vs 主要:現代英雄 vs package.json 的復古傳奇!\”
    什麼是模組字段? package.json 中的 module 欄位指定 ESM(ES6 模組) 的入口點。與為CommonJS 模組(require()) 設計的main 欄位不同,模組用於支援較新的ESM 標準的目標環境,例如JavaScript 捆綁程式(Webpack、Ro...
    程式設計 發佈於2024-11-07
  • 如何在 CSS 檔案中實現類似變數的行為?
    如何在 CSS 檔案中實現類似變數的行為?
    CSS 檔案中的變數宣告並使用在 CSS 中,通常需要在整個樣式表中重複使用特定值。雖然沒有明確的變數聲明語法,但有一些技術可以實現此功能。 一種方法是利用 CSS 選擇器和樣式規則。將相關樣式組合在單一規則下,您可以避免重複,同時澄清每種樣式的範圍。例如:/* Theme color: text ...
    程式設計 發佈於2024-11-07
  • 如何在 PHP 中編寫基本函數來從文字中刪除表情符號?
    如何在 PHP 中編寫基本函數來從文字中刪除表情符號?
    用 PHP 編寫一個簡單的 removeEmoji 函數處理線上文字通常需要刪除表情符號,特別是在 Instagram 評論等情況下。本文探討了針對這種需求的解決方案,利用 PHP preg_replace 函數來有效地消除給定文字中的表情符號。 removeEmoji 函數利用一系列正規表示式來匹...
    程式設計 發佈於2024-11-07
  • Slim 和 Flight PHP 框架比較
    Slim 和 Flight PHP 框架比較
    为什么要使用微框架? 在社交媒体上,新的 PHP 开发人员经常会问“我的项目应该使用什么框架”,通常给出的答案是“Laravel”或“Symfony”。 虽然这些都是不错的选择,但这个问题的正确答案应该是“你需要框架做什么?” 正确的框架应该能够满足您的需要,并且不会包含大量您永远...
    程式設計 發佈於2024-11-07
  • 如何建立您的第一個 Python 遊戲:使用 PyGame 創建簡單射擊遊戲的逐步指南
    如何建立您的第一個 Python 遊戲:使用 PyGame 創建簡單射擊遊戲的逐步指南
    Hi lovely readers, Have you ever wanted to create your own video game? Maybe you’ve thought about building a simple shooter game where you can move ar...
    程式設計 發佈於2024-11-07
  • 為什麼我的 Java JDBC 程式碼在連接到 Oracle 時拋出“IO 錯誤:網路適配器無法建立連線”?
    為什麼我的 Java JDBC 程式碼在連接到 Oracle 時拋出“IO 錯誤:網路適配器無法建立連線”?
    診斷Oracle JDBC「IO 錯誤:網路適配器無法建立連線」嘗試使用JDBC 執行簡單的Java 程式碼時要連線到Oracle資料庫,您可能會遇到神秘的錯誤「IO 錯誤:網路適配器無法建立連線」。這個令人費解的消息源於 JDBC 驅動程式的模糊術語,並且可能由各種根本原因造成。以下是一些可能導致...
    程式設計 發佈於2024-11-07

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

Copyright© 2022 湘ICP备2022001581号-3