matrici binarie

Progettare un algoritmo che prende come parametro un intero e stampa tutte le matrici binarie .

  • le matrici binarie lunghe sono

Invece di gestire la matrice con append() e pop() come faremmo con una stringa, conviene crearla e gestirla andando avanti e indietro con gli indici.

def printmatr(n, sol, i=0, j=0):
	if i == n: # saremmo ad una riga n+1 che non esiste
		for row in sol:
			print(row)
		print()
		return
		
	i1, j1 = i, j+1
	
	if j1 == n:
		i1, j1 = i+1, 0
		
	sol[i][j] = 0
	es1(n, sol, i1, j1)
	
	sol[i][j] = 1
	es1(n, sol, i1, j)
 
def matrbin():
	sol = [[0]*n for _ in range(n)]
	printmatr(n, sol)
  • l’albero di ricorsione generato da questo algoritmo è binario di altezza , e ha quindi nodi interni e foglie.
  • ciascun nodo interno richiede e ciascuna foglia

L’algoritmo ha quindi complessità .

  • poiché le matrici da stampare sono e la stampa di una matrice richiede , l’algoritmo è ottimo.