Skip to content
Snippets Groups Projects
README.md 6.09 KiB
Newer Older
gossa's avatar
gossa committed

# P4z : Analyse de performances de différents tris

gossa's avatar
gossa committed
[Grille d'évaluation P4z](https://docs.google.com/spreadsheets/d/1VXeO91rhy04xa0p8KUhWliFl228utHaDir8MstO5Z-M/edit?usp=sharing
gossa's avatar
gossa committed
)

gossa's avatar
gossa committed
## Problème

MATMATI AMAL's avatar
MATMATI AMAL committed
Le tri rapide pose un problème de rapidité dès lors que le tableau n'est pas aléatoire.
Comment pouvons nous observer l'impact des valeurs d'un tableau sur ce tri rapide ?



gossa's avatar
gossa committed


## Dispositif expérimental

### Application

MATMATI AMAL's avatar
MATMATI AMAL committed

Les programmes sont séparés en 4 tris :
- [le tri rapide](scripts/maintrirapide.c)
- [le tri fusion](scripts/maintrifusion.c)
- [le tri insertion](script/maintriinsertion.c)
- [le tri à bulle](scripts/maintribubble.c)
gossa's avatar
gossa committed
```
MATMATI AMAL's avatar
MATMATI AMAL committed
Usage : <type> <TailleTableau>
./rapide  Aleatoire 5000
./bulle  Trie 5000
./insertion  Reverse  5000
./fusion  Aleatoire 5000
gossa's avatar
gossa committed
```

### Environnement de test

Description de la plateforme de test
```
MATMATI AMAL's avatar
MATMATI AMAL committed
Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz

gossa's avatar
gossa committed
```

### Description de la démarche systématique


MATMATI AMAL's avatar
MATMATI AMAL committed
Script permettant de produire les données temps & mémoire :
[temps.sh](scripts/temps.sh)

Script permettant de produire les données d'écritures :
[stats.sh](scripts/stats.sh)


Afin de lancer les scripts analysant les temps & consommation mémoire :

```
Dans le dossier scripts:


./temps.sh > temps.dat
./stats.sh > stats.dat


./rapide  Aleatoire 5000
./bulle  Trie 5000
./insertion  Reverse  5000
./fusion  Aleatoire 5000
gossa's avatar
gossa committed
```
MATMATI AMAL's avatar
MATMATI AMAL committed

Afin de lancer un tri seul :
```
Dans le dossier scripts:

./rapide  Aleatoire 5000
./bulle  Trie 5000
./insertion  Reverse  5000
./fusion  Aleatoire 5000
gossa's avatar
gossa committed
```

## Résultats préalables

gossa's avatar
gossa committed
### Temps d'exécution

MATMATI AMAL's avatar
MATMATI AMAL committed
Tableau Trié :

![plot](graphes/temps_trie.png)

Tableau Tri Inversé :

![plot](graphes/temps_inverse.png)

Tableau Aléatoire :

![plot](graphes/temps_aleatoire.png)
gossa's avatar
gossa committed

### Consommation mémoire

MATMATI AMAL's avatar
MATMATI AMAL committed
Tableau Trié :

![plot](graphes/mem_trie.png)

Tableau Tri Inversé :

![plot](graphes/mem_inverse.png)

Tableau Aléatoire :

![plot](graphes/mem_aleatoire.png)

gossa's avatar
gossa committed

### Analyse des résultats préalables

MATMATI AMAL's avatar
MATMATI AMAL committed

#### Analyse des performances de temps et de mémoire.

##### Analyse des performances du temps d'éxécution.


###### Tableaux aléatoires :

###### Remarques


Les tris fusions et rapides de plus près :

![plot](graphes/tab_fusion_rapide_exec.png)

On constate que la courbe du tri par **insertion** marque un plus grande évolution que les deux autres. On remarque cependant que le tri **rapide** prend progressivement de plus en plus de temps alors que le tri **fusion** reste à une vitesse constante quel que soit la taille du tableau. De précédents tests on été effectués avec des tableaux de taille 300 000 mais cela ne valait pas le coup car les temps d'executions dépassaient la minute pour le tri par **insertion** .


###### Conclusion


