¡Hola Euler! 圖資料庫的理論基礎:圖論

qing_yun發表於2022-04-19

¡Hola 是西班牙語的 Hello,讀作“尤拉”。

今天是 4 月 15 日,1707 年的今天,歷史上偉大的數學家之一 Leonhard Euler 出生。尤拉發明了許多現代數學術語和符號,並在微積分、分析、圖論、物理學、天文學和許多其他主題上取得了重要發現。

我也終於開始寫這樣一篇文章來介紹一下圖資料庫的理論基礎和本質:數學裡的圖論。我無法做到深入講解圖論,但是我跟你分享我的一些理解和發現。希望對你有幫助,點燃你對圖技術的興趣。

因為今天是 Euler 的生日,所以我們將今天作為#GlobalGraphCelebrationDay,感興趣的可以根據這個標籤找到更多的資訊。

1、圖論是什麼

不管你有沒有發現,在我們日常生活中,比如從家裡出發到公司的交通路線、電話或網際網路的裝置連線和互動方式、你的社交網路朋友圈、甚至神經元或元素的構成等等等等。這些例子都是由相互連線的事物組成。

1.1、圖和圖論的定義

在數學領域,類似這樣的例子可以使用圖(Graph)來表示,圖是由若干給定的頂點(Vertex)及連線兩頂點的邊(Edge)所構成的結構。圖用來描述事物之間的特定關係,頂點用來代表事物,邊用於表示兩個事物之間具有這種關係。

如圖所示,這是一個圖結構。

記住,圖結構是上面的樣子,而不是圖表(Chart)或影像(Image)哦。下面這個是圖表的例子。

根據定義,圖論(Graph Theory)是研究圖結構的數學分支,屬於離散數學,和群論、拓撲學等其他分支有著密切關係。

在計算機領域,使用圖資料結構來表示數學中的圖結構,是數學知識的具體應用。我們稍後會稍微詳細介紹一下。

普遍認為 Euler 是圖論的創始人,因為他使用圖的方法解決了著名的七橋問題。

1.2、七橋問題

傳說在 Euler 那個時代,當時東普魯士柯尼斯堡市區跨普列戈利亞河兩岸,河中心有兩個小島。小島與河的兩岸有七條橋連線。Euler 應該經常去散步,逛得有些厭煩了,所以提出了這麼一個問題:

在所有橋都只能走一遍的前提下,如何才能把這個地方所有的橋都走遍?

但 Euler 畢竟是數學家,反手就解決了這個問題,證明了沒有方法能夠一遍不重複地走完這七座橋,還發表了論文。

這也是有名的“一筆畫”問題。聰明的讀者你可以試試如何用一筆畫完成這幾個圖:

1.3、其他圖問題

除了七橋問題,還有很多著名的圖問題。

握手定理

您已被邀請與您的朋友一起參加一個精彩的生日派對。包括你自己和主人共有 5 人。晚上,當客人準備離開時,每個人都與其他人握手。一共有多少次握手?

四色定理

你知道嗎?只需要 4 種不同的顏色,就可以給一張地圖不同的區域著色,使得任何相鄰的區域的顏色都不相同。

旅行商問題

一個旅行商需要從自己城市出發,去拜訪客戶,如何做到訪問每個城市一次並返回自己的城市呢?

公共設施供應問題

在一個小村莊裡,有三間房屋和三座生產水、電和煤氣的公用設施。我們必須將每個房屋連線到每個公用設施,但由於村莊的佈局,不同的管道和電纜不允許交叉。

2、稍微深入圖資料結構

有了數學模型(圖論)的支撐,和解決數學模型的演算法一起,在計算機領域就可以用來解決實際問題了。資料結構對於開發人員非常重要,或許每天都在和不同的資料結構和演算法打交道。常見的資料結構由集合、線性、樹和圖等等。

2.1、多一些定義

前面給出了圖的定義,圖由頂點(Vertex)和邊(Edge)組成。我們表示圖結構就使用圓圈表示頂點,連線表示邊。這裡還有一些基本概念。理解這些概念對於掌握圖演算法非常有幫助。

2.2、無向圖

一個圖結構中,我們知道邊是連線兩個頂點的,不考慮邊有沒有方向的場景下,這樣的圖結構稱為無向圖。

2.3、有向圖

顧名思義,我們定義結構的時候決定了邊是有方向的,去和回是兩種不同的含義。這時的圖就稱為有向圖。

2.4、加權圖

邊有表示權重的值,這樣的邊稱為加權邊,這樣的圖就是加權圖。預設的圖沒有權重,就是未加權圖。

2.5、度(Degree)

度就是通向頂點的邊的數量。對於有向圖,還有入度和出度的概念,入度是指指向當前節點的邊的數量,出度是指從當前節點往外的邊的數量。

2.6、子圖

透過從一個圖裡篩選出頂點和邊而形成的新圖,稱為子圖。如圖所示彩色標註的就是子圖。

2.7、環(Cycle)

