Enumerazione di cammini e di cicli in un grafo
Fabrizio Pugliese
Abstract
Come applicazione della matrice d’adiacenza, ricaviamo alcune formule per il calcolo del numero di cammini e cicli di lunghezza fissata.
1 Numero di cammini in un grafo
Sia G = (V, E) un grafo (semplice non orientato) con n vertici v
1, . . . , v
ned m lati, e sia A : F → F il suo operatore d’adiacenza, definito da
A(f )(v)
def= X
z∼v
f (z),
per ogni v ∈ V e per ogni funzione f : V → R; sia A(G) = ka
ir(G)k
ni,r=1la matrice d’adiacenza, cio`e la matrice di A rispetto alla base di F formata dalle funzioni caratteristiche χ
1, . . . , χ
ndei vertici, cio`e
a
ir(G) = a
ri(G) = A(G)(χ
r)(v
i)
Ricordiamo che il numero di passeggiate di lunghezza k dal vertice v
ial vertice v
j`e
w
kij(G) = a
(k)ij(G), dove
A
k(G)
def= A(G) · A(G) · · · A(G) =
° °
°a
(k)ij(G)
° °
°
ni,j=1
Vogliamo descrivere un ”algoritmo” per calcolare il numero
p
kij(G) = numero di k-cammini in G fra i vertici v
ie v
jA questo scopo denotiamo, per ogni grafo G, per ogni A, B ⊂ V (G) e per ogni k ∈ N, con S
A,Bk(G) l’insieme dei k-cammini in G con vertice iniziale in A e vertice finale in B. Siano, inoltre, per ogni W ⊂ V (G),
N
W(G) = {vertici di V
G\W adiacenti a W } , E
W(G) = {lati di E
Gincidenti con W } ,
e sia
G
W= G\E
W= (V (G), E(G)\E
W)
il grafo ottenuto da G sconnettendo tutti i vertici di W (che quindi, in G
W,
`e un insieme di vertici isolati). E’ facile capire che, dati due vertici distinti v, w ∈ V (G), l’insieme S
v,wk(G), con k ≥ 2, `e in corrispondenza biunivoca con l’insieme S
k−1v,Nw(G)\{v}
(G
w) (la corrispondenza `e quella che associa ad ogni k- cammino da v a w il sottocammino formato dai primi k − 1 lati); d’altra parte
`e anche chiaro che S
v,Nk−1w(G)\{v}
(G
w) = [
z∈Nw(G)\{v}
S
v,zk−1(G
w),
con gli addendi a secondo membro a due a due disgiunti; quindi
¯ ¯S
v,wk(G) ¯
¯ = ¯
¯ ¯S
v,Nk−1w(G)\{v}
(G
w)
¯ ¯
¯ = X
v6=z∈Nw(G)
¯ ¯S
v,zk−1(G
w) ¯
¯ ,
cio`e (denotando G
vjsemplicemente con G
j),
p
kij(G) = X
n r=1a
rj(G) p
k−1ir(G
j); (1)
si noti, in particolare, che
p
kii(G) = 0, per ogni k ∈ N, i ∈ {1, . . . , n}.
Dunque: per calcolare tramite la (1) il numero di k-cammini da v
ia v
jnel grafo G devo prima calcolare quanti (k −1)-cammini ci sono, nel grafo G
j, fra v
ie ciascun vertice adiacente a v
jnel grafo G. Riapplicando il procedimento a G
jmi riduco a calcolare dei p
k−2is(G
j,r) con i v
sadiacenti a v
rin G
je G
j,r= (G
j)
rottenuto da G sconnettendo v
je v
r(si noti che G
j,r= G
r,j); ecc...
Naturalmente, ad ogni passo di questo algoritmo ricorsivo il numero di p
hiq(G
j,r,...) da calcolare cresce, a volte anche ”esponenzialmente”, ma d’altra parte i grafi G
j,r,...diventano sempre pi` u semplici a mano a mano che sconnet- tiamo vertici da G.
Sarebbe bello poter trovare delle formule esplicite per i p
kij(G) in funzione della matrice d’adiacenza A(G) e delle sue potenze. Purtroppo non `e semplice farlo se k non `e basso, comunque facciamo qualche calcolo per k = 2, 3, 4 . . . . Evidentemente, vale
p
1ij(G) = a
ij(G), (2)
passiamo a k = 2. Applicando (1) si ha
p
2ij(G) = X
n r=1a
rj(G)p
1ir(G
j);
ma, per la (2) applicata al caso G = G
j, si ha
p
1ir(G
j) = a
ir(G
j) = (1 − δ
ij) (1 − δ
rj) a
ir(G), (3)
e sostituendo nell’espressione precedente si ottiene p
2ij(G) = (1 − δ
ij) X
r
(1 − δ
rj) a
rj(G)a
ir(G)
= (1 − δ
ij) (
a
(2)ij− X
r
a
ir(G)δ
rja
rj(G) )
,
cio`e, tenendo conto che a
jj(G) = 0,
p
2ij(G) = (1 − δ
ij) a
(2)ij(G), (4) come c’era da aspettarsi (una 2-passeggiata fra vertici distinti `e ovviamente un 2-cammino).
Passiamo a k = 3. Sempre applicando la (1) e tenendo conto di (4) si ottiene
p
3ij(G) = X
n r=1a
rj(G)p
2ir(G
j), (5)
con p
2ir(G
j) data dalla (4) sostituendo G con G
j: p
2ir(G
j) = (1 − δ
ir) a
(2)ir(G
j) ; dobbiamo valutare gli elementi di A
2(G
j), sfruttando (3):
a
(2)ir(G
j) = X
n s=1a
is(G
j)a
sr(G
j)
= (1 − δ
ij) (1 − δ
rj) X
s
(1 − δ
sj) a
is(G)a
sr(G) (6)
= (1 − δ
ij) (1 − δ
rj)
³
a
(2)ir(G) − a
ij(G)a
jr(G)
´
(si osservi che (1 − δ
sj)
2= 1 − δ
sj); quindi, p
2ir(G
j) = (1 − δ
ir) (1 − δ
ij) (1 − δ
rj) ³
a
(2)ir(G) − a
ij(G)a
jr(G) ´
(7) sostituendo nella (5) otteniamo:
p
3ij(G) = (1 − δ
ij) X
n r=1(1 − δ
ir) (1 − δ
rj) a
rj(G) n
a
(2)ir(G) − a
ij(G)a
jr(G) o
che con semplici passaggi (in cui si sfrutta il fatto che a
ii= 0, che a
3ij= a
ije che P
r
a
ir`e uguale al grado d
idel vertice v
i) diventa p
3ij(G) = (1 − δ
ij) n
a
(3)ij(G) − a
ij(G)(d
i(G) + d
j(G) − 1) o
(8)
Studiamo il caso k = 4. Sempre applicando la (1) si ha p
4ij(G) = X
r
a
rj(G)p
3ir(G
j); (9)
d’altra parte, per la (8) vale p
3ir(G
j) = (1 − δ
ir) n
a
(3)ir(G
j) − a
ir(G
j)(d
i(G
j) + d
r(G
j) − 1) o
, (10) con
d
i(G) = a
(2)iigrado del vertice v
inel grafo G; evidentemente vale
d
i(G
j) = (1 − δ
ij) (d
i(G) − a
ij(G)) ; (11) a
ir(G
j) `e dato dalla (3), resta da calcolare la matrice A
3(G
j):
a
(3)ir(G
j) = X
s
a
is(G
j)a
(2)sr(G
j)
= (1 − δ
ij) (1 − δ
rj) X
s
(1 − δ
sj) a
is(G) n
a
(2)sr(G) − a
sj(G)a
jr(G) o
,
cio`e, in definitiva,
a
(3)ir(G
j) = (1 − δ
ij) (1 − δ
rj) n
a
(3)ir(G) − a
jr(G)a
(2)ij(G) − a
ij(G)a
(2)rj(G) o
(12) Sostituendo (11) e (12) in (10) si ottiene
1p
3ir(G
j) = (1 − δ
ir) (1 − δ
ij) (1 − δ
rj) n
a
(3)ir− a
(2)ija
rj− a
ija
(2)rj− a
ir(d
i+ d
r− a
ij− a
rj− 1) o (13)
Sostituendo in (9) si ottiene
p
4ij= (1 − δ
ij) (
a
(4)ij− a
(2)ij(d
i+ d
j− 3a
ij− 2) − a
ij³
a
(3)ii+ a
(3)jj´
− X
r
d
ra
ira
rj)
1Spesso, nel seguito di questo appunto, ometteremo la specificazione ”da 1 a n” nelle sommatoie con tale range e la specificazione ”(G)” per le grandezze relative a tale grafo
2 Numero dei cicli in un grafo.
Per ogni intero k, denotiamo con C
jkil numero di k-cicli passanti per il vertice v
je con C
k(G) il numero totale di k-cicli nel grafo; evidentemente,
C
k(G) = 1 k
X
n j=1C
jk(14)
Per calcolare C
jkpossiamo utilizzare la formula
C
jk= 1 2
X
i,r
(1 − δ
ir) a
ija
rjp
k−2ir(G
j) ; (15)
infatti, un k-ciclo passante per v
j`e individuato da due vertici v
i, v
radiacenti a v
je da un (k − 2)-cammino da v
ia v
rnon passante per v
j(il fattore 1/2 deriva dal fatto che scambiando v
icon v
ril k-ciclo non cambia). Notiamo che, combinando (14) con (15) e con (1), si ottiene
C
k(G) = 1 2k
X
i,j
a
ijp
k−1ij= 1
2k T r (AP
k−1) ,
che si sarebbe potuta ricavare direttamente considerando che: 1) ogni k-ciclo passante per il lato v
iv
j`e la somma di tale lato con un (k − 1)-cammino da v
ia v
j; 2) sommando il numero di cicli di cui al punto 1) su tutte le coppie ordinate (v
i, v
j) tali che v
i∼ v
j, ogni ciclo risulta contato 2k volte (perch`e contiene k lati e pu`o essere percorso in due versi distinti).
Tornando alle formule (14), (15), consideriamo il caso pi` u semplice, k = 3;
per la (14), il numero di triangoli nel grafo G `e:
C
3(G) = 1 3
X
n j=1C
j3;
d’altra parte, applicando (15) si ha C
j3= 1
2 X
i,r
(1 − δ
ir) a
ija
rjp
1ir(G
j) ,
che, ricordando (3), ci fornisce il numero dei triangoli passanti per v
j: C
j3= 1
2 X
i,r
(1 − δ
ir) (1 − δ
ij) (1 − δ
rj) a
ija
rja
ir= 1 2
X
i,r
a
ija
rja
ir= 1
2 a
(3)jj;
dunque, il numero totale di triangoli in G `e C
3(G) = 1
6 T rA
3Consideriamo il caso k = 4; la (15) diventa
C
j4= X
i,r
(1 − δ
ir) a
ija
rjp
2ir(G
j); (16)
ora, applicando la (4) al grafo G
je tenendo conto di (6), si ottiene p
2ir(G
j) = (1 − δ
ir) (1 − δ
ij) (1 − δ
rj) n
a
(2)ir− a
ija
rjo
che sostituita in (16) ci d`a C
j4= 1
2 X
i,r
(1 − δ
ir) (1 − δ
ij) (1 − δ
rj) a
ija
rjn
a
(2)ir− a
ija
rjo
; (17)
ora, il prodotto dei primi tre fattori `e della forma (1 − δ
ir+ termini contenenti δ
ijo δ
rj), e questi ultimi termini non contano perch`e vanno moltiplicati per a
ija
rj, che si
annulla quando i = j oppure r = j; dunque la (17) si riduce a C
j4= 1
2 X
i,r
(1 − δ
ir) a
ija
rjn
a
(2)ir− a
ija
rjo
= 1 2
(
a
(4)jj− d
2j− X
i
a
ijd
i+ d
j)
;
ma allora la (14) diventa
C
4(G) = 1 4
X
j
C
j4= 1 8
T rA
4− 2 X
j
d
2j+ 2 X
j
d
j
= 1 8 T r
n
A
4− 2 b d
2+ b d o
,
essendo b d = kd
iδ
ijk l”operatore diagonale associato alla funzione grado d.
Consideriamo ora il caso k = 5, i calcoli sono analoghi ai precedenti, solo un
po’ pi` u lunghi... Il numero di 5-cicli passanti per il vertice v
j`e C
j5= 1
2 X
i,r
(1 − δ
ir) a
ija
rjp
3ir(G
j)
= 1 2
X
i,r
(1 − δ
ir) (1 − δ
ij) (1 − δ
rj) a
ija
rjn
a
(3)ir− a
(2)ija
rj− a
ija
(2)rj− a
ir(d
i+ d
r− a
ij− a
rj− 1) o
= 1 2
X
i,r
(1 − δ
ir− δ
ij− δ
rj+ · · · − δ
irδ
ijδ
rj) a
ija
rjn
a
(3)ir− a
(2)ija
rj− a
ija
(2)rj− a
ir(d
i+ d
r− a
ij− a
rj− 1) o
= 1 2
X
i,r
(1 − δ
ir) a
ija
rjn
a
(3)ir− a
(2)ija
rj− a
ija
(2)rj− a
ir(d
i+ d
r− a
ij− a
rj− 1) o
;
nell’ultimo passaggio si `e sfruttato il fatto che, quando i = j oppure r = j, il fattore a
ija
rjsi annulla; quindi, nello sviluppo della sommatoria a penultimo membro, si annullano tutte le ”sottosommatorie” contenenti i fattori δ
ijo δ
rj; sviluppando l’ultimo membro si ottiene
C
j5= 1 2
(
a
(5)jj− 2a
(3)jjd
j− 2 X
i
d
ia
ija
(2)ij+ 5a
(3)jj− X
i
a
(3)iia
ij)
;
applicando la (14) per k = 5 otteniamo il numero totale di 5-cicli in G:
C
5(G) = 1 10
T rA
5+ 5T rA
3− 5 X
j