從數據結構到算法:圖網絡方法初探

2021-01-08 機器之心Pro

機器之心原創

作者:朱梓豪

編輯:Qing Lin

如果說 2019 年機器學習領域什麼方向最火,那麼必然有圖神經網絡的一席之地。其實早在很多年前,圖神經網絡就以圖嵌入、圖表示學習、網絡嵌入等別名呈現出來,其實所有的這些方法本質上都是作用在圖上的機器學習。本文將根據近兩年的綜述對圖網絡方法做一個總結,為初入圖世界的讀者提供一個總體的概覽。

本文作者朱梓豪為中科院信工所在讀碩士,主要研究方向為圖神經網絡、視覺問答、視覺對話等。

什麼是圖

圖是一種常見的數據結構,用於表示對象及其之間的關係。其中,對象又稱節點(node)或頂點(vertex),關係用邊(edge)來描述。在數學上一般用 G=(V,E,A,X) 來表示,其中 V={v1,v2……,vn} 是節點集合,E=e_ij 表示邊的集合,A 是大小為|V|×|V|的鄰接矩陣,用於表示節點之間的連接關係,如果 e_ij∈E,則 A_ij=1,X 是大小為|V|×d 的特徵矩陣,X 的第 i 行 X_i:表示第 i 個節點的屬性特徵,其中 d 是屬性的維度。

為何需要在圖上應用機器學習方法

圖是一種描述和建模複雜系統的通用語言,在真實世界中無處不在。例如,Facebook、 Twitter 等社交媒體構成了人類之間的社交網絡 (Social Network);人體中的蛋白質分子構成了生物網絡 (Biological Network);各種移動終端構成了通信網絡 (Communication Network);智能硬體之間構成了物聯網 (Internet-of-Things) 、城市間的公路、鐵路、航線構成了運輸網絡 (Transportation Network) 等等。因此也催化出一系列在圖上進行數據挖掘的任務,如為用戶推薦感興趣的好友、判斷蛋白質結構、預測交通流量、檢測異常帳戶等等。但是真實圖的數據量龐大,動輒上億節點、而且內部拓撲結構複雜,很難將傳統的圖分析方法如最短路徑、DFS、BFS、PageRank 等算法應用到這些任務上。鑑於機器學習在圖像、文本領域的廣泛應用,一部分研究者嘗試將機器學習方法和圖數據結合起來,逐漸成為機器學習領域的一股熱潮。

網絡表示學習、圖嵌入的定義

俗話說「巧婦難為無米之炊」,再強大的機器學習算法也需要數據進行支持。在同樣的數據集和任務上,由於特徵的不同,同一個算法的結果也可能會有天壤之別。由於特徵的選擇對結果的決定性作用,很多數據挖掘方面的研究工作把重心放到了針對特定的數據由人工設計出有價值的特徵上。

深度學習本質上是一種特徵學習方法,其思想在於將原始數據通過非線性模型轉變為更高層次的特徵表示,從而獲得更抽象的表達。與人工設計特徵不同,深度學習會自動從數據中學習出特徵表示,所以又稱為表示學習(Representation Learning)。如圖像分類,輸出的一張高維的圖片,經過一系列的卷積池化等操作,低層可以抽取出低級的特徵(輪廓、顏色)、較深的層會根據低級特徵學習到更高級的特徵,然後變換成一個向量通過全連接層進行分類,這個向量就是輸入圖像的特徵表示。

一個很自然的想法就是,既然直接在圖上直接應用機器學習方法比較困難,那麼能否先將節點或邊用低維向量表示出來,然後在這些向量上應用已經很成熟的機器學習算法。這種將圖中節點嵌入到低維歐式空間中的方法就叫做圖嵌入(Graph Embedding)。

其實、圖嵌入、網絡嵌入、圖表示學習、網絡表示學習這些名詞指的的都是同一個概念。給定圖$G=(\mathbf{V,E,A,X})$,圖嵌入需要學習從節點到向量的映射:$f:v_i\to \mathbf{y}_i \in R^d$,其中$d<<|V|$,$f$需要儘可能的保留住節點的結構信息和屬性信息。

