Guest User

Untitled

a guest
Oct 20th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. #perm01.py
  2. '''
  3. Compute the permanent of a 0-1 matrix
  4. '''
  5.  
  6. import numpy as np
  7. from math import factorial
  8.  
  9. def minor(M, i, j):
  10. return np.delete(np.delete(M,i,axis=0), j, axis=1)
  11.  
  12. def perm(M):
  13. size = M.shape[0]
  14. colsums = sum(M)
  15. rowsums = sum(M.transpose())
  16. c = np.argmin(colsums)
  17. r = np.argmin(rowsums)
  18. answer = 0
  19. if colsums[c] <= rowsums[r]:
  20. if colsums[c] == size:
  21. return factorial(size)
  22. for k in range(size):
  23. if M[k, c] == 1:
  24. answer += perm(minor(M,k,c))
  25. else:
  26. for k in range(size):
  27. if M[r, k] == 1:
  28. answer += perm(minor(M,r,k))
  29. return answer
  30.  
  31. if __name__=='__main__':
  32. M = np.zeros((7,7), dtype=np.int)
  33. for k in range(7):
  34. M[k,k]=M[k,(k+1)%7]=M[k,(k-1)%7]=1
  35. M = np.ones((7,7), dtype=int)-M
  36. print(perm(M))
Add Comment
Please, Sign In to add comment