added ex4
This commit is contained in:
		| @@ -2,6 +2,7 @@ | |||||||
| """ | """ | ||||||
| Nom/Prénom: Heredero/Louis | Nom/Prénom: Heredero/Louis | ||||||
| Explications: | Explications: | ||||||
|  |  | ||||||
| Tout d'abord, le réseau de routes et d'intersections peut être représenté par un graphe, | Tout d'abord, le réseau de routes et d'intersections peut être représenté par un graphe, | ||||||
| dans lequel les interséctions sont les nœuds et les routes les arêtes. | dans lequel les interséctions sont les nœuds et les routes les arêtes. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								src/Ex4.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/Ex4.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  |  | ||||||
|  | """ | ||||||
|  | Nom/Prénom: Heredero/Louis | ||||||
|  | Explications: | ||||||
|  |  | ||||||
|  | Une approche pour résoudre ce problème grâce à la programmation dynamique consiste | ||||||
|  | à se représenter les différentes séquences comme un arbre de décisions, où chaque nœud | ||||||
|  | représente une séquence, et chaque arête un coup supplémentaire | ||||||
|  | On peut alors parcourir l'arbre en profondeur (DFS) jusqu'à trouver une séquence | ||||||
|  | de longueur N et de valeur H (en élaguant les branches dépassant H ou N) | ||||||
|  | On peut également mémoiser un certain nombre de valeurs : en effet, pour une même | ||||||
|  | combinaison N, C, H, le résultat sera toujours le même. Cela optimise donc grandement | ||||||
|  | le calcul récursif puisque cela évite de calculer les états partagés (sous-branches | ||||||
|  | identiques) | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | mem: dict[tuple[int, int, int], int] = {} | ||||||
|  |  | ||||||
|  | def computeNbrOfDifferentSequences(N: int, C: int, H: int) -> int: | ||||||
|  |     if N == 0: | ||||||
|  |         if H == 0: | ||||||
|  |             return 1 | ||||||
|  |         return 0 | ||||||
|  |  | ||||||
|  |     if H < 0: | ||||||
|  |         return 0 | ||||||
|  |  | ||||||
|  |     key: tuple[int, int, int] = (N, C, H) | ||||||
|  |     if key in mem: | ||||||
|  |         return mem[key] | ||||||
|  |  | ||||||
|  |     total: int = 0 | ||||||
|  |     for c in range(1, C + 1): | ||||||
|  |         total += computeNbrOfDifferentSequences(N - 1, C, H - c) | ||||||
|  |  | ||||||
|  |     mem[key] = total | ||||||
|  |     return total | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     print(computeNbrOfDifferentSequences(1, 6, 3) == 1) | ||||||
|  |     print(computeNbrOfDifferentSequences(2, 6, 7) == 6) | ||||||
| @@ -1,8 +1,21 @@ | |||||||
| import unittest | import unittest | ||||||
|  |  | ||||||
|  | from Ex4 import computeNbrOfDifferentSequences | ||||||
|  |  | ||||||
|  |  | ||||||
| class MyTestCase(unittest.TestCase): | class MyTestCase(unittest.TestCase): | ||||||
|     def test_simple1(self): |     def test_simple1(self): | ||||||
|         pass |         self.assertEqual( | ||||||
|  |             computeNbrOfDifferentSequences(1, 6, 3), | ||||||
|  |             1 | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def test_simple2(self): | ||||||
|  |         self.assertEqual( | ||||||
|  |             computeNbrOfDifferentSequences(2, 6, 7), | ||||||
|  |             6 | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user