圖嵌入方法的分類

圖數據最大的特點在於節點之間存在著連結關係,這表明圖中節點之間並非完全獨立。除了節點間的連結關係,節點自身也可能含有信息,比如網際網路中網頁節點對應的文本信息,這些特性使得圖嵌入需要考慮很多的因素。從訓練所需的信息來看,一般有三種主要的信息源:圖結構、節點屬性和節點標籤,可基於此分成無監督圖嵌入和半監督圖嵌入;還有一種是根據輸入數據的不同進行劃分,比如按照邊的方向性、是否是異構網絡等性質。然而這兩種劃分依據並不合適,因為當前圖嵌入算法的主要區別在於算法類型,同一算法類型下的框架都是相似的,因此本文基於 Hamilton 等 [1] 和 Goyal 等 [2] 兩篇關於圖嵌入的綜述,將圖嵌入方法概括為基於矩陣分解的圖嵌入、基於隨機遊走的圖嵌入、基於神經網絡的圖嵌入(即圖神經網絡)。

基於矩陣分解的圖嵌入

基於矩陣分解的方法是將節點間的關係用矩陣的形式加以表示,然後分解該矩陣以得到嵌入向量。通常用於表示節點關係的矩陣包括鄰接矩陣、拉普拉斯矩陣、節點轉移概率矩陣、節點屬性矩陣等。根據矩陣的性質不同適用於不同的分解策略。主要包括 Local Linear Embedding(LLE)[3]、Laplacian Eigenmaps[4]、SPE[5]、GraRep[6] 等。

LLE 算法其實是流形學習的一種,LLE 算法認為每一個數據點都可以由其鄰域節點的線性加權組合構造得到。降維到低維空間後,這種線性關係仍然得到保留。Laplacian Eigenmaps 和 LLE 有些相似,直觀思想是希望相互間有關係的點(在圖中相連的點)在降維後的空間中儘可能的靠近。為了使得輸入圖的嵌入是低維表示並且保留圖全局拓撲結構,Shaw 等 [5] 提出在歐式空間中嵌入圖的結構保留嵌入方法(SPE,Structure Preserving Embedding),學習由一組線性不等式約束的低秩核矩陣,用於捕獲輸入圖結構。SPE 在圖的可視化和無損壓縮方面獲得明顯改善,優於 Laplacian Eigenmaps 等方法。Cao 等 [6] 認為考慮節點之間的 k 階關係對把握網絡的全局特徵非常重要,考慮越高階的關係,得到的網絡表示效果會越好。GraRep 通過 SVD 分解分別學習節點的 k 階表示,然後將其結合起來作為最終的表示,這樣可以很好地捕捉到遠距離節點之間的關係。

基於隨機遊走的方法

隨機遊走方法已經被用來近似圖的許多屬性,包括節點中心性和相似性等。當圖的規模特別大或者只能觀察到部分圖的時候,隨機遊走就變得非常有用。有研究者提出了利用圖上隨機遊走來獲取節點表示的嵌入技術,其中最著名的就是 DeepWalk[7] 和 node2vec[8]。

DeepWalk 是基於 word2vec 詞向量提出來的。word2vec 在訓練詞向量時,將語料作為輸入數據,而圖嵌入輸入的是整張圖,兩者看似沒有任何關聯。但是 DeepWalk 的作者發現,預料中詞語出現的次數與在圖上隨機遊走節點被訪問到底的次數都服從冪律分布。因此 DeepWalk 把節點當做單詞,把隨機遊走得到的節點序列當做句子,然後將其直接作為 word2vec 的輸入來得到節點的嵌入表示。其框架如圖 1 所示,首先採用隨機遊走的方法產生標準的輸入序列,用 SkipGram 模型對序列建模得到節點的向量表示,然後使用分層 softmax 解決節點高維度輸出問題。DeepWalk 模型的提出為圖嵌入提出了一種新的研究思路,也算是引發了對圖嵌入研究的熱潮。

