Files
TD4_DEV51_HOCHLAF/README.md
2025-10-15 14:00:35 +02:00

105 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TD4 - DEV5.1 Qualité algorithmique
Complexité algorithmique
## Ex 2 - Calculs de complexité de fonctions
Calculez la complexité des fonctions suivantes :
![alt text](image/function_1.png)
Ici on prend un tableau 1 contenant **n** valeurs et un tableau 2 contenant **m** valeurs.
On parcour entièrement les deux pour savoir si une valeur ce trouve dans l'autre tableau.
On a donc :
> O ( n x m )
![alt text](image/function_2.png)
Ici on prend un une variable x de valeur **n**.
Tant que x est positif, on le décrémente pour arriver a 0
On a donc :
> O ( n ) ou O ( x )
![alt text](image/function_3.png)
Cette fonction n'a pas de boucle donc elle ne ce répète pas.
On a donc :
> O ( 1 )
## Ex 3 - Algorithme de tri
- Créer un algorithme pour trier un tableau à N dimensions de M valeurs
- Chaque dimension doit être trié par ordre croissant de la somme des valeurs de la
dimension inférieur
- Exemple pour un tableau à 2 dimensions de 3 valeurs
[ [0,3,2], [9,4,5], [4,1,3] ] → [ [0,2,3], [1,3,4], [4,5,9] ]
- Calculer la complexité algorithmique de lalgorithme écrit
* la complecitée de ce programme est de O(n(m²+n))
```python
def Trie_Tableau_Double(tab) : # complexitée O(n(m²+n))
sorted_dico = {}
print(tab[0])
# n^(m+m*((m(m+1))/2))+n((m(m+1))/2)
for sub_tab in tab : # n
val = 0
sub_tab2 = []
for elt in sub_tab : # m
val += elt
for i in range(len(sub_tab)): # m
if i == 0 :
sub_tab2.append(sub_tab[i])
else :
for j in range(len(sub_tab2)+1): # (m(m+1))/2
if j >= len(sub_tab2):
sub_tab2.append(sub_tab[i])
else :
if sub_tab[i] <= sub_tab2[j] :
sub_tab2.insert(j,sub_tab[i])
break
sorted_dico[val] = sub_tab2
tab = []
index_tab = []
# n*(m(m+1))/2
for clef,valeur in sorted_dico.items() : # n
if index_tab == [] :
tab.append(valeur)
index_tab.append(clef)
else :
for j in range(len(index_tab)+1): # (m(m+1))/2
if j >= len(index_tab):
tab.append(valeur)
index_tab.append(clef)
else :
if clef <= index_tab[j] :
tab.insert(j,valeur)
index_tab.insert(j,clef)
break
return tab
```
* la complecitée de ce programme est de O(n*m * log(m))
```python
def Trie_Tableau_Double_bySort(tab) : # complexitée O(n*m * log(m))
tab.sort() # n log(n)
for sub_tab in tab : # n
sub_tab.sort() # m log(m)
return tab
```