Slides Επιστήμης Δικτύων για υπολογισμούς με την Python στα πλαίσια του μεταπτυχιακού μαθήματος των Ψηφιακών Τεχνολογιών στην Εκπαίδευση του Μαθηματικού Τμήματος του Πανεπιστημίου Πατρών κατά το χειμερινό εξάμηνο 2014-5.
Τα slides αυτά θα γίνονται συνεχώς updated ως το τέλος του εξαμήνου (τέλη Δεκεμβρίου 2014). Η ημερομηνία του update γράφεται στην πρώτη σελίδα των slides.
1. DiktuakoÐ UpologismoÐ me thn Python
Mwus c A. MpountourÐdhc
Tm ma Majhmatik¸n PanepisthmÐou Pˆtrac
mboudour@upatras.gr
Okt¸brioc–Dekèmbrioc 2014
Last update: 3–12–2014
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
3. 1. Eisagwg Grˆfwn
Egkatˆstash tou NetworkX
Eisagwg (Mh Kateujunìmenwn) Grˆfwn
AploÐ Grˆfoi
PollaploÐ Grˆfoi
Eisagwg Kateujunìmenwn Grˆfwn
AploÐ Kateujunìmenoi Grˆfoi
PollaploÐ Kateujunìmenoi Grˆfoi
Eisagwg Grˆfwn me Bˆrh Akm¸n
Eisagwg Dimer¸n Grˆfwn
Qarakthristikˆ (Attributes) Kìmbwn kai Akm¸n
Genn torec Prokataskeuasmènwn Grˆfwn
OptikopoÐhsh (Visualization) Grˆfwn me to Gephi
DiepÐpedoi Grˆfoi
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
4. Egkatˆstash tou NetworkX
To NetworkX eÐnai èna pakèto thc Python gia thn
dhmiourgÐa, thn diaqeÐrish kai ulopoÐhsh
upologism¸n gia grˆfouc kai dÐktua.
To NetworkX diatÐjetai gia katèbasma (mazÐ me
odhgÐec egkatˆstashc) gia ìla ta leitourgikˆ
sust mata apì to Python Package Index (pypi)
sto http://pypi.python.org/pypi/networkx. Efìson
eÐnai egkatasthmènoc o python package manager pip,
tìte to NetworkX mporeÐ na egkatastajeÐ
autìmata mèsw thc (exwterik c sthn Python)
entol c:
pip install networkx
Mèsa sto peribˆllon thc Python, to NetworkX
kaleÐtai (eisˆgetai) wc ex c:
import networkx as nx
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
5. Eisagwg AploÔ (Mh Kateujunìmenou) Grˆfou
Pr¸ta, dÐnontai oi entolèc gia mh kateujunìmenouc
grˆfouc.
Arqikˆ, dhmiourgeÐtai ènac kenìc grˆfoc:
import networkx as nx
G = nx. Graph ()
Metˆ, eisˆgontai arqikˆ oi kìmboi, p.q., oi 5
kìmboi '1', '2', '3', '4' kai '5' mpaÐnoun wc ex c:
G. add_nodes_from ([1,2,3,4,5])
Bèbaia, antÐ gia arijmoÔc, oi kìmboi mporoÔn na
eisˆgontai wc onìmata lèxeic, p.q.:
G. add_nodes_from ([ 'John ', 'Mary '])
G. add_node (" London ")
G. add_nodes_from ([ 'a','b','c','d','e'])
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
6. Gia na doÔme ìlouc touc kìmbouc pou èqoun mpei
wc t¸ra kai na afairèsoume kˆpoiouc ìlouc:
G. nodes ()
G. remove_nodes_from ([ 'John ', 'Mary '])
G. clear ()
Sth sunèqeia, eisˆgontai oi akmèc, p.q., gia touc 5
kìmbouc 1–5 (pou prèpei na epana–eisaqjoÔn), na
6 sundèseic:
G. add_nodes_from ([1,2,3,4,5])
G. add_edges_from ([(1,2),(1,4),(2,3),(3,4),(3,5),(4,5 )])
Oi lÐstec kai to pl joc twn eisaqjèntwn kìmbwn
kai akm¸n dÐnontai apì tic entolèc:
G. nodes ()
G. number_of_nodes ()
G. edges ()
G. number_of_edges ()
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
7. Gia to sqediasmì tou eisaqjèntoc grˆfou, p.q,
tou paradeÐgmatoc autoÔ tou grˆfou me 5
kìmbouc kai 6 akmèc, ekteloÔntai oi entolèc:
import matplotlib . pyplot as plt
plt . figure ()
nx. draw (G, with_labels = True )
plt . show ()
H teleutaÐa entol dèqetai diˆforec paramètrouc,
ìpwc, p.q., gia diaforetikì tÔpo sqedÐou (layout),
mègejoc kai qr¸ma kìmbwn kai afaÐresh twn
onomˆtwn (ids) twn kìmbwn:
nx. draw_spring (G, node_size =100 , node_color ='# A0CBE2 ',
with_labels = False )
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
8. ParaleÐpontac tic prohgoÔmenec parametropoi seic, o sqediasmìc
tou grˆfou tou paradeÐgmatoc dÐnei to diˆgramma:
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
9. Oi kìmboi mporoÔn na topotethjoÔn se stajerèc (prokajorismènec)
jèseic, efìson o grˆfoc eÐqe eisaqjeÐ me tic suntetagmènec touc, pou
mporeÐ na gÐnei, p.q., sto parˆdeigma autì wc ex c:
pos ={1:(0,0),2:(1,0),4:(0,1),3:(1,1),5:(0.5,2.0)}
plt . figure ()
nx. draw (G,pos , with_labels = True )
plt . show ()
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
10. Eisagwg PollaploÔ (Mh Kateujunìmenou)
Grˆfou
'Enac pollaplìc grˆfoc (multigraph) eÐnai ènac
grˆfoc me pollaplèc (parˆllhlec) akmèc kai
(endeqomènwc) kai auto–brìgqouc (self–loops). Na
èna parˆdeigma pollaploÔ (mh kateujunìmenou)
grˆfou:
3
1 2
O grˆfoc autìc eisˆgetai wc ex c (allˆ den eÐnai
dunatì na sqediasjeÐ me to NetworkX):
G = nx. MultiGraph ()
G. add_nodes_from ( range (1,4))
G. add_edges_from ([(1,2),(1,2),(1,2),(1,3),(2,2),(2,3),(2,3 )])
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
11. Eisagwg AploÔ Kateujunìmenou Grˆfou
GÐnetai wc ex c, p.q., sto parˆdeigma autì:
G=nx. DiGraph ()
G. add_nodes_from (["A","B","C","D"])
G. add_edges_from ([( "A","B"), ("C","A"), ("C","B"),
("B","D")])
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
12. Eisagwg PollaploÔ Kateujunìmenou Grˆfou
Na èna parˆdeigma pollaploÔ kateujunìmenou
grˆfou:
3
1 2
O grˆfoc autìc eisˆgetai wc ex c (allˆ den eÐnai
dunatì na sqediasjeÐ me to NetworkX):
G = nx. MultiDiGraph ()
G. add_nodes_from ( range (1,4))
G. add_edges_from ([(1,2),(1,2),(2,1),(1,3),(2,2),(2,3),(3,2 )])
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
13. Eisagwg Grˆfwn me Bˆrh Akm¸n
GÐnetai, p.q., sto parˆdeigma autì me tic entolèc:
G=nx. Graph ()
G. add_weighted_edges_from ([( 'a','b',4),( 'a','c',8),
('a','d',5),( 'c','d',3)])
kai o sqediasmìc wc ex c:
plt . figure ( facecolor ='w')
pos =nx. spring_layout (G)
edge_labels = dict ([((u,v ,),d['weight '])
for u,v,d in G. edges ( data = True )])
nx. draw_networkx_nodes (G,pos , node_size = 700)
nx. draw_networkx_edges (G, pos)
nx. draw_networkx_labels (G,pos , font_size =20)
nx. draw_networkx_edge_labels (G,pos ,
edge_labels = edge_labels , font_size =20)
plt . axis ('off ')
plt . show ()
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
28. 3 TuqaÐoi Grˆfoi
TuqaÐoc grˆfoc Erdos–Renyi gia n kìmbouc kai pijanìthta p:
erdos_renyi_graph (n,p)
TuqaÐoc grˆfoc Gn,p gia n kìmbouc kai pijanìthta p:
gnp_random_graph (n,p)
TuqaÐoc grˆfoc Gn,m gia n kìmbouc kai m akmèc:
gnm_random_graph (n,m)
Grˆfoc anadiktÔwshc plègmatoc Strogatz–Watts gia n kìmbouc, o
kajènac me k geÐtonec (se topologÐa daktulÐou) kai me pijanìthta
anadiktÔwshc p:
watts_strogatz_graph (n,k,p)
TuqaÐoc grˆfoc Barabasi–Albert gia n kìmbouc kai kˆje nèo kìmbo me
m akmèc se upˆrqontec kìmbouc:
barabasi_albert_graph (n,m)
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
31. OptikopoÐhsh (Visualization) Grˆfwn me to Gephi
Pr¸ta orÐzoume to working directory ìpou jèloume h Python na s¸sei
ton grˆfo, ton opoÐon ja sqediˆsoume sth sunèqeia mèsw tou Gephi:
import os
os. chdir ('pwd ')
ìpou to ’pwd’ antistoiqeÐ sth diadrom ston upostologist mac.
Sth sunèqeia, eisˆgoume ton grˆfo sto NetworkX. P.q.:
G = nx. erdos_renyi_graph (200 ,0.01)
Amèswc metˆ, exˆgoume autìn ton grˆfo wc arqeÐo .gexf, gia na ton
epexergasjeÐ to Gephi:
nx. write_gexf (G,'ern . gexf ')
Sto Gephi, proqwroÔme wc ex c:
Open Graph File...
Overview
Layout > Apply (Stop)
Data Laboratory > Add column [color] > Fill column with a value
Partition (refresh) choose color > Apply
Preview (refress)
Presets > Default Straight
Export (gia na s¸soume to diˆgramma tou grˆfou, sun jwc wc
.png pdf.)
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
32. Sq ma: TuqaÐoc grˆfoc Erdos–Renyi gia 200 kìmbouc kai pijanìthta
0.01 sqediasmènoc me to Gephi.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
33. DiepÐpedoi Grˆfoi
DiepÐpedoc grˆfoc (two–level graph) onomˆzetai ènac grˆfoc, to
sÔnolo koruf¸n tou opoÐou diamerÐzetai se duo uposÔnola, pou
onomˆzontai epÐpeda, ètsi ¸ste to sÔnolo twn akm¸n tou grˆfou na
diamerÐzetai se trÐa uposÔnola: akmèc metaxÔ twn koruf¸n tou
pr¸tou epipèdou, akmèc metaxÔ twn koruf¸n tou deutèrou epipèdou
kai akmèc metaxÔ twn koruf¸n tou pr¸tou kai tou deutèrou
epipèdou. Me ˆlla lìgia, h diaforˆ diepÐpedou kai dimeroÔc grˆfou
eÐnai ìti ston deÔtero den mporoÔn na upˆrqoun akmèc metaxÔ twn
koruf¸n tou pr¸tou kai tou deutèrou epipèdou.
Mia pr¸th kataskeu mporeÐ na gÐnei analutikˆ, ’’aposunjètontac’’
to sÔnolo twn koruf¸n enìc dojèntoc grˆfou se duo epÐpeda, ìpwc
perigrˆfetai me tic parakˆtw grammèc k¸dika (ki akoloujeÐ o
sqediasmìc tou grˆfou autoÔ sthn epìmenh diafˆneia):
G=nx. erdos_renyi_graph (20 ,0.3)
pos =nx. spring_layout (G)
top_set = range (0,8)
botom_set = range (8,20)
for i in pos :
npos = pos [i]
if i in top_set :
pos [i ]=[ npos [0], npos [1]+2]
elif i in botom_set :
pos [i ]=[ npos [0], npos [1]-2]
plt . figure ()
nx. draw (G,pos , with_labels =True , nodelist = top_set , node_color ='r')
nx. draw (G,pos , with_labels =True , nodelist = botom_set , node_color ='b')
plt . show ()
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
35. Mia deÔterh kataskeu enìc diepÐpedou grˆfou mporeÐ na gÐnei
sunjetikˆ, ’’gefur¸nontac’’ duo dojèntec grˆfouc me thn prosj kh
akm¸n metaxÔ tou sunìlou twn koruf¸n tou pr¸tou grˆfou kai
tou sunìlou twn koruf¸n tou deutèrou grˆfou:
J=nx. erdos_renyi_graph (15 ,0.17) # First level graph
F=nx. erdos_renyi_graph (20 ,0.17) # Second level graph
H=nx. bipartite_random_graph (15 ,20 ,0.1) # The bridging bipartite graph
G=nx. Graph () # The two -- level graph
for node in J. nodes ():
G. add_node (node , bipartite =0)
for edge in J. edges ():
G. add_edge ( edge [0], edge [1])
for edge in F. edges ():
G. add_edge ( edge [0]+k, edge [1]+k)
for node in F. nodes ():
G. add_node ( node +k, bipartite =1)
for edge in H. edges ( data = True ):
G. add_edge ( edge [0], edge [1])
pos =nx. spring_layout (G)
top_set = set ()
botom_set = set ()
for i in pos :
npos = pos [i]
if G. node [i][ 'bipartite ']== 0:
pos [i ]=[ npos [0], npos [1]+2]
top_set .add(i)
elif G. node [i][ 'bipartite ']== 1:
pos [i ]=[ npos [0], npos [1]-2]
botom_set . add (i)
plt . figure ()
nx. draw (G,pos , with_labels =True , nodelist = list ( top_set ), node_color ='r')
nx. draw (G,pos , with_labels =True , nodelist = list ( botom_set ), node_color ='b')
plt . show ()
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
37. Se aut n kai thn epìmenh diafˆneia dÐnetai o k¸dikac kataskeu c
enìc diepÐpedou grˆfou tou paradeÐgmatoc dieujunt¸n–etairei¸n
(managers–companies). Sth mejepìmenh diafˆneia akoloujeÐ o k¸dikac
tou sqediasmoÔ tou grˆfou autoÔ, ìpwc apeikonÐzetai sthn amèswc
epìmenh diafˆneia:
directors = {0:"a",1:"b",2:"c",3:"d",4:"e"}
companies ={0:"A",1:"B",2:"C",3:"D",4:"E",5:"F"}
labels = directors . copy ()
newkey = len ( directors . keys ())
for k in companies . keys ():
labels [k+ newkey ]= companies [k]
J=nx. erdos_renyi_graph (5,0.8) # Directors
F=nx. erdos_renyi_graph (6,0.6) # Companies
H=nx. bipartite_random_graph (5,6,0.55) # Directors in Companies
G=nx. Graph () #Two - Level Graph
from networkx . algorithms import bipartite
for node in J. nodes ():
G. add_node (node , bipartite =0)
for edge in J. edges ():
G. add_edge ( edge [0], edge [1])
for edge in F. edges ():
G. add_edge ( edge [0]+5, edge [1]+5)
for node in F. nodes ():
G. add_node ( node +5, bipartite =1)
for edge in H. edges ( data = True ):
G. add_edge ( edge [0], edge [1])
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
38. posJ =nx. spring_layout (J)
posF =nx. spring_layout (F)
posH ={0:(0,0),1:(0,2),2:(0,4),3:(0,6),4:(0,8),5:(1,-2),6:(1,0),7:(1,2),8:(1,4),
9:(1,6),10 :(1,8)}
mode1 , mode2 = bipartite . sets (H)
pos =nx. spring_layout (G)
top_set =set ()
botom_set = set ()
for i in pos :
npos = pos [i]
if G. node [i][ 'bipartite ']== 0:
pos [i ]=[ npos [0], npos [1]+2]
top_set .add(i)
elif G. node [i][ 'bipartite ']== 1:
pos [i ]=[ npos [0], npos [1]-2]
botom_set .add(i)
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
44. GeitnÐash Kìmbwn
1 GeitnÐash Kìmbwn se Mh Kateujunìmenouc
Grˆfouc
'Estw ìti èqoume ènan mh kateujunìmeno (aplì) grˆfo
G.
Oi parakˆtw entolèc dÐnoun antistoÐqwc: to sÔnolo
twn kìmbwn, to sÔnolo twn akm¸n kai touc geÐtonec
tou kìmbou i tou G:
G. nodes ()
G. edges ()
G. neighbors (i)
O pÐnakac geitnÐashc A tou grˆfou G, pou eÐnai ènac
summetrikìc pÐnakac n n (ìpou n eÐnai to pl joc twn
kìmbwn tou G) me stoiqeÐa 0 1, upologÐzetai kai
tup¸netai apì tic ex c entolèc:
A = nx. adjacency_matrix (G)
print (A. todense ())
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
46. O sqediasmìc tou grˆfou mporeÐ na gÐnei me tic
entolèc:
plt . figure ()
nx. draw (G, with_labels =True , node_color ='g',alpha =0.5)
plt . show ()
Epiplèon, gia ton pÐnaka geitnÐashc, mporoÔme na
sqediˆsoume to kaloÔmeno spy plot me ton ex c trìpo:
adjacency_matrix = nx. to_numpy_matrix (G)
fig = plt . figure ( figsize =(5, 5))
plt . imshow ( adjacency_matrix , cmap = Greys , interpolation = none )
plt . show ()
Ta sqèdia tou grˆfou kai tou spy plot tou pÐnaka
geitnÐas c tou brÐskontai sthn epìmenh diafˆneia.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
48. 2 GeitnÐash Kìmbwn se Kateujunìmenouc Grˆfouc
'Estw t¸ra ìti èqoume ènan kateujunìmeno grˆfo G.
Oi parakˆtw entolèc dÐnoun antistoÐqwc: to sÔnolo twn kìmbwn, to
sÔnolo twn akm¸n, touc exerqìmenouc geÐtonec tou kìmbou i proc touc
opoÐouc kateujÔnontai oi akmèc pou arqÐzoun apì ton i kai touc
eiserqìmenouc geÐtonec tou kìmbou i apì touc opoÐouc arqÐzoun oi
akmèc pou kateujÔnontai ston i:
G. nodes ()
G. edges ()
G. neighbors (i)
G. predecessors (i)
O pÐnakac geitnÐashc A tou grˆfou G, pou eÐnai t¸rac ènac mh
summetrikìc pÐnakac n n (ìpou n eÐnai to pl joc twn kìmbwn tou G)
me stoiqeÐa 0 1, upologÐzetai kai tup¸netai apì tic Ðdiec entolèc:
A = nx. adjacency_matrix (G)
print (A. todense ())
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
51. BajmoÐ Kìmbwn
1 BajmoÐ Kìmbwn Mh Kateujunìmenwn Grˆfwn
'Estw ìti èqoume ènan mh kateujunìmeno (aplì) grˆfo
G.
O bajmìc tou kìmbou i tou G orÐzetai wc to pl joc
twn geitìnwn tou i.
Oi parakˆtw entolèc dÐnoun antistoÐqwc: ton bajmì
tou kìmbou i kai to sÔnolo–lexikì twn bajm¸n ìlwn
twn kìmbwn tou G:
G. degree (i)
G. degree () # the same as nx . degree (G)
To diˆgramma tou mh kateujunìmenou grˆfou tou
prohgoÔmenou paradeÐgmatoc sqediˆzetai sthn epìmenh
diafˆneia ètsi ¸ste na faÐnetai o kìmboc i, oi geÐtonèc
tou ki o bajmìc tou i (ed¸ i = 4).
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
53. 2 BajmoÐ Kìmbwn Kateujunìmenwn Grˆfwn
'Estw t¸ra ìti èqoume ènan kateujunìmeno grˆfo G.
O exerqìmenoc bajmìc (out–degree) tou kìmbou i tou G
orÐzetai wc to pl joc twn exerqìmenwn geitìnwn tou i
kai o eiserqìmenoc bajmìc (in–degree) tou kìmbou i tou
G orÐzetai wc to pl joc twn eiserqìmenwn geitìnwn
tou i. O olikìc bajmìc (total degree) tou i orÐzetai wc
to ˆjroisma tou exerqìmenou kai tou eiserqìmenou
bajmoÔ tou i.
Oi parakˆtw entolèc dÐnoun antistoÐqwc: ton
exerqìmeno, eiserqìmeno, olikì bajmì tou kìmbou i kai
ta sÔnola–lexikˆ twn antÐstoiqwn bajm¸n ìlwn twn
kìmbwn tou G:
G. out_degree (i) # the same as len (G. neighbors (i))
G. in_degree (i) # the same as len (G. predecessors (i ))
G. degree () # the same as nx . degree (G) = G. out_degree (i) + G. in_degree (i)
Sthn epìmenh diafˆneia faÐnontai oi bajmoÐ enìc kìmbou gia to
parˆdeigmˆ mac.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
58. 4 Istogrˆmmata Katanom c Bajm¸n Kìmbwn Grˆfwn
'Ena istìgramma katanom c bajm¸n kìmbwn eÐnai
h grafik parˆstash thc metabol c tou pl jouc
twn kìmbwn enìc grˆfou, ston ˆxona y, pou eqoun
kˆpoio bajmì (se aÔxousa seirˆ), ston ˆxona x.
To istìgramma katanom c bajm¸n kìmbwn enìc mh
kateujunìmenou grˆfou G sqediˆzetai me thn ex c
entol :
hist ( deg . values (), bins = len ( set (G. degree (). values ())))
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
59. Sto sq ma pou akoloujeÐ blèpoume èna parˆdeigma enìc
istogrˆmmatoc katanom c bajm¸n enìc mh kateujunìmenou grˆfou:
'Otan o grˆfoc eÐnai kateujunìmenoc, èqoume afenìc to istìgramma
katanom c twn exerqìmenwn bajm¸n kìmbwn kai afetèrou to
istìgramma katanom c twn eiserqìmenwn bajm¸n kìmbwn. Oi
tropopoi seic tou prohgoÔmenou k¸dika gia rabdogrˆmmata mh
kateujunìmenwn grˆfwn eÐnai profaneÐc.
Sthn epìmenh diafˆneia akoloujoÔn paradeÐgmata istogrammˆtwn
exerqìmenwn kai eiserqìmenwn bajm¸n enìc kateujunìmenou grˆfou.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
61. Epiplèon, gia ènan kateujunìmeno grˆfo, mporoÔme na
sqediˆsoume to dusdiˆstato istìgramma thc koin c
katanom c twn exerqìmenwn kai twn eiserqìmenwn
bajm¸n kìmbwn.
Gia to prohgoÔmeno parˆdeigma, paÐrnoume to ex c
dusdiˆstato istìgramma (mèsw tou k¸dika pou dÐnetai
sto mˆjhma):
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
62. 5 Istogrˆmmata Katanom c Bajm¸n Kìmbwn Megˆlwn
Grˆfwn
Tupikˆ, oi tuqaÐoi megˆloi grˆfoi Edos–Renyi
teÐnoun na akoloujoÔn thn diwnumik katanom ,
ìpwc faÐnetai sthn epìmenh diafˆneia gia ènan
tuqaÐo (mh kateujunìmeno) grˆfo Edos–Renyi 5000
kìmbwn me pijanìthta 0.25, pr¸ta se dekadikèc
kai metˆ se logarijmikèc klÐmakec.
Sthn perÐptwsh ìmwc twn onomazìmenwn tuqaÐwn
grˆfwn anexart twn klÐmakac (scale–free graphs),
oi grˆfoi autoÐ teÐnoun na akoloujoÔn thn
katanom tou nìmou dÔnamhc (power law distribution),
ìpwc faÐnetai sthn mejepìmenh diafˆneia gia ènan
tuqaÐo (mh kateujunìmeno) grˆfo BarabasiAlbert
5000 kìmbwn me m = 3, pr¸ta se dekadikèc kai
metˆ se logarijmikèc klÐmakec.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
65. Sundesimìthta
1 Sundedemènec Sunist¸sec Mh Kateujunìmenwn
Grˆfwn
'Enac mh kateujunìmenoc grˆfoc lègetai
sundedemènoc an gia kˆje duo korufèc tou upˆrqei
mia diadrom (path) pou tic en¸nei. Diaforetikˆ, o
grˆfoc lègetai mh sundedemènoc.
An ènac (mh kateujunìmenoc) grˆfoc den eÐnai
sundedemènoc, tìte perièqei kˆpoiec (toulˆqiston
duo) sundedemènec sunist¸sec. Mia sundedemènh
sunist¸sa eÐnai ènac mègistoc sundedemènoc
upogrˆfoc tou grˆfou autoÔ.
H megalÔterh sundedemènh sunist¸sa sun jwc
onomˆzetai gigantiaÐa sundedemènh sunist¸sa.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
66. Gia ènan mh kateujunìmeno grˆfo G,
qrhsimopoioÔme tic parakˆtw entolèc gia thn
diereÔnhsh thc sundesimìthtˆc tou (leptomèreiec
gia to p¸c qrhsimopoioÔntoi oi entolèc autèc
dÐnontai sto skript connectedness.py):
nx. is_connected (G)
nx. number_connected_components (G)
nx. connected_components (G)
connected_component_subgraphs (G)
AkoloujeÐ èna parˆdeigma enìc mh sundedemènou
(mh kateujunìmenou) tuqaÐou grˆfou me 5
sundedemènec sunist¸sec (metaxÔ twn opoÐwn oi 2
eÐnai apomonwmènoi kìmboi).
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
71. Dojèntoc enìc mh isqur¸c sundedemènou
kateujunìmenou grˆfou G, mporoÔme na
kataskeuˆsoume ènan grˆfo S, pou onomˆzetai
sumpuknwmènoc grˆfoc grˆfoc thc
sumpÔknwshc tou G, oi kìmboi tou opoÐou eÐnai oi
isqur¸c sundedemènec sunist¸sec tou G kai oi
akmèc metaxÔ twn kìmbwn tou S antistoiqoÔn stic
akmèc tou G.
O sumpuknwmènoc grˆfoc S eÐnai profan¸c ènac
akuklikìc kateujunìmenoc grˆfoc.
Sthn epìmenh diafˆneia blèpoume ènan mh isqur¸c
sundedemèno (kateujunìmeno) tuqaÐo grˆfo kai ton
antÐstoiqo sumpuknwmèno grˆfo. O grˆfoc autìc
èqei 2 isqur¸c sunededemènec sunist¸sec me 3
kìmbouc, 3 me 2 kìmbouc kai 8 me 1 kìmbo.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
73. 3 Asjen¸c Sundedemènec Sunist¸sec Kateujunìmenwn
Grˆfwn
'Enac kateujunìmenoc grˆfoc lègetai asjen¸c
sundedemènoc an gia kˆje duo korufèc tou upˆrqei
mia diadrom pou tic en¸nei mèsw miac alusÐdac
akm¸n, oi opoÐec ìmwc den qreiˆzetai na èqoun thn
Ðdia forˆ kateujÔnsewn.
Me ˆlla lìgia, h asjen c sundesimìthta enìc
kateujunìmenou grˆfou isodunameÐ me
sundesimìthta, ìtan den lambˆnetai upìyh h
kateÔjunsh twn akm¸n.
An ènac (kateujunìmenoc) grˆfoc den eÐnai asjen¸c
sundedemènoc, tìte perièqei kˆpoiec (toulˆqiston
duo) asjen¸c sundedemènec sunist¸sec. Mia
asjen¸c sundedemènh sunist¸sa eÐnai ènac mègistoc
asjen¸c sundedemènoc upogrˆfoc tou grˆfou
autoÔ.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
74. Gia ènan kateujunìmeno grˆfo G, qrhsimopoioÔme
tic parakˆtw entolèc gia thn diereÔnhsh thc
asjenoÔc sundesimìthtˆc tou (leptomèreiec gia to
p¸c qrhsimopoioÔntoi oi entolèc autèc dÐnontai
sto skript connectedness.py):
nx. is_weakly_connected (G)
nx. number_weakly_connected_components (G)
nx. weakly_connected_components (G)
weakly_connected_component_subgraphs (G)
AkoloujeÐ èna parˆdeigma enìc mh asjen¸c
sundedemènou (kateujunìmenou) tuqaÐou grˆfou me
7 asjen¸c sundedemènec sunist¸sec (metaxÔ twn
opoÐwn oi 2 eÐnai apomonwmènoi kìmboi).
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
76. 4 Elkustikèc Sunist¸sec Kateujunìmenwn Grˆfwn
Se ènan kateujunìmeno grˆfo, mia isqur¸c sundedemènh
sunist¸sa onomˆzetai elkustik elkÔousa
sunist¸sa an kˆje kateujunìmenh diadrom pou
eisèrqetai mèsa se aut n thn sunist¸sa potè den
bgaÐnei èxw apì aut n.
Gia ènan kateujunìmeno grˆfo G, qrhsimopoioÔme tic
parakˆtw entolèc gia thn diereÔnhsh twn elkustik¸n
sunistws¸nc tou (leptomèreiec gia to p¸c
qrhsimopoioÔntoi oi entolèc autèc dÐnontai sto skript
connectedness.py):
nx. is_attracting_component (G)
nx. number_attracting_components (G)
nx. attracting_components (G)
nx. attracting_component_subgraphs (G)
AkoloujeÐ èna parˆdeigma enìc (kateujunìmenou)
tuqaÐou grˆfou me 2 elkustikèc sunist¸sec, ìpou
sqediˆzetai kai o antÐstoiqoc sumpuknwmènoc grˆfoc.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
78. 5 Disundedemènec Sunist¸sec Mh Kateujunìmenwn
Grˆfwn
'Enac mh kateujunìmenoc grˆfoc onomˆzetai
disundedemènoc (bicoonected) an den aposundèetai me
thn apokop opoioud pote kìmbou tou.
Se ènan mh kateujunìmeno grˆfo, ènac mègistoc
upogrˆfoc, pou eÐnai tètoioc ¸ste na mhn
aposundèetai me thn apokop opoioud pote
kìmbou tou upogrˆfou autoÔ, onomˆzetai
disundedemènh sunist¸sa tou grˆfou.
'Enac kìmboc enìc mh disundedemènou grˆfou
apoteleÐ èna shmeÐo diˆrjrwshc (articulation point)
koruf apokop c (cut vertex) an kai mìnon an o
kìmboc autìc an kei se toulˆqiston duo
disundedemènec sunist¸sec tou grˆfou autoÔ.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python
79. Gia ènan kateujunìmeno grˆfo G, qrhsimopoioÔme
tic parakˆtw entolèc gia thn diereÔnhsh thc
disundesimìthtˆc tou (leptomèreiec gia to p¸c
qrhsimopoioÔntoi oi entolèc autèc dÐnontai sto
skript connectedness.py):
nx. is_biconnected (G)
nx. biconnected_component_subgraphs (G)
nx. biconnected_component_edges (G)
nx. articulation_points (G)
AkoloujeÐ èna parˆdeigma enìc mh disundedemènou
(mh kateujunìmenou) tuqaÐou grˆfou me 6
disundedemènec sunist¸sec kai 5 shmeÐa
diˆrjrwshc.
Mwus c A. MpountourÐdhc DiktuakoÐ UpologismoÐ me thn Python