圖一

node2vec 通過改變生成隨機遊走序列的方式改進了 DeepWalk 算法。DeepWalk 是按照均勻分布隨機選取隨機遊走序列的下一個節點。node2vec 同時考慮了廣度優先搜索 (BFS) 和深度優先搜索 (DFS)。Grover 等發現,廣度優先搜索注重刻畫網絡中的局部特徵,而深度優先搜索能更好地遍歷整個網絡,反映了節點間的同質性。特別地,node2vec 引入 search bias 函數來平衡這兩種採樣方式,通過參數 p 和 q 來調整下一步的跳轉概率。

其他基於隨機遊走的方法還包括 Walklets、LsNet2vec、TriDNR、HARP、DDRW 等等。

基於神經網絡的圖嵌入(圖神經網絡)

還有一類方法是將神經網絡和圖結合起來的圖表示學習方法,也是最近一年來最火的方向之一,我們統稱為圖神經網絡。機器之心已經為其做過了全面的介紹,具體請參見:深度學習時代的圖模型,

清華發文綜述圖網絡、清華大學圖神經網絡綜述:模型與應用、圖神經網絡概述第三彈:來自 IEEE Fellow 的 GNN 綜述。主要將其分為圖卷積網絡、圖注意力網絡、圖生產網絡、圖時空網絡、圖自編碼器。又可以分為基於譜的方法和基於空間的方法。由於基於譜的方法需要分解矩陣特徵向量,因此絕大多數新提出的方法都是基於空間,也就是如何傳播並聚合節點和邊的信息。圖像和文本本質上是有規則的格柵結構的圖,因此,很自然想到可以將已經在 CV、NLP 領域成功應用的模型拓展到圖上,如詞向量和圖卷積。最近,也出現了基於膠囊的圖神經網絡和基於圖像語義分割 U-Net 模型的 Graph U-Net。

注意力機制的在圖嵌入的應用

有一部分研究者將注意力 (attention) 機制引入到了圖神經網絡中。注意力機制的本質是從人類視覺注意力機制中獲得靈感。大致是我們視覺在感知東西的時候,一般不會是一個場景從到頭看到尾全部都看,而是根據需求觀察特定的一部分。這意味著,當人們注意到某個目標或某個場景時,該目標內部以及該場景內每一處空間位置上的注意力分布是不一樣的。而且當我們發現一個場景經常在某部分出現自己想觀察的東西時,我們就會進行學習在將來再出現類似場景時把注意力放到該部分上。更通用的解釋就是,注意力機制是根據當前的某個狀態,從已有的大量信息中選擇性的關注部分信息的方法,其實就是一系列 注意力分配係數。

基於注意力機制的 GNN 的思想是在計算每個節點的表示的時候,首先計算其和鄰居節點之間的注意力係數,為重要的鄰居節點分配較大的權重,在聚合的過程中將不同的重要性分配給鄰域內不同的節點。

表 1 按照輸入、輸出、任務對近兩年發表的基於注意力機制的圖神經網絡模型進行匯總比較,下面對幾個具有代表性的模型進行概述,具體內容請參照論文《Attention Models in Graphs: A Survey》[9]。

Yoshua Bengio 的 MILA 團隊在 2018 年提出了圖注意力網絡 (Graph Attention Networks, GAT)[10],論文中定義了 Graph attention 層,通過疊加不同的 attention 層,可以組成任意結構的圖神經網絡,其架構如圖所示,最終要的步驟就是計算節點 i 的鄰居節點對其的注意力係數$\alpha_{ij}$, 這裡還是用了多頭注意力機制,圖中不同的顏色代表不同的頭。

不同於 GAT 是節點分類,DAGCN[11] 用於圖分類任務。模型中包括兩個 attention 單元,一個是和 GAT 一樣,用於圖卷積得到節點的表示,另一個是基於 attention 的池化操作,得到整個圖的表示,然後將圖表示輸入到一個 MLP 得到整個圖的分類。作者認為,經典的 GCN 每一層都只能捕獲第 k-hop 鄰域的結構信息,只有最後一層的 H 被用下一步的預測,隨著網絡層數的增多,會丟失大量的信息。作者提出的 attention 層的思想是不僅要依賴於第 k-hop 的結果, 還要從前面每一個 hop 捕獲有價值的信息。

