====== Counting triangles ====== 10. april 2014 {{notes:pics:triangles.jpg?400}} T = AT, S = A + T Each triangle appears exactly once in AAA + AAT + TAT + TAA = AAS + TAS = SAS def VecSum(a,b): n = len(a) c = [0 for i in range(n)] for i in range(n): c[i] = a[i]+b[i] return(c) def MatList(M,names=None): n = len(M) for i in range(n): if names==None: print('[',i+1,') =',M[i]) else: print('[',names[i],') = ',M[i]) def MatTrans(A): nr = len(A); nc = len(A[0]) T = [[ 0 for i in range(nr)] for j in range(nc)] for u in range(nr): for v in range(nc): T[v][u] = A[u][v] return(T) def MatSym(A): nr = len(A); nc = len(A[0]) if nr!=nc: return(None) B = [[ 0 for i in range(nr)] for j in range(nr)] for u in range(nr-1): for v in range(u+1,nr): B[u][v] = A[u][v]+A[v][u] B[v][u] = B[u][v] return(B) def MatBin(A): nr = len(A); nc = len(A[0]) B = [[ 0 for i in range(nc)] for j in range(nr)] for u in range(nr): for v in range(nc): B[u][v] = int(A[u][v]>0) return(B) def MatSetDiag(A,const): nr = len(A); nc = len(A[0]) if nr!=nc: return(None) B = A for u in range(nr): B[u][u] = const return(B) def MatSum(A,B): nra = len(A); nca = len(A[0]); nrb = len(B); ncb = len(B[0]); if nra!=nrb: return(None) if nca!=ncb: return(None) C = [[ 0 for i in range(nca)] for j in range(nra)] for u in range(nra): for v in range(nca): C[u][v] = A[u][v]+B[u][v] return(C) def MatProd(A,B): nra = len(A); nca = len(A[0]); nrb = len(B); ncb = len(B[0]); if nca!=nrb: return(None) C = [[ 0 for i in range(ncb)] for j in range(nra)] for u in range(nra): for v in range(ncb): s = 0 for t in range(nca): s = s+A[u][t]*B[t][v] C[u][v] = s return(C) def MatProdDiag(A,B): nra = len(A); nca = len(A[0]); nrb = len(B); ncb = len(B[0]); if nca!=nrb: return(None) if nra!=ncb: return(None) x = [ 0 for u in range(nra)] for u in range(nra): s = 0 for v in range(nca): s = s+A[u][v]*B[v][u] x[u] = s return(x) A = [[ 0 for i in range(7)] for j in range(7)] A[1][0] = 1; A[1][3] = 1; A[1][2] = 1; A[2][1] = 1 A[2][5] = 1; A[3][0] = 1; A[3][2] = 1; A[3][4] = 1 A[3][6] = 1; A[3][5] = 1; A[4][0] = 1; A[4][1] = 1 A[4][3] = 1; A[4][5] = 1; A[5][4] = 1; A[5][6] = 1 A[6][2] = 1 print("matrix A"); MatList(A) T = MatTrans(A) print("transposed A"); MatList(T) S = MatSym(A); print("symmetric A"); MatList(S) Q = MatProd(T,A); P = MatProd(A,A) print("matrix TA"); MatList(Q) print("matrix AA"); MatList(P) print("matrix A"); MatList(A) tl = MatProdDiag(P,S) print("left =",tl) tr = MatProdDiag(S,Q) print("right =",tr) print("total =",VecSum(tl,tr)) ta = MatProdDiag(P,A); print("AAA =",ta) tb = MatProdDiag(P,T); print("AAT =",tb) tc = MatProdDiag(A,Q); print("ATA =",tc) td = MatProdDiag(T,Q); print("TTA =",td) print("tri =",VecSum(VecSum(ta,tb),VecSum(tc,td))) {{notes:pics:testa.png?400}} {{tq:pics:count.pdf|Picture of the test graph}} matrix A [ 1 ) = [0, 0, 0, 0, 0, 0, 0] [ 2 ) = [1, 0, 1, 1, 0, 0, 0] [ 3 ) = [0, 1, 0, 0, 0, 1, 0] [ 4 ) = [1, 0, 1, 0, 1, 1, 1] [ 5 ) = [1, 1, 0, 1, 0, 1, 0] [ 6 ) = [0, 0, 0, 0, 1, 0, 1] [ 7 ) = [0, 0, 1, 0, 0, 0, 0] transposed A [ 1 ) = [0, 1, 0, 1, 1, 0, 0] [ 2 ) = [0, 0, 1, 0, 1, 0, 0] [ 3 ) = [0, 1, 0, 1, 0, 0, 1] [ 4 ) = [0, 1, 0, 0, 1, 0, 0] [ 5 ) = [0, 0, 0, 1, 0, 1, 0] [ 6 ) = [0, 0, 1, 1, 1, 0, 0] [ 7 ) = [0, 0, 0, 1, 0, 1, 0] symmetric A [ 1 ) = [0, 1, 0, 1, 1, 0, 0] [ 2 ) = [1, 0, 2, 1, 1, 0, 0] [ 3 ) = [0, 2, 0, 1, 0, 1, 1] [ 4 ) = [1, 1, 1, 0, 2, 1, 1] [ 5 ) = [1, 1, 0, 2, 0, 2, 0] [ 6 ) = [0, 0, 1, 1, 2, 0, 1] [ 7 ) = [0, 0, 1, 1, 0, 1, 0] matrix TA [ 1 ) = [3, 1, 2, 2, 1, 2, 1] [ 2 ) = [1, 2, 0, 1, 0, 2, 0] [ 3 ) = [2, 0, 3, 1, 1, 1, 1] [ 4 ) = [2, 1, 1, 2, 0, 1, 0] [ 5 ) = [1, 0, 1, 0, 2, 1, 2] [ 6 ) = [2, 2, 1, 1, 1, 3, 1] [ 7 ) = [1, 0, 1, 0, 2, 1, 2] matrix AA [ 1 ) = [0, 0, 0, 0, 0, 0, 0] [ 2 ) = [1, 1, 1, 0, 1, 2, 1] [ 3 ) = [1, 0, 1, 1, 1, 0, 1] [ 4 ) = [1, 2, 1, 1, 1, 2, 1] [ 5 ) = [2, 0, 2, 1, 2, 1, 2] [ 6 ) = [1, 1, 1, 1, 0, 1, 0] [ 7 ) = [0, 1, 0, 0, 0, 1, 0] matrix SA [ 1 ) = [3, 1, 2, 2, 1, 2, 1] [ 2 ) = [2, 3, 1, 1, 1, 4, 1] [ 3 ) = [3, 0, 4, 2, 2, 1, 2] [ 4 ) = [3, 3, 2, 3, 1, 3, 1] [ 5 ) = [3, 0, 3, 1, 4, 2, 4] [ 6 ) = [3, 3, 2, 2, 1, 4, 1] [ 7 ) = [1, 1, 1, 0, 2, 2, 2] matrix A [ 1 ) = [0, 0, 0, 0, 0, 0, 0] [ 2 ) = [1, 0, 1, 1, 0, 0, 0] [ 3 ) = [0, 1, 0, 0, 0, 1, 0] [ 4 ) = [1, 0, 1, 0, 1, 1, 1] [ 5 ) = [1, 1, 0, 1, 0, 1, 0] [ 6 ) = [0, 0, 0, 0, 1, 0, 1] [ 7 ) = [0, 0, 1, 0, 0, 0, 0] tri = [4, 6, 5, 14, 9, 7, 3] AAA = [0, 2, 2, 3, 2, 2, 1] AAT = [0, 2, 0, 6, 4, 0, 0] ATA = [0, 2, 1, 4, 2, 2, 1] TTA = [4, 0, 2, 1, 1, 3, 1] tri = [4, 6, 5, 14, 9, 7, 3]