suppression dossier diviser pour regner
This commit is contained in:
@@ -1,82 +0,0 @@
|
|||||||
# Diviser pour régner
|
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
Parfois la résolution d'un problème peut être très longue et répétitive. Il s'agit d'appliquer une méthode encore et encore jusqu'à obtenir une solution.
|
|
||||||
Par exemple lorsque l'on recherche un élément dans un tableau, on regarde le premier élément, puis le second ainsi de suite...
|
|
||||||
|
|
||||||
La méthode diviser pour régner permet de décomposer un problème en sous-problèmes. Une fois les sous-problèmes crées on les résout puis on combine les résultats de ces sous problème pour trouver le résultat final.
|
|
||||||
|
|
||||||
Le tout se fait de manière récursive.
|
|
||||||
|
|
||||||
Récapitulons :
|
|
||||||
|
|
||||||
- Décomposition du problème en sous problèmes
|
|
||||||
- Résolution des sous problèmes
|
|
||||||
- Combinaison des résultats
|
|
||||||
|
|
||||||
Nous allons ici parler de la recherche dichotomique afin d'illustrer notre propos. Ce n'est pas le meilleur exemple, mais c'est le plus trivial. Nous profiterons de la partie TP pour voir d'autres applications de cette méthode.
|
|
||||||
|
|
||||||
## 1. Recherche dichotomique
|
|
||||||
|
|
||||||
### 1. 1. Principe
|
|
||||||
|
|
||||||
La recherche dichotomique est une recherche d'un élément dans un tableau trié. Il s'agit de la recherche optimale pour ce type de situation.
|
|
||||||
|
|
||||||
<u>Recherche dans un tableau :</u>
|
|
||||||
|
|
||||||
Tant que l'indice de début est inférieur à l'indice de fin :
|
|
||||||
|
|
||||||
- Sélectionner la valeur au milieu du tableau
|
|
||||||
|
|
||||||
- Si la valeur du milieu est supérieur à la valeur recherchée
|
|
||||||
- Rechercher dans la partie gauche du tableau
|
|
||||||
|
|
||||||
- Si la valeur du milieu est inférieur à la valeur recherchée
|
|
||||||
- Rechercher dans la partie droite du tableau
|
|
||||||
- Sinon
|
|
||||||
- Renvoyer la valeur recherchée
|
|
||||||
|
|
||||||
### 1. 2. Diviser pour régner sur la recherche dichotomique
|
|
||||||
|
|
||||||
<u>**Décomposition du problème en sous problèmes :**</u>
|
|
||||||
|
|
||||||
Afin d'appliquer la méthode, il faut dans un premier temps diviser le problème en sous problèmes.
|
|
||||||
|
|
||||||
C'est pourquoi l'exemple de la recherche dichotomique n'est pas le meilleur, car il décompose le problème en 1 seul sous problème et pas en plusieurs.
|
|
||||||
|
|
||||||
Mais peut importe, la décomposition à lieu lorsqu'on recherche soit dans la partie de droite ou de gauche.
|
|
||||||
|
|
||||||
<u>**Résolution des sous problèmes :**</u>
|
|
||||||
|
|
||||||
La résolution du sous problèmes ici se fait lorsque l'on à 1 seul élément, soit il s'agit de l'élément recherché, soit ça ne l'est pas.
|
|
||||||
|
|
||||||
**<u>Combinaison des résultats :</u>**
|
|
||||||
|
|
||||||
Une fois le résultat trouvé de ce sous problème, il est renvoyé (ici pas de combinaison, il n'y a qu'un sous problème)
|
|
||||||
|
|
||||||
### 1. 3. Code de la fonction
|
|
||||||
|
|
||||||
```python
|
|
||||||
def recherche(t,v,d,f):
|
|
||||||
"""Fonction récursive de recherche
|
|
||||||
param t (tableau) : tableau dans lequel on recherche l'élément
|
|
||||||
param v ( ) : valeur à rechercher
|
|
||||||
param d (int) : indice de début de recherche dans le tableau
|
|
||||||
param f (int) : indice de fin de recherche dans le tableau
|
|
||||||
return (None/ ) : None si pas trouvé, position de v dans t sinon"""
|
|
||||||
if d > f :
|
|
||||||
return None
|
|
||||||
milieu = (d+f)//2
|
|
||||||
if t[milieu] < v :
|
|
||||||
return recherche(t,v,milieu+1,f)
|
|
||||||
elif t[milieu] > v :
|
|
||||||
return recherche(t,v,d,milieu-1)
|
|
||||||
else :
|
|
||||||
return milieu
|
|
||||||
|
|
||||||
def recherche_dichotomique(t,v):
|
|
||||||
"""Algo de recherche dichotomique, renvoie None si pas trouvé, position de v dans t sinon,
|
|
||||||
le tableau t est trié, v est la valeur à rechercher dans le tableau"""
|
|
||||||
return recherche(t,v,0,len(t)-1)
|
|
||||||
```
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
def recherche(t,v,d,f):
|
|
||||||
"""Fonction récursive de recherche
|
|
||||||
param t (tableau) : tableau dans lequel on recherche l'élément
|
|
||||||
param v ( ) : valeur à rechercher
|
|
||||||
param d (int) : indice de début de recherche dans le tableau
|
|
||||||
param f (int) : indice de fin de recherche dans le tableau
|
|
||||||
return (None/ ) : None si pas trouvé, position de v dans t sinon"""
|
|
||||||
if d > f :
|
|
||||||
return None
|
|
||||||
milieu = (d+f)//2
|
|
||||||
if t[milieu] < v :
|
|
||||||
return recherche(t,v,milieu+1,f)
|
|
||||||
elif t[milieu] > v :
|
|
||||||
return recherche(t,v,d,milieu-1)
|
|
||||||
else :
|
|
||||||
return milieu
|
|
||||||
|
|
||||||
def recherche_dichotomique(t,v):
|
|
||||||
"""Algo de recherche dichotomique, renvoie None si pas trouvé, position de v dans t sinon,
|
|
||||||
le tableau t est trié, v est la valeur à rechercher dans le tableau"""
|
|
||||||
return recherche(t,v,0,len(t)-1)
|
|
||||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB |
@@ -1,57 +0,0 @@
|
|||||||
# TP Diviser pour régner
|
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
## Tri fusion
|
|
||||||
|
|
||||||
### 1. 1. Première approche
|
|
||||||
|
|
||||||
Une fonction de tri s'applique à un tableau, ce tableau contient des éléments comparables entre eux. Le but est donc de les ranger par ordre croissant. Nous connaissons déjà le tri par insertion et le tri par sélection. Cependant en utilisant le principe de "diviser pour régner" il est possible de concevoir un tri plus efficace. Il est appelé "tri fusion".
|
|
||||||
|
|
||||||
Le tri fusion se décompose comme suit :
|
|
||||||
|
|
||||||
Le tri sépare le tableau en 2 moitiés égale (à un élément près pour les longueurs impaire) puis on trie avec le tri fusion et cela de manière récursive. Puis on trie les éléments des deux tableau triés, c'est la fusion.
|
|
||||||
|
|
||||||
1. Lorsque l'on découpe le tableau en deux parties, comment garantir que l'on arrivera à un tableau trié ?
|
|
||||||
|
|
||||||
2. Une fois ces tableaux triés obtenus, expliquer comment pouvons nous faire pour assembler ces tableaux et obtenir un nouveau tableau trié. (sans faire de code)
|
|
||||||
|
|
||||||
```
|
|
||||||
Par exemple :
|
|
||||||
Si l'on a [2,6,78] et [4,5,98] le résultat doit être [2,4,5,6,78,98]
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Dessiner l'arbre de décomposition et de fusion du tableau [7,89,15,2,65,10,8,11,1]
|
|
||||||
|
|
||||||
### 1. 2. Implémentation
|
|
||||||
|
|
||||||
L'algorithme est composé de deux fonction :
|
|
||||||
|
|
||||||
- une fonction nommée *fusion( )* prenant en paramètre deux tableau trié et faisant la fusion des deux.
|
|
||||||
- une fonction nommée *tri_fusion( )* prenant en paramètre un tableau et le décompose en deux tableaux auxquels on appliquera tri_fusion
|
|
||||||
- Les deux tableaux sont ensuites fusionnés grâce à *fusion( )*
|
|
||||||
|
|
||||||
1. Ecrire dans un premier temps la fonction *fusion( )* prenant en paramètre deux tableaux triés et effectuant la fusion des deux tableaux.
|
|
||||||
|
|
||||||
```python
|
|
||||||
>>> fusion([2,6,78],[4,5,98])
|
|
||||||
[2,4,5,6,78,98]
|
|
||||||
```
|
|
||||||
|
|
||||||
> Cette fonction ne doit pas être récursive. (=> Boucles)
|
|
||||||
|
|
||||||
2. Ecrire la fonction *tri_fusion( )* prenant en paramètre un tableau et effectue le tri fusion. La valeur renvoyée est le tableau trié
|
|
||||||
- Decomposition en 2 tableaux
|
|
||||||
- Tri fusion sur ces deux tableaux
|
|
||||||
- Fusion des deux tableaux triés
|
|
||||||
|
|
||||||
### 1. 3. Complexité
|
|
||||||
|
|
||||||
La complexité du tri fusion est intereséssante à étudier.
|
|
||||||
|
|
||||||
1. Pour cela, récuperez le fichier nommé *complexité.py*
|
|
||||||
2. Expliquez les lignes 25 à 54
|
|
||||||
3. Exécutez le code
|
|
||||||
1. Expliquez à quoi correspondent les courbes (c'est normal si elles ne sont pas lisses)
|
|
||||||
2. Bonus : Pourquoi les courbes ne sont pas lisses ?
|
|
||||||
4. Le tri fusion est-il plus efficace que les autres tris ?
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
# TP Diviser pour régner correction
|
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
## 1. Tri fusion
|
|
||||||
|
|
||||||
### 1. 1. Première approche
|
|
||||||
|
|
||||||
1. Lorsque l'on découpe le tableau en deux parties, comment garantir que l'on arrivera à un tableau trié ?
|
|
||||||
|
|
||||||
> On obtiendra des tableaux triés lorsque la longueur sera égale à 1
|
|
||||||
|
|
||||||
2. Une fois ces tableaux triés obtenus, expliquer comment pouvons nous faire pour assembler ces tableaux et obtenir un nouveau tableau trié. (sans faire de code)
|
|
||||||
|
|
||||||
```
|
|
||||||
Par exemple :
|
|
||||||
Si l'on a [2,6,78] et [4,5,98] le résultat doit être [2,4,5,6,78,98]
|
|
||||||
```
|
|
||||||
|
|
||||||
> Lorsqu'on à deux tableau, il faut ajouter les éléments un à un dans un nouveau tableau en prenant l'élément le plus petit.
|
|
||||||
> []
|
|
||||||
> [2]
|
|
||||||
>
|
|
||||||
> [2,4]
|
|
||||||
>
|
|
||||||
> [2,4,5]
|
|
||||||
>
|
|
||||||
> [2,4,5,6]
|
|
||||||
>
|
|
||||||
> ...
|
|
||||||
>
|
|
||||||
> [2,4,5,6,78,98]
|
|
||||||
|
|
||||||
3. Dessiner l'arbre de décomposition et de fusion du tableau [7,89,15,2,65,10,8,11,1]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 1. 2. Implémentation
|
|
||||||
|
|
||||||
Voir fichier python tri_fusion.py
|
|
||||||
|
|
||||||
### 1. 3. Complexité
|
|
||||||
|
|
||||||
1. Pour cela, récuperez le fichier nommé *complexité.py*
|
|
||||||
|
|
||||||
2. Expliquez les lignes 25 à 54
|
|
||||||
|
|
||||||
> Exemple de construction des resultats pour tri_fusion
|
|
||||||
> utilisation module time
|
|
||||||
|
|
||||||
3. Exécutez le code
|
|
||||||
|
|
||||||
1. Expliquez à quoi correspondent les courbes (c'est normal si elles ne sont pas lisses)
|
|
||||||
|
|
||||||
> Moyenne de temps d'exec de chaque tri en fonction de la taille du tableau
|
|
||||||
|
|
||||||
1. Bonus : Pourquoi les courbes ne sont pas lisses ?
|
|
||||||
|
|
||||||
> Car le pc effectue d'autre tâche à côté et cela influence le temps d'éxécution
|
|
||||||
|
|
||||||
4. Le tri fusion est-il plus efficace que les autres tris ?
|
|
||||||
|
|
||||||
> Oui complexité n (log2 n)
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
import matplotlib.pyplot as pylab
|
|
||||||
import time
|
|
||||||
import random
|
|
||||||
|
|
||||||
def construit_tab_alea(taille) :
|
|
||||||
"""
|
|
||||||
Fonction qui crée un tableau avec des valeur aléatoire de taille taille
|
|
||||||
param taille : (int) Taille du tableau
|
|
||||||
return : (list) Tableau à renvoyer
|
|
||||||
"""
|
|
||||||
tab = []
|
|
||||||
for i in range(taille) :
|
|
||||||
val = random.randint(0,1000)
|
|
||||||
tab.append(val)
|
|
||||||
return tab
|
|
||||||
|
|
||||||
def moyenne(tab):
|
|
||||||
moy = 0
|
|
||||||
for i in tab :
|
|
||||||
moy += i
|
|
||||||
return moy/len(tab)
|
|
||||||
|
|
||||||
##############################################################################################################################
|
|
||||||
|
|
||||||
"""
|
|
||||||
# Construction de t_temps_tri_fusion :
|
|
||||||
t_temps_tri_fusion = []
|
|
||||||
for taille in t_taille:
|
|
||||||
t_moy = []
|
|
||||||
for _ in range(3000):
|
|
||||||
tab = construit_tab_alea(taille)
|
|
||||||
t1 = time.process_time()
|
|
||||||
tri_fusion(tab)
|
|
||||||
t2 = time.process_time()
|
|
||||||
duree = t2 - t1
|
|
||||||
t_moy.append(duree)
|
|
||||||
duree_moy = moyenne(t_moy)
|
|
||||||
t_temps_tri_fusion.append(duree_moy)
|
|
||||||
|
|
||||||
print("Tri fusion fini")
|
|
||||||
"""
|
|
||||||
t_taille = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
|
|
||||||
# Courbes moyenne :
|
|
||||||
t_temps_tri_insertion_pire_cas_moy = [0.0, 0.0, 5.208333333333333e-06, 0.0, 5.208333333333333e-06, 5.208333333333333e-06, 1.0416666666666666e-05, 5.208333333333333e-06, 1.5625e-05, 5.208333333333333e-06, 1.5625e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 3.125e-05, 3.125e-05, 4.1666666666666665e-05, 4.1666666666666665e-05, 4.6875e-05, 5.208333333333334e-05, 5.208333333333334e-05, 6.25e-05, 6.25e-05, 7.291666666666667e-05, 6.770833333333333e-05, 8.333333333333333e-05, 8.333333333333333e-05, 9.895833333333333e-05, 9.895833333333333e-05, 0.000109375, 0.000109375, 0.00011979166666666666, 0.00013020833333333333, 0.00013020833333333333, 0.00015104166666666667, 0.00015104166666666667, 0.00016666666666666666, 0.00018229166666666667, 0.00017708333333333335, 0.00018229166666666667, 0.000203125, 0.000203125, 0.00022395833333333333, 0.00022395833333333333, 0.00023958333333333332, 0.00025, 0.00026041666666666666, 0.00026041666666666666, 0.00028125, 0.000296875, 0.00030208333333333335, 0.00032291666666666666, 0.000328125, 0.0003385416666666667, 0.0003541666666666667, 0.0003541666666666667, 0.0003802083333333333, 0.0003958333333333333, 0.000421875, 0.00041145833333333334, 0.0004427083333333333, 0.00044791666666666667, 0.0004583333333333333, 0.000515625, 0.000515625, 0.0005364583333333333, 0.0005364583333333333, 0.0005520833333333334, 0.0005572916666666667, 0.0005833333333333334, 0.00059375, 0.000609375, 0.0006145833333333333, 0.0006302083333333333, 0.0006458333333333333, 0.0006666666666666666, 0.0006822916666666667, 0.000703125, 0.0007239583333333333, 0.0007395833333333333, 0.0007552083333333333, 0.0007864583333333333, 0.0007864583333333333, 0.0008177083333333334, 0.000828125, 0.0008541666666666667, 0.0008697916666666667, 0.0008958333333333333, 0.00090625, 0.0009427083333333334, 0.0009635416666666667, 0.0009791666666666666, 0.0009947916666666666, 0.0010208333333333332, 0.0010260416666666666, 0.0010572916666666667, 0.001078125, 0.00109375, 0.001109375]
|
|
||||||
t_temps_tri_insertion_meilleur_cas_moy = [0.0, 5.208333333333333e-06, 0.0, 0.0, 5.208333333333333e-06, 0.0, 5.208333333333333e-06, 5.208333333333333e-06, 5.208333333333333e-06, 5.208333333333333e-06, 0.0, 5.208333333333333e-06, 1.0416666666666666e-05, 0.0, 5.208333333333333e-06, 5.208333333333333e-06, 5.208333333333333e-06, 5.208333333333333e-06, 1.0416666666666666e-05, 5.208333333333333e-06, 1.0416666666666666e-05, 5.208333333333333e-06, 1.0416666666666666e-05, 1.0416666666666666e-05, 5.208333333333333e-06, 1.0416666666666666e-05, 1.0416666666666666e-05, 5.208333333333333e-06, 1.0416666666666666e-05, 1.0416666666666666e-05, 1.0416666666666666e-05, 1.0416666666666666e-05, 1.0416666666666666e-05, 5.208333333333333e-06, 1.5625e-05, 1.0416666666666666e-05, 1.0416666666666666e-05, 1.5625e-05, 1.0416666666666666e-05, 5.208333333333333e-06, 1.5625e-05, 1.0416666666666666e-05, 1.5625e-05, 1.0416666666666666e-05, 1.5625e-05, 1.5625e-05, 1.5625e-05, 1.0416666666666666e-05, 1.5625e-05, 1.5625e-05, 1.5625e-05, 1.5625e-05, 1.5625e-05, 1.0416666666666666e-05, 1.0416666666666666e-05, 1.5625e-05, 2.0833333333333333e-05, 1.5625e-05, 1.5625e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 1.5625e-05, 1.5625e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 1.5625e-05, 2.0833333333333333e-05, 1.5625e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 1.5625e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.0833333333333333e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.604166666666667e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 3.125e-05, 2.604166666666667e-05, 3.125e-05, 2.604166666666667e-05]
|
|
||||||
t_temps_tri_fusion = [0.0, 0.0, 5.208333333333333e-06, 0.0, 1.0416666666666666e-05, 1.5625e-05, 5.208333333333333e-06, 2.604166666666667e-05, 5.208333333333333e-06, 2.604166666666667e-05, 2.0833333333333333e-05, 1.0416666666666666e-05, 2.604166666666667e-05, 4.6875e-05, 3.6458333333333336e-05, 5.7291666666666666e-05, 5.7291666666666666e-05, 4.1666666666666665e-05, 4.6875e-05, 6.25e-05, 7.291666666666667e-05, 7.8125e-05, 6.770833333333333e-05, 7.291666666666667e-05, 6.25e-05, 9.375e-05, 8.854166666666667e-05, 0.00011979166666666666, 0.00013020833333333333, 8.854166666666667e-05, 8.854166666666667e-05, 0.000109375, 8.854166666666667e-05, 0.00011458333333333333, 0.00013020833333333333, 0.00013020833333333333, 0.00013020833333333333, 0.00011979166666666666, 0.00015104166666666667, 0.000140625, 0.00011979166666666666, 0.00017708333333333335, 0.00016145833333333333, 0.00013541666666666666, 0.0001875, 0.00019791666666666666, 0.00017708333333333335, 0.00016666666666666666, 0.00019270833333333333, 0.00016666666666666666, 0.00023958333333333332, 0.000203125, 0.00021354166666666668, 0.00021354166666666668, 0.000234375, 0.00022395833333333333, 0.00022395833333333333, 0.000234375, 0.00023958333333333332, 0.00026041666666666666, 0.00023958333333333332, 0.0003125, 0.000328125, 0.00030729166666666665, 0.000328125, 0.00030208333333333335, 0.00028125, 0.00028645833333333333, 0.00030729166666666665, 0.00030729166666666665, 0.0002916666666666667, 0.000328125, 0.00030208333333333335, 0.00030729166666666665, 0.00034375, 0.0003177083333333333, 0.00032291666666666666, 0.0003333333333333333, 0.00030208333333333335, 0.00032291666666666666, 0.00034895833333333334, 0.0003541666666666667, 0.0003958333333333333, 0.000390625, 0.0004166666666666667, 0.00040625, 0.000359375, 0.0004010416666666667, 0.000375, 0.000390625, 0.000390625, 0.00036979166666666665, 0.00044791666666666667, 0.00044791666666666667, 0.00040625, 0.0004427083333333333, 0.00040625, 0.0003958333333333333, 0.0004635416666666667, 0.000421875]
|
|
||||||
t_temps_selection_moy = [0.0, 5.208333333333333e-06, 5.208333333333333e-06, 1.0416666666666666e-05, 5.208333333333333e-06, 1.0416666666666666e-05, 2.0833333333333333e-05, 1.5625e-05, 2.0833333333333333e-05, 2.604166666666667e-05, 3.125e-05, 3.125e-05, 3.6458333333333336e-05, 3.6458333333333336e-05, 3.6458333333333336e-05, 4.6875e-05, 4.1666666666666665e-05, 4.6875e-05, 5.208333333333334e-05, 5.7291666666666666e-05, 5.7291666666666666e-05, 6.25e-05, 6.25e-05, 7.291666666666667e-05, 7.8125e-05, 7.8125e-05, 8.854166666666667e-05, 9.375e-05, 9.895833333333333e-05, 0.00010416666666666667, 0.00010416666666666667, 0.000109375, 0.00011979166666666666, 0.00011979166666666666, 0.000125, 0.000125, 0.000140625, 0.00013541666666666666, 0.00015104166666666667, 0.00015104166666666667, 0.00016666666666666666, 0.00016666666666666666, 0.000171875, 0.00017708333333333335, 0.00018229166666666667, 0.00019270833333333333, 0.000203125, 0.000203125, 0.00020833333333333335, 0.00022395833333333333, 0.00022395833333333333, 0.000234375, 0.000234375, 0.00023958333333333332, 0.0002552083333333333, 0.00026041666666666666, 0.000265625, 0.0002708333333333333, 0.00028645833333333333, 0.00028645833333333333, 0.00030208333333333335, 0.00030208333333333335, 0.0003125, 0.0003177083333333333, 0.000328125, 0.0003385416666666667, 0.00034375, 0.000359375, 0.000359375, 0.00036979166666666665, 0.0003802083333333333, 0.00038541666666666667, 0.0003958333333333333, 0.00040625, 0.000421875, 0.00043229166666666665, 0.00043229166666666665, 0.000453125, 0.000453125, 0.0004635416666666667, 0.00046875, 0.00047395833333333334, 0.0005, 0.0005104166666666666, 0.0005260416666666666, 0.00053125, 0.0005416666666666666, 0.0005416666666666666, 0.0005520833333333334, 0.0005625, 0.000578125, 0.0005885416666666667, 0.0005989583333333333, 0.0006145833333333333, 0.0006197916666666667, 0.000640625, 0.000640625, 0.0006614583333333333, 0.0006875, 0.0006927083333333334]
|
|
||||||
|
|
||||||
pylab.plot(t_taille,t_temps_tri_insertion_pire_cas_moy,label = 'tri insertion pire cas')
|
|
||||||
pylab.plot(t_taille,t_temps_tri_insertion_meilleur_cas_moy,label = 'tri insertion meilleur cas')
|
|
||||||
pylab.plot(t_taille,t_temps_selection_moy,label = 'tri selection')
|
|
||||||
pylab.plot(t_taille,t_temps_tri_fusion,label = 'tri fusion')
|
|
||||||
pylab.legend()
|
|
||||||
pylab.show()
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
def fusion(t1,t2):
|
|
||||||
"""Fusionne deux tableau trié en un seul.
|
|
||||||
param t1 (tab) : premier tableau trié
|
|
||||||
param t2 (tab) : second tableau trié
|
|
||||||
return (tab) : fusion des deux tableaux"""
|
|
||||||
global compteur
|
|
||||||
tab_final = []
|
|
||||||
ind1 = 0
|
|
||||||
ind2 = 0
|
|
||||||
while ind1<len(t1) and ind2<len(t2):
|
|
||||||
if t1[ind1] < t2[ind2] :
|
|
||||||
tab_final.append(t1[ind1])
|
|
||||||
ind1+=1
|
|
||||||
else:
|
|
||||||
tab_final.append(t2[ind2])
|
|
||||||
ind2+=1
|
|
||||||
while ind1<len(t1) :
|
|
||||||
tab_final.append(t1[ind1])
|
|
||||||
ind1+=1
|
|
||||||
while ind2<len(t2) :
|
|
||||||
tab_final.append(t2[ind2])
|
|
||||||
ind2+=1
|
|
||||||
return tab_final
|
|
||||||
|
|
||||||
def tri_fusion(t):
|
|
||||||
long = len(t)
|
|
||||||
if long <= 1 :
|
|
||||||
return t
|
|
||||||
else :
|
|
||||||
t1 = []
|
|
||||||
t2 = []
|
|
||||||
i = 0
|
|
||||||
moitie = long//2
|
|
||||||
while i < moitie :
|
|
||||||
t1.append(t[i])
|
|
||||||
t2.append(t[i+moitie])
|
|
||||||
i+=1
|
|
||||||
if (i+moitie)<(long):
|
|
||||||
t2.append(t[i+moitie])
|
|
||||||
t1 = tri_fusion(t1)
|
|
||||||
t2 = tri_fusion(t2)
|
|
||||||
return fusion(t1,t2)
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
# TD Récursivité :
|
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
## 1. Application du cours
|
|
||||||
|
|
||||||
### 1. 1. Fonction somme :
|
|
||||||
|
|
||||||
Combien d'appel de fonction sont nécessaire pour somme(0), somme(5) et somme(n) ?
|
|
||||||
|
|
||||||
> Il faut 1 appels pour somme(0), 6 pour somme(5), n+1 pour somme(n)
|
|
||||||
|
|
||||||
### 1. 2. Fonction factorielle :
|
|
||||||
|
|
||||||
1)
|
|
||||||
|
|
||||||
```python
|
|
||||||
def factorielle(n) :
|
|
||||||
if n == 0 :
|
|
||||||
return 1
|
|
||||||
else :
|
|
||||||
return n * factorielle(n-1)
|
|
||||||
```
|
|
||||||
|
|
||||||
2)
|
|
||||||
|
|
||||||
> Il y aura factorielle(4), factorielle(3), factorielle(2), factorielle(1), factorielle(0)
|
|
||||||
|
|
||||||
### 2. 1. Fonction mystère :
|
|
||||||
|
|
||||||
1. Que fait la fonction mystère ci-dessous :
|
|
||||||
|
|
||||||
> La fonction mystère affiche les entiers entre i et k
|
|
||||||
|
|
||||||
### 2. 2. Nombre de chiffre d'un nombre :
|
|
||||||
|
|
||||||
Ecrire une fonction nb_chiffre(n) permettant d'obtenir le nombre de chiffre d'un nombre :
|
|
||||||
|
|
||||||
```python
|
|
||||||
def nb_chiffre(n) :
|
|
||||||
if n <= 9 :
|
|
||||||
return 1
|
|
||||||
else :
|
|
||||||
return 1 + nb_chiffre(n//10)
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 3. Maximum d'un tableau :
|
|
||||||
|
|
||||||
```python
|
|
||||||
def maximum(t):
|
|
||||||
if len(t) == 0:
|
|
||||||
return -1
|
|
||||||
elif len(t) == 1 :
|
|
||||||
return t[0]
|
|
||||||
else :
|
|
||||||
return max(t[0], maximum(t[1:]))
|
|
||||||
```
|
|
||||||
|
|
||||||
## 3. Bonus :
|
|
||||||
|
|
||||||
### 3. 1. Suite de Syracuse :
|
|
||||||
|
|
||||||
```python
|
|
||||||
def syracuse(u):
|
|
||||||
print(u)
|
|
||||||
if u > 1 :
|
|
||||||
if u%2 == 0 :
|
|
||||||
return syracuse(u//2)
|
|
||||||
else :
|
|
||||||
return syracuse(u*3 + 1)
|
|
||||||
```
|
|
||||||
Reference in New Issue
Block a user