綜合各種圖注意力網絡的論文來看,最主要的區別在於如何定義和實現注意力機制。第一類是學習 attention weights:

主要是通過 softmax 函數實現的,同時還需要一個基於節點屬性可訓練的計算節點 j 和節點 0 相關性的函數,例如 GAT 的實現方式為:

其中 W 是將節點屬性映射到隱空間的可訓練的參數矩陣,||表示串接。

第二類基於相似度的 attention,同樣,給定相應的屬性或特徵,第二種注意力的學習方法與上面的方法類似,但有一個關鍵的區別是更多的注意力集中在具有更多相似隱藏表示或特徵的節點上,這在文獻中也經常被稱為對齊。以 AGNN 中的公式為例:

其中 cos 來計算餘弦相似度,可以看到和上式非常相似。不同之處在於,模型顯式地為彼此相關的對象學習類似的隱藏嵌入,因為注意力是基於相似性或對齊的。

前兩種注意力主要集中在選擇相關信息以整合到目標對象的隱藏表示中,而第三種注意力的目的略有不同,叫做基於注意力的遊走。舉例來說,在一個輸入圖上執行一系列遊走,並使用 RNN 對訪問的節點信息進行編碼,從而構造一個子圖嵌入。RNN 的 t 時刻的隱藏狀態對 1 到 t 訪問的節點進行編碼。Attention 就是一個函數$f』(h_t)=r_{t+1}$, 輸入的是 t 時刻的隱藏狀態,輸出一個 rank vector,告訴我們下一步我們應該優先考慮哪種類型的節點。

框架

這裡簡單的介紹一下 Hamilton 在論文 [1] 中提出的一種圖嵌入 encoder-decoder 框架(如圖),可以將大多數的圖嵌入方法用這個框架來表示。在這個框架中,我們圍繞兩個關鍵的映射函數組織了各種方法:一個 encoder(它將每個節點映射到一個低維向量) 和一個 decoder(它從已知的嵌入中解碼關於圖的結構信息)。encoder-decoder 背後的直覺想法是這樣的:如果我們能從低位嵌入表示中學會解碼高維圖信息,如節點在圖中的全局位置或節點的局部鄰域結構,那麼原則上,這些嵌入應包含下遊機器學習任務所需的所有信息。

encoder 是一個函數:

將節點 i 映射到嵌入向量$z_i \in R^d$。decoder 是接受一組節點嵌入並從這些嵌入中解碼用戶指定的圖統計數據的函數。例如,decoder 可能根據節點的嵌入預測節點之間是否存在邊,或者可能預測圖中節點所屬的社區。原則上,有許多 decoder 都是可以使用的,但是在大多數工作中使用的是成對 decoder:

當我們將成對 decoder 應用於一對嵌入$(z_i,z_j)$時,我們得到了原始圖中$v_i$和$v_j$之間相似性的重構,目標就是最小化重構後的相似性和原圖中相似性的誤差:

其中其中 SG 是一個用戶定義的、在圖 G 上的的節點間相似性度量。換句話說,目標是優化 encoder-decoder 模型,可以從低維節點嵌入 z_i 和 z_j 中解碼出原始圖中 SG(v_i, v_j) 成對節點相似性。例如可以設 SG(v_i, v_j)=A_{ij},如果節點相鄰則定義節點的相似度為 1,否則為 0。或者可以根據在圖 G 上的固定長度隨機遊走 v_i 和 v_j 共線的概率來定義 SG。在實踐中,大多數方法通過最小化節點對集合 D 上的經驗損失 L 來實現重構目標:

優化了上述目標函數後,我們就可以使用經過訓練的 encoder 為節點生成嵌入,然後可以將其用作下遊機器學習任務的特徵輸入。下表展示了常用圖嵌入方法的 encoder-decoder 框架描述。

