出處:http://www.cnblogs.com/bigmonkey
本文以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,非商業用途!
掃描二維碼關注公衆號「我是8位的」
圖(Graph)是離散數學中的一種常見數據結構,由節點和邊組成,若是邊有方向,就是有向圖。下圖是一個有4個節點5條邊的有向圖:數組
這個圖(Graph)能夠表示電網、網絡或建築物通道的數學模型。網絡
能夠經過一個矩陣來解析有向圖,這個矩陣稱爲關聯矩陣(Incidence Matrix)。4個節點5條邊的圖用一個5×4的矩陣表示,用正負表示邊的方向,矩陣的一行至關於圖的一條邊,矩陣的一列對應圖的一個節點:數據結構
以A的第一行爲例,它對應圖的第一條邊e1,e1的方向是從n1指向n2,與n3和n4無關。若是將A中的-1所有改成1,就變成了無向圖。ide
A的前三行對應了三邊e1,e2,e3,它們構成了圖中的一個迴路。對於一個圖來講,迴路的數量和位置相當重要。把迴路單獨拿出來看:post
問題之一是:這三行相互獨立嗎?或者說它們是不是線性無關的?學習
彷佛很容易看出,第3行能夠由第1行和第2行相加獲得,這說明迴路對應的行是線性相關的。從圖上看,從n1到n3能夠n1→n3,也能夠n1→n2→n3,因此說n1→n3是「多餘」的,它能夠由「繞行」代替。spa
若是用關聯矩陣描述一個大型圖,你會發現矩陣中的0很是多,這個矩陣是一個稀疏矩陣。用計算機存儲這個矩陣時,應當考慮是否應該用鄰接表代替二維數組,同時也可使用一維數組代替二維數組。blog
鄰接表是一種經常使用的數據結構,它是一個存儲了鏈表的一維數組。ci
仍是這個圖,如今不考慮方向,用一維數組描述:get
L[4]是有4個節點的數組(假設數組下標從1開始,和Matlab同樣),初始元素都爲0,這樣構造數組:
n1與n2聯通,將L[1]與L[2]賦予n2的序號,L = [2,2,0,0];
n2與n3聯通,將L[2]和與L[2]相連的全部節點都賦予n3的序號,L = [3,3,3,0];
n3與n4聯通,將L[3]和與L[4]相連的全部節點都賦予n4的序號,L = [4,4,4,4]。
對於迴路沒必要從新負值:
n1與n4聯通,可是它們之間已經有迴路了,L[1] == L[4];
n1與n3聯通,它們之間一樣有迴路,L[1] == L[3]。
最終,L = [4,4,4,4],判斷兩點np與nq是否聯通,只須要判斷if L[p] == L[q]便可。
若是A的零空間是零向量,則意味着Ax = 0有惟一解,此時A應當是方陣,A的行最簡階梯矩陣是單位矩陣,A的各列線性無關。
A不是方陣,因此x沒有惟一解。這很容易驗證,Ax = 0中,x有4個份量,方程組中有5個方程,但只有4個未知數,因此方程有無數解。
只要x1 = x2 = x3 = x4,就知足Ax = 0。A的零空間是位於R4空間下的1維空間:
若是A是電網,xn表示每一個節點的電勢,則上面的N(A)意味着全部節點的電勢相等,不存在電勢差,所以不存在電流。若是把n4節點接地,就會產生電勢差,此時至關於將x4的電勢設爲0:
對於Ax來講,x4 = 0意味着A的最後一列不起做用(最後一列的各個份量與0的相乘老是0)。這樣,A前三列就變成線性無關,實際上A的任意三列都是線性無關,A的秩是3。
做者:我是8位的