Pouknouki

Concours blanc Python

May 12th, 2016
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.16 KB | None | 0 0
  1. import numpy as np
  2.  
  3. def nbSomme3(n):
  4.     renvoye = []
  5.     for i in range(1, 7):
  6.         for j in range(1, 7):
  7.             for k in range(1, 7):
  8.                 if i + j + k == n:
  9.                     renvoye.append([i, j, k])
  10.     return len(renvoye)
  11.    
  12. def proba():
  13.     dict = {}
  14.     for i in range(1, 19):
  15.         dict[i] = nbSomme3(i) / 216
  16.     return dict
  17.    
  18. def esperance():
  19.     somme = 0
  20.     res = proba()
  21.     for valeur in range(3, 19):
  22.         somme += valeur * res[valeur]
  23.     return somme
  24.    
  25. def nbSomme(d, s):
  26.     nb = 0
  27.     if d == 1:
  28.         if s in [1, 2, 3, 4, 5, 6]:
  29.             return 1
  30.         else:
  31.             return 0
  32.            
  33.     for i in range(1, 7):
  34.         nb += nbSomme(d-1, s-i)
  35.     return nb
  36.    
  37. def nbSommeImp(d, s):
  38.     return -1
  39.    
  40. #Exercice 2
  41.  
  42. #5. On utilise A.shape()[0] pour les lignes, A.shape()[1] pour les colonnes
  43.  
  44. def colonnes(A):
  45.     return A.shape[1]
  46.    
  47. def lignes(A):
  48.     return A.shape[0]
  49.  
  50. def produit(A, B):
  51.     assert colonnes(A) == lignes(B), "Matrices incompatibles"
  52.     n, q = lignes(A), colonnes(B)
  53.     renvoye = np.zeros((n, q))
  54.     com = 0
  55.     for i in range(n):
  56.         for j in range(q):
  57.             for k in range(colonnes(A)):
  58.                 renvoye[i][j] += A[i][k] * B[k][j]
  59.                 com+=1
  60.     return renvoye
  61.    
  62. A = np.array(([1,3,4,1],[4,5,6,8],(8,3,0,5),(3,5,6,4)))
  63. B = np.array(((3,4,1),(2,1,4),(8,3,0)))
  64.  
  65. # produit(A,B)
  66.  
  67. #7 Complexité : n*p*q (for avec n, for avec q, for avec p), pour une matrice carrée : n³
  68.  
  69. def strassen(A, B):
  70.     if lignes(A) == 2:
  71.         return produit(A, B)
  72.     else:
  73.         n = lignes(A)
  74.         A1, A2, A3, A4, B1, B2, B3, B4 = np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2))
  75.         #Construction A1
  76.         for i in range(int(n/2)):
  77.             for j in range(int(n/2)):
  78.                 A1[i, j] = A[i, j]
  79.                
  80.         #Construction A2
  81.         for i in range(int(n/2)):
  82.             for j in range(int(n/2), int(n)):
  83.                 A2[i, j - int(n/2)] = A[i, j]
  84.                
  85.         #Construction A3
  86.         for i in range(int(n/2), int(n)):
  87.             for j in range(int(n/2)):
  88.                 A3[i - int(n/2), j] = A[i, j]
  89.                
  90.         #Construction A4
  91.         for i in range(int(n/2), int(n)):
  92.             for j in range(int(n/2), int(n)):
  93.                 A4[i - int(n/2), j - int(n/2)] = A[i, j]
  94.  
  95.         #Construction B1
  96.         for i in range(int(n/2)):
  97.             for j in range(int(n/2)):
  98.                 B1[i, j] = B[i, j]
  99.                
  100.         #Construction B2
  101.         for i in range(int(n/2)):
  102.             for j in range(int(n/2), int(n)):
  103.                 B2[i, j - int(n/2)] = B[i, j]
  104.                
  105.         #Construction B3
  106.         for i in range(int(n/2), int(n)):
  107.             for j in range(int(n/2)):
  108.                 B3[i - int(n/2), j] = B[i, j]
  109.                
  110.         #Construction B4
  111.         for i in range(int(n/2), int(n)):
  112.             for j in range(int(n/2), int(n)):
  113.                 B4[i - int(n/2), j - int(n/2)] = B[i, j]
  114.         print("Appel")
  115.         print(A)
  116.         print(B1)
  117.         print(B2)
  118.         print(B3)
  119.         print(B4)
  120.         C1, C2, C3, C4 = np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2)), np.zeros((n/2,n/2))
  121.         M1 = strassen((A1 + A4), (B1 + B4))
  122.         M2 = strassen((A3 + A4), B1)  
  123.         M3 = strassen(A1, (B2 - B4))
  124.         M4 = strassen(A4, (B3 - B1))
  125.         M5 = strassen((A1 + A2), B4)
  126.         M6 = strassen((A3 - A1), (B1 + B2))
  127.         M7 = strassen((A2 - A4), (B3 + B2))
  128.        
  129.         C1 = M1 + M4 - M5 + M7
  130.         C2 = M3 + M5
  131.         C3 = M2 + M4
  132.         C4 = M1 - M2 + M3 + M6
  133.        
  134.         C = np.zeros((n, n))
  135.        
  136.         for i in range(int(n/2), int(n/2)):
  137.             for j in range(int(n/2), int(n/2)):
  138.                 C[i][j] = C1[i][j]
  139.                 C[i][j+int(n/2)] = C2[i][j]
  140.                 C[i+int(n/2)][j] = C3[i][j]
  141.                 C[i+int(n/2)][j+int(n/2)] = C4[i][j]
  142.         return C              
  143.        
  144. print(strassen(A, A))
Advertisement
Add Comment
Please, Sign In to add comment