總結

圖嵌入是指將圖中節點用低維稠密向量來表示,從一開始的基於矩陣分解的方法逐漸出現了基於隨機遊走的方法,後來又演化出基於神經網絡的方法也是我們經常聽到的圖神經網絡。圖嵌入目前還面臨著一些挑戰,例如如何在超大規模圖上高效進行分析,如何應對真實世界中不斷變化的動態圖,如何對圖神經網絡的黑盒模型進行解釋,以及如何建模異質圖。目前在圖網絡領域也湧現出一些新的方向,例如如何針對圖網絡進行對抗攻擊使其模型性能大幅下降,相反的就是如何提高模型的魯棒性;如何將人工設計網絡架構轉變為由機器自動設計,這對應著網絡結構搜索問題(NAS),以及如何將圖網絡和計算機視覺、自然語言處理等方向結合起來。這些都是很有價值也有意思的方向,感興趣的讀者可以進行更深度的研究。

參考文獻:

[1] Hamilton, William L., Rex Ying, and Jure Leskovec. "Representation learning on graphs: Methods and applications." arXiv preprint arXiv:1709.05584 (2017).

[2] Goyal, Palash, and Emilio Ferrara. "Graph embedding techniques, applications, and performance: A survey." Knowledge-Based Systems 151 (2018): 78-94.

[3] Roweis, Sam T., and Lawrence K. Saul. "Nonlinear dimensionality reduction by locally linear embedding." science 290.5500 (2000): 2323-2326.

[4] Belkin, Mikhail, and Partha Niyogi. "Laplacian eigenmaps and spectral techniques for embedding and clustering." Advances in neural information processing systems. 2002.

[5] Shaw, Blake, and Tony Jebara. "Structure preserving embedding." Proceedings of the 26th Annual International Conference on Machine Learning. ACM, 2009.

[6] Cao, Shaosheng, Wei Lu, and Qiongkai Xu. "Grarep: Learning graph representations with global structural information." Proceedings of the 24th ACM international on conference on information and knowledge management. ACM, 2015.

[7] Perozzi, Bryan, Rami Al-Rfou, and Steven Skiena. "Deepwalk: Online learning of social representations." Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014.

[8] Grover, Aditya, and Jure Leskovec. "node2vec: Scalable feature learning for networks." Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2016.

[9] Lee, John Boaz, et al. "Attention models in graphs: A survey." arXiv preprint arXiv:1807.07984 (2018).

[10] Velikovi, Petar, et al. "Graph attention networks." arXiv preprint arXiv:1710.10903 (2017).

[11] F.Chen,S.Pan,J.Jiang,H.Huo,G.Long,DAGCN:DualAttention

Graph Convolutional Networks, arXiv. cs.LG (2019).