第一個頂點和最後一個頂點相同的圖稱為環。所有環都有相同數量的邊和頂點。

2.8、路徑(Path)

圖結構最重要的就是能夠很直觀表示從一個頂點到另一個頂點的路徑(Path),路徑表示從起點到終點的頂點序列,路徑可以是有方向或無方向的。

每個頂點訪問一次的路徑稱為簡單路徑。每條邊訪問一次的路徑稱為尤拉路徑。

3、稍微介紹一下圖演算法

3.1、圖遍歷(Traversal)或圖搜尋

圖遍歷是訪問或更新圖中每個頂點的過程。他們訪問頂點的順序用於對遍歷進行分類。實現圖遍歷有兩種方式,深度優先搜尋(DFS)和廣度優先搜尋(BFS)。

圖遍歷演算法通常是其他演算法的核心元件。

3.2、尋路演算法

基於圖遍歷,探索節點之間的路徑,一般用來搜尋最短路徑或最優路徑。

常見的有最小生成樹、Dijkstra 最短路徑、A*最短路徑,以及隨機遊走等等。

3.3、中心度演算法

中心度演算法在圖中找到重要的頂點,“重要”可能是有很多直接關聯、傳遞連線到其他頂點、透過幾跳達到其他頂點或位於很多路徑的最短路徑上。

常見的有度中心性、接近中心性、特徵向量中心性等。

還有 PageRank 也是一種中心度演算法哦。在我曾經做 SEO 的時候,就非常關注網頁的 PageRank 值。這背後的演算法就是基於圖的。

3.4、社群檢測演算法

社群的概念表示頂點的聚集,社群檢測演算法用來評估這樣的聚集或劃分,以及它們的加強或分裂的趨勢。

常見的演算法有強連通分量、Louvain、模組化最佳化和標籤傳播等等。

3.5、連結預測

這是一個很悠久的演算法,出名於社交網路分析:給定社交網路的快照,我們能否推斷出成員之間在未來將發生哪些新的互動?

連結預測可以用到 ML 機器學習的監督學習進行,可見圖演算法在 AI/ML 領域的發展前景非常可觀。

3.6、連通特徵提取

進入 ML 機器學習時代,我們的特徵工程是非常耗時的,因為圖的連通特性,具備上下文和關聯,因此在特徵提取方面大顯身手。

3.7、圖嵌入

在 AI/ML 和深度學習中,使用的資料通常是二維向量,很難直接使用圖資料結構。圖嵌入就是為了將圖結構表示為低維度的向量,便於在深度學習中使用。

4、圖資料庫

所以,什麼是圖資料庫?跟圖論、圖資料結構和演算法有什麼關係?

從圖結構來看,圖演算法就是基於圖結構專門設計的,也可以看到在很多實際問題中,很自然地就可以用圖結構來表示。

所以,圖資料庫提供了兩方面的能力:圖資料結構的儲存,和圖演算法的支援。以此來實現使用圖的方式來解決實際問題。

4.1、圖資料模型

在圖資料庫中,對於圖結構的儲存也有不同的方法。

我最喜歡的就是標籤屬性圖(LPG:Labeled Property Graph),它非常直觀的反應了現實問題的結構,無論從業務分析還是資料建模,以及到查詢,都能很直觀的進行。

另一種結構是RDF(資源描述框架,Resource Description Framework),RDF 使用三元組來表示,是 W3C 的語義網路標準。

4.2、圖資料的儲存方式

圖資料結構常用三種方式來表示:鄰接列表、鄰接矩陣和關聯矩陣。

不同的圖資料庫對於圖資料的儲存也不同,比如有的在另一種 NoSQL 庫裡儲存圖資料。

這裡需要提到一個概念是原生圖儲存,表示儲存架構專門為圖資料結構而設計和構建。能夠在各個方面針對圖資料結構進行最佳化。另一方面,原生圖儲存使用無索引鄰接(Index-free Adjacency)來實現資料的查詢和處理。

4.3、圖資料庫的使用場景

從前面提到圖問題裡可以看到,現實中有很多場景非常適合圖資料技術。

在這裡以 Neo4j 的使用場景為例,可以看到能夠覆蓋眾多場景,感興趣的歡迎進一步瞭解。

5、結束

今天(4月15日)是著名數學家尤拉的誕生日,讓我們從瞭解圖論開始進入圖的世界吧。

本文介紹了圖論和圖資料結構的基本概念,還介紹了圖的一系列演算法,以及圖資料庫在儲存和演算法方面的支援。還看了一些圖資料庫及圖技術的使用場景。

歡迎交流和進一步討論這個話題哦。

有興趣的還可以訪問這個網站了解數學家和他們的故事。

5.1、參考資源

來自 “ Neo4j ”, 原文作者:Shiny 亮小豬;原文連結:https://mp.weixin.qq.com/s/XDD4rb0vR2Xa2104bwIVjA,如有侵權,請聯絡管理員刪除。

相關文章