forked from menault/TD4_DEV51_Qualite_Algo
fin du td
This commit is contained in:
93
README.md
Normal file
93
README.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# Ex 2
|
||||
|
||||
```py
|
||||
def function_1(tableau1, tableau2):
|
||||
presentDansDeuxListes = 0
|
||||
for nombre1 in tableau1: # O(n)
|
||||
for nombre2 in tableau2: # O(n²)
|
||||
if nombre1 == nombre2:
|
||||
presentDansDeuxListes += 1
|
||||
break
|
||||
return presentDansDeuxListes
|
||||
```
|
||||
|
||||
cette fonction à une complexité de **O(n²)**
|
||||
|
||||
---
|
||||
|
||||
```py
|
||||
def function_2(x):
|
||||
valeur = 0
|
||||
while x > 0: # O(n)
|
||||
valeur = valeur + x
|
||||
x -= 1 # si x = 300, on passe dans le while 300 fois
|
||||
return valeur
|
||||
```
|
||||
|
||||
cette fonction a une complexité de **O(n)**
|
||||
|
||||
---
|
||||
|
||||
```py
|
||||
def function_3(x):
|
||||
valeur = 0
|
||||
if x < 0:
|
||||
valeur = -x
|
||||
if x == 0:
|
||||
pass
|
||||
if x > 0:
|
||||
valeur = x
|
||||
return valeur
|
||||
```
|
||||
|
||||
cette fonction a une complexité de **O(1)**
|
||||
|
||||
|
||||
# Ex 3
|
||||
|
||||
```py
|
||||
def entree_tri_fusion_multi(tab):
|
||||
return [tri_fusion(sub_tab) for sub_tab in tab] # Appliquer le tri fusion à chaque sous-tableau
|
||||
|
||||
def tri_fusion(tab):
|
||||
if len(tab) <= 2:
|
||||
if tab[0] > tab[-1]:
|
||||
return tab[::-1]
|
||||
return tab
|
||||
mid = len(tab) // 2 # Trouver le milieu du tableau
|
||||
left = tri_fusion(tab[:mid]) # Diviser et trier la moitié gauche
|
||||
right = tri_fusion(tab[mid:]) # Diviser et trier la moitié droite
|
||||
return fusion(left, right) # Fusionner les deux moitiés triées
|
||||
|
||||
def fusion(left, right):
|
||||
result = []
|
||||
i = j = 0
|
||||
while i < len(left) and j < len(right): # Tant qu'il reste des éléments dans les deux sous-tableaux
|
||||
if left[i] < right[j]: # Comparer les éléments des deux sous-tableaux
|
||||
result.append(left[i]) # Ajouter l'élément de gauche s'il est plus petit
|
||||
i += 1
|
||||
else:
|
||||
result.append(right[j]) # Ajouter l'élément de droite sinon
|
||||
j += 1
|
||||
result.extend(left[i:]) # Ajouter les éléments restants de gauche
|
||||
result.extend(right[j:]) # Ajouter les éléments restants de droite
|
||||
return result
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
```py
|
||||
from tri_fusion import entree_tri_fusion_multi
|
||||
|
||||
tab = [[5, 2, 9, 1, 5, 6], [3, 0, -1, 8, 7], [10, 20, 15, 30]]
|
||||
sorted_tab = entree_tri_fusion_multi(tab)
|
||||
print("Tableau trié :", sorted_tab)
|
||||
```
|
||||
|
||||
```bash
|
||||
Tableau trié : [[1, 2, 5, 5, 6, 9], [-1, 0, 3, 7, 8], [10, 15, 20, 30]]
|
||||
```
|
||||
|
||||
La complexité de l'algorithme de tri fusion est **O(n log n)** pour chaque sous-tableau, où *n* est la taille du sous-tableau. Comme `entree_tri_fusion_multi` applique le tri fusion à chaque sous-tableau indépendamment, la complexité totale dépend de la somme des tailles des sous-tableaux, mais chaque tri reste en **O(n log n)**.
|
||||
|
||||
|
BIN
__pycache__/tri_fusion.cpython-313.pyc
Normal file
BIN
__pycache__/tri_fusion.cpython-313.pyc
Normal file
Binary file not shown.
5
test.py
Normal file
5
test.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from tri_fusion import entree_tri_fusion_multi
|
||||
|
||||
tab = [[5, 2, 9, 1, 5, 6], [3, 0, -1, 8, 7], [10, 20, 15, 30]]
|
||||
sorted_tab = entree_tri_fusion_multi(tab)
|
||||
print("Tableau trié :", sorted_tab)
|
26
tri_fusion.py
Normal file
26
tri_fusion.py
Normal file
@@ -0,0 +1,26 @@
|
||||
def entree_tri_fusion_multi(tab):
|
||||
return [tri_fusion(sub_tab) for sub_tab in tab] # Appliquer le tri fusion à chaque sous-tableau
|
||||
|
||||
def tri_fusion(tab):
|
||||
if len(tab) <= 2:
|
||||
if tab[0] > tab[-1]:
|
||||
return tab[::-1]
|
||||
return tab
|
||||
mid = len(tab) // 2 # Trouver le milieu du tableau
|
||||
left = tri_fusion(tab[:mid]) # Diviser et trier la moitié gauche
|
||||
right = tri_fusion(tab[mid:]) # Diviser et trier la moitié droite
|
||||
return fusion(left, right) # Fusionner les deux moitiés triées
|
||||
|
||||
def fusion(left, right):
|
||||
result = []
|
||||
i = j = 0
|
||||
while i < len(left) and j < len(right): # Tant qu'il reste des éléments dans les deux sous-tableaux
|
||||
if left[i] < right[j]: # Comparer les éléments des deux sous-tableaux
|
||||
result.append(left[i]) # Ajouter l'élément de gauche s'il est plus petit
|
||||
i += 1
|
||||
else:
|
||||
result.append(right[j]) # Ajouter l'élément de droite sinon
|
||||
j += 1
|
||||
result.extend(left[i:]) # Ajouter les éléments restants de gauche
|
||||
result.extend(right[j:]) # Ajouter les éléments restants de droite
|
||||
return result
|
Reference in New Issue
Block a user