相關焦點

  • 數據結構與算法之算法概述
    簡單的算法,諸如給出一組整數,找出其中最大的數。複雜的算法,諸如在多種物品裡選擇裝入背包的物品,使背包裡的物品總價值最大,或找出從一個城市到另一個城市的最短路線。算法有高效的,也有拙劣的。數據結構,對應的英文單詞是data structure,是數據的組織、管理和存儲格式,其使用目的是為了高效地訪問和修改數據。
  • 表徵圖數據絕不止圖神經網絡一種方法
    解決圖同構問題與機器學習緊密相關,它為發掘數據點之間的相似度提供了一種方法。然而,圖同構是一個頗具挑戰的問題,目前還沒有多項式時間內的算法能夠求解圖同構問題。求解圖匹配問題的早期算法提出使用「圖編輯距離」以及「拓撲描述子」。使用圖編輯距離涉及到對將圖 G1 轉化為 G2 的關鍵操作進行計數,從而提供分配成本的靈活性。
  • 表徵圖數據,絕不止圖神經網絡一種方法
    解決圖同構問題與機器學習緊密相關,它為發掘數據點之間的相似度提供了一種方法。然而,圖同構是一個頗具挑戰的問題,目前還沒有多項式時間內的算法能夠求解圖同構問題。求解圖匹配問題的早期算法提出使用「圖編輯距離」以及「拓撲描述子」。使用圖編輯距離涉及到對將圖 G1 轉化為 G2 的關鍵操作進行計數,從而提供分配成本的靈活性。
  • 程式設計師必知的數據結構與算法基礎:線性表數據結構之數組
    數據結構包括數據對象集以及它們在計算機中的組織方式,即它們的邏輯結構和物理存儲結構,一般我們可以認為數據結構指的是一組數據的存儲結構。2. 算法就是操作數據的方法,即如何操作數據效率更高,更節省資源。這只是抽象的定義,我們來舉一個例子,你有一批貨物需要運走,你是找小轎車來運還是找卡車來運?
  • 數據結構與算法:圖形結構
    圖形結構在計算機科學、人工智慧、電子線路分析、最短路徑尋找、工程計劃、化學化合物分析統計力學、遺傳學、控制論語言學和社會科學等方面均有不同程度的應用可以這樣說,圖形結構在所有數據結構中應用最為廣泛。圖的定義圖是一種數據結構,其中節點可以具有零個或多個相鄰元素,兩個節點的連接稱之為邊,節點在圖形結構中也被稱為頂點,一個頂點到另一個頂點的經過的的線路稱為路徑。
  • 藍盟IT外包,數據結構和算法:圖形結構
    圖表結構是比樹結構更複雜的非線性結構。 在樹結構中,節點之間有分支層次關係,各層次上的節點只與一個層次上的多個節點相關,但有可能只與下一層次上的多個節點相關。 在圖表結構中,任意兩個節點之間可能存在相關性。 也就是說,節點之間的相鄰關係是任意的。
  • 數據結構與算法:圖形結構
    因此,圖形結構被用於描述各種複雜的數據對象,在自然科學、社會科學和人文科學等許多領域有著非常廣泛的應用 。圖形結構在計算機科學、人工智慧、電子線路分析、最短路徑尋找、工程計劃、化學化合物分析統計力學、遺傳學、控制論語言學和社會科學等方面均有不同程度的應用可以這樣說,圖形結構在所有數據結構中應用最為廣泛。如在地鐵站中的線路圖:
  • JAVA必須掌握的數據結構和算法
    常見的數據結構鍊表LinkedHashSet LinkedList 底層數據結構由鍊表和哈希表組成。數據的添加和刪除都較為方便,就是訪問比較耗費時間。數組ArrayList 訪問數據十分簡單,而添加和刪除數據比較耗工夫堆堆是一種圖的樹形結構,被用於實現「優先隊列",優先隊列是一種數據結構,可以自由添加數據,但取出數據時要從最小值開始按順序取出
  • 深入淺出 數據結構和算法(快速入門上篇)
    軟體最為經典的定義就是程序=算法+數據結構,數據結構和算法的重要性不言而喻。但往往入門時,碰到《算法導論》這一類宏篇巨幅的著作,不少小夥伴就望而卻步了。今天的推文清晰結構,通俗簡練語言,多圖多示例,助你實現快速入門。
  • 從圖網絡表示到圖神經網絡
    人工智慧的不同算法圍繞不同數據結構展開。數據的本質是一大串互相聯繫的數字。最簡單的情況下, 這串數字是一些只有上下左右相連的,我們稱之為像素, 這就是圖像。如果數字和數字之間是單向的連接, 而且這個箭頭有著單一的指向,那麼這個數據類型就是時間序列。
  • 如何提升數據結構方面的算法能力
    什麼是圖、圖的表示和遍歷算法。。。。因為算法是基於某種選擇的數據結構的。對於算法的時間複雜度和空間複雜的的理解和計算,對於常見算法的掌握。,如何提高算法能力就涉及如何將數據結構和算法應用於特定的場景,以及在實際使用中該如何選擇對應算法。
  • 算法設計:數據結構-圖
    前言: 圖計算在數據科學中佔據了很重要的地位,例如內存計算大數據框架Spark的數據對象就是採用圖計算的方式; 旅遊大數據中遊客最佳路線選擇也是採用圖計算,等等。(2)路徑:有向圖從頂點Vp到頂點Vq的路徑是指一串從頂點所組成的連續有向序列(3)強連通:有向圖中,如果每個成對頂點Vi,Vj有直接路徑(Vi和Vj不是同一個點),同時有另一條路徑從Vj到Vi,則稱此圖為強連通圖,如下圖所示:
  • 深度神經網絡竟然是模塊化的?圖聚類算法解密「黑箱子」權重結構
    也就是說,在特定條件下,深度神經網絡是模塊化(modularity)的。研究人員認為:了解神經網絡的模塊化結構,可以讓研究工作者更容易理解神經網絡內部的工作原理。更具體點來說,研究人員使用圖聚類(graph clustering)算法將訓練好的網絡分解成集群,並將每個集群視為一個「模塊」。
  • Java數據結構和算法——圖
    1.1圖的概念圖(Graph),是一種複雜的非線性表結構,圖的元素我們就叫做頂點(vertex),一個頂點可以與任意其他頂點建立連接關係,這種建立的關係叫做邊(edge),頂點相連接的邊的條數叫做度(degree) 。邊有方向的圖叫做有向圖 ,邊無方向的圖叫無向圖 。
  • 快速入門數據結構和算法
    常見的排序算法是如何實現的?各有什麼優缺點?本文簡要分享算法基礎、常見的數據結構以及排序算法,給同學們帶來一堂數據結構和算法的基礎課。2 業務開發要掌握到程度?了解常見數據結構和算法,溝通沒有障礙。活學活用:遇到問題時知道要用什麼數據結構和算法去優化。
  • 真香,阿里P8首發的「數據結構與算法」導圖,你還敢說不重要?
    算法研究解決問題的方法,而數據結構則是設計一種更好的組織數據和使用數據的方式。兩者有很強的相互依賴關係,所以往往放在一起討論。數據結構和算法對標阿里P8的數據結構與算法的思維導圖:(ADT)的數據結構:棧、隊和優先級隊列。
  • 數據結構與算法(線性結構-動態數組)
    1.算法: 是用於解決特定問題的一系列的執行步驟。2.評價算法如何評判一個算法的好壞,一般從以下維度進行評估算法的優劣:1.正確性、可讀性、健壯性(對不合理的反應的解決能力)。2.時間複雜度:估算程序指令的執行次數(執行時間)。3.空間複雜度: 估算所需佔用的存儲空間。
  • 分享給 .NET 開發者的一本數據結構與算法入門書
    不管是為了面試還是為了提高編程技能,作為一名優秀的開發者,都應該對數據結構和算法有基本的了解。有很多關於學習數據結構和算法的書,但基本上都是基於 C/C++語言或 Java 語言的,基於 C 語言的電子書:《數據結構與算法:C語言實現的數據結構和算法。
  • 業界| 從集成方法到神經網絡:自動駕駛技術中的機器學習算法有哪些?
    結合 ECU (電子控制單元)傳感器數據,我們須加強對機器學習方法的利用以迎接新的挑戰。潛在的應用包括利用分布在車體內外的傳感器,比如雷射探測、雷達、攝像頭或者物聯網(IoT),融合各類數據進行駕駛員狀況評估或者駕駛場景分類。運行車載輔助系統的相關程序可從數據融合傳感系統接收相關信息進行判斷。比如,如果系統注意到駕駛員有不適的情況出現,其可以令汽車改道去往醫院。
  • 數據結構與算法學不會,不能是能力不行,而是技巧不對
    缺點是學習到的知識也是非常零碎的,知識缺乏關聯性,很難串起來,除非有足夠的基礎與能力,才能把知識由點成線,由線成面。所以有一本書是最好的,雖然說不一定要把書裡的所有內容都學習完畢,但是至少可以通過目錄,知道哪些算法與數據結構是由關聯性的。這裡,我推薦《算法導論》,雖然有點老,但是非常經典,堪稱算法與數據結構的聖經。