D'après la courbe on remarque que le tri **rapide** est plus rapide que le tri **fusion**

Le tri **insertion** devient de plus en plus long en fonction de la taille du tableau



##### Tableaux triés :


###### Remarques


Les tris insertions et insertion de plus près :

![plot](graphes/tab_fusion_insertion_exec.png)

On constate que la courbe du tri par **rapide** marque une plus grande évolution que les deux autres tris. On remarque cependant que le tri **insertion** est maintenant beaucoup plus optimal en termes de temps, comme l'était le tri **fusion** qu'aux tests avec des tableaux aléatoires. Le tri **fusion** reste quasiment aussi constat.

###### Conslusion

D'après la courbe on remarque que le tri **insertion** est plus rapide que le tri **fusion**

Le tri **rapide** devient de plus en plus long en fonction de la taille du tableau



##### Tableaux inversés :


###### Remarques


On constate que les courbes des tris **rapide** et **insertions** s'envolent plus la taille du tableau est conséquente. Le tri **fusion** reste constant comme dans les deux autres types de tableaux.

###### Conslusion

Le tri **fusion** est le seul tri optimal en termes de temps d'éxécution avec un tableau inversé.


***

#### Analyse de la mémoire occupée


##### Tableaux aléatoires :

###### Remarques


Cette fois ci, on remarque que c'est le tri **fusion** qui consomme le plus de ressources alors que les tris **insertion** et **rapide** possèdent une consommation assez similaire.
L'allure de la courbe de tri **fusion** peut être expliquée par les allocations mémoires nombreuses dans l'algorithme.

 Chaque appel de la fonction **fusion** alloue 2 emplacements, et la fonction est appelée plusieurs fois. Cela peut donc aussi expliquer l'allure linéaire et constante de la courbe.

###### Conclusion

D'après la courbe on remarque que le tri **fusion** n'est pas efficient en terme de mémoire.



gossa's avatar
gossa committed

### Discussion des résultats préalables

gossa's avatar
gossa committed
Explications précises et succinctes des limites des résultats
gossa's avatar
gossa committed
préalables et ce qu'ils ne permettent pas de vérifier.

## Etude approfondie

### Hypothèse

MATMATI AMAL's avatar
MATMATI AMAL committed
Les performances du tri rapide dépendent du tableau à trier.
gossa's avatar
gossa committed

### Protocole expérimental de vérification de l'hypothèse

MATMATI AMAL's avatar
MATMATI AMAL committed
Nous allons observer l'évolution des perfomances du tri rapide en fonction du type de tableau qui lui est donné.

Nous allons prendre un tableau presque trié pour l'expérience.

gossa's avatar
gossa committed

```
MATMATI AMAL's avatar
MATMATI AMAL committed
Dans le dossier scripts:

./hypothese.sh > hypothese.dat
gossa's avatar
gossa committed
```
gossa's avatar
gossa committed

gossa's avatar
gossa committed
### Résultats expérimentaux

MATMATI AMAL's avatar
MATMATI AMAL committed
![plot](graphes/hypothese1.png)

![plot](graphes/hypothese2.png)


gossa's avatar
gossa committed
### Analyse des résultats expérimentaux

MATMATI AMAL's avatar
MATMATI AMAL committed
Sur ce graphique nous observons que le tri **rapide** sur un tableau semi trié  est aussi lent que sur un tableau trié entièrement. Les deux opérations de tris utilisent donc quasiment le même temps CPU.

### Discussion des résultats expériment

On remarque qu'avec tableau trié dont le pivot est la dernière valeur, donc le plus grand nombre, l'algorithme de tri rapide va effectuer chaque permutation avec lui même. Ce qui impacte sur le nombre d'écritures et le temps d'éxécution.
gossa's avatar
gossa committed

## Conclusion et travaux futurs
MATMATI AMAL's avatar
MATMATI AMAL committed

Le problème réside dans l'algorithme du tri rapide. Un moyen d'optimiser l'algorithme serait peut être d'empècher de permuter les valeurs entre elles.

On peut aussi effectuer des recherches et tenter une modification du tri rapide, en modifiant son pivot afin d'observer toute évolution.