Skip to content
Snippets Groups Projects
Commit f2fc2ad9 authored by Ukhanov Ilya's avatar Ukhanov Ilya
Browse files

Le tri rapide optimisation

parent 622d303a
No related merge requests found
No preview for this file type
iTest taille temps mem algo typeTableau
1 50000 1.86 1344 i a
1 70000 3.56 1652 i a
1 90000 5.88 1892 i a
1 50000 2.34 1396 i m
1 70000 4.52 1728 i m
1 90000 7.58 1876 i m
2 50000 1.85 1388 i a
2 70000 3.54 1644 i a
2 90000 5.87 1660 i a
2 50000 2.30 1392 i m
2 70000 4.50 1736 i m
2 90000 7.42 1612 i m
3 50000 1.84 1388 i a
3 70000 3.54 1572 i a
3 90000 5.88 1884 i a
3 50000 2.35 1388 i m
3 70000 4.49 1744 i m
3 90000 7.43 1892 i m
4 50000 1.81 1288 i a
4 70000 3.53 1660 i a
4 90000 5.86 1612 i a
4 50000 2.30 1336 i m
4 70000 4.50 1656 i m
4 90000 7.42 1576 i m
5 50000 1.81 1352 i a
5 70000 3.54 1652 i a
5 90000 5.87 1552 i a
5 50000 2.30 1388 i m
5 70000 4.48 1664 i m
5 90000 7.43 1840 i m
6 50000 1.83 1400 i a
6 70000 3.54 1608 i a
6 90000 5.86 1664 i a
6 50000 2.30 1564 i m
6 70000 4.50 1552 i m
6 90000 7.43 1608 i m
7 50000 1.81 1396 i a
7 70000 3.54 1664 i a
7 90000 5.86 1616 i a
7 50000 2.27 1356 i m
7 70000 4.48 1664 i m
7 90000 7.43 1892 i m
8 50000 1.81 1288 i a
8 70000 3.54 1580 i a
8 90000 5.85 1644 i a
8 50000 2.29 1292 i m
8 70000 4.49 1612 i m
8 90000 7.40 1616 i m
9 50000 1.81 1464 i a
9 70000 3.58 1728 i a
9 90000 5.87 1616 i a
9 50000 2.29 1344 i m
9 70000 4.50 1652 i m
9 90000 7.43 1776 i m
10 50000 1.81 1336 i a
10 70000 3.55 1552 i a
10 90000 5.85 1964 i a
10 50000 2.33 1388 i m
10 70000 4.49 1608 i m
10 90000 7.42 1600 i m
TP2/ggossaprodansR.png

61.7 KiB

TP2/graphe.png

101 KiB

TP2/grapheFusion.png

78.2 KiB

......@@ -7,8 +7,8 @@
#include "utils.h"
int main(int argc, char *argv[]) {
if(argc != 5) {
printf("Usage: %s [typeAlgo] [taille] [typeTableau] [isAfficher]\n", argv[0]);
if(argc != 6) {
printf("Usage: %s [typeAlgo] [taille] [typeTableau] [isAfficher] [versionRap]\n", argv[0]);
exit(1);
}
......@@ -18,6 +18,7 @@ int main(int argc, char *argv[]) {
long *tab = malloc(sizeof(long) * taille);
char typeTable = argv[3][0];
size_t afficher = (size_t) atoi(argv[4]);
int versionRap = (size_t) atoi(argv[5]);
genTab(tab, taille, typeTable, MAX);
......@@ -33,7 +34,7 @@ int main(int argc, char *argv[]) {
break;
case 'r':
triRapide(tab, taille);
triRapide(tab, taille, versionRap);
if(afficher) {
printf("Tri Rapide: \n");
......
library(ggplot2)
perf <- read.table("test.dat", header = TRUE)
ggplot(perf, aes(x=taille, y=temps, group=algo, colour=as.character(algo))) + facet_grid(algo ~ typeTableau) +
geom_point() + geom_smooth() +
ggtitle("Graphes Comparaison Algos")
ggsave("graphe.png")
-e iTest taille temps mem algo typeTableau
-e 1 59296 2.17 1772 i a
-e 1 59296 0.00 1704 i r
-e 1 59296 4.47 1656 i i
-e 1 59296 0.00 1700 i c
-e 1 59296 0.23 1848 r a
-e 1 59296 11.35 5416 r r
-e 1 59296 7.77 5412 r i
-e 1 59296 11.25 5412 r c
-e 1 59296 0.01 1992 f a
-e 1 59296 0.01 1964 f r
-e 1 59296 0.00 2032 f i
-e 1 59296 0.00 1956 f c
-e 2 97794 6.03 1988 i a
-e 2 97794 0.00 1988 i r
-e 2 97794 12.13 1928 i i
-e 2 97794 0.00 2012 i c
-e 2 97794 0.61 2116 r a
-e 2 97794 30.32 8036 r r
-e 2 97794 20.98 8116 r i
-e 2 97794 30.33 8100 r c
-e 2 97794 0.01 2604 f a
-e 2 97794 0.01 2544 f r
-e 2 97794 0.01 2680 f i
-e 2 97794 0.01 2556 f c
-e 3 41540 1.08 1496 i a
-e 3 41540 0.00 1576 i r
-e 3 41540 2.17 1456 i i
-e 3 41540 0.00 1628 i c
-e 3 41540 0.11 1628 r a
-e 3 41540 5.49 4080 r r
-e 3 41540 3.82 4152 r i
-e 3 41540 5.39 4224 r c
-e 3 41540 0.00 1908 f a
-e 3 41540 0.00 1892 f r
-e 3 41540 0.00 1836 f i
-e 3 41540 0.00 1972 f c
-e 4 97964 5.95 1936 i a
-e 4 97964 0.00 2040 i r
-e 4 97964 12.07 1992 i i
-e 4 97964 0.00 2048 i c
-e 4 97964 0.62 2124 r a
-e 4 97964 32.03 8192 r r
-e 4 97964 21.83 8080 r i
-e 4 97964 30.63 8024 r c
-e 4 97964 0.02 2560 f a
-e 4 97964 0.01 2564 f r
-e 4 97964 0.01 2544 f i
-e 4 97964 0.01 2492 f c
-e 5 39669 1.00 1544 i a
-e 5 39669 0.00 1496 i r
-e 5 39669 2.03 1504 i i
-e 5 39669 0.00 1536 i c
-e 5 39669 0.10 1552 r a
-e 5 39669 5.03 4032 r r
-e 5 39669 3.44 3984 r i
-e 5 39669 5.00 4024 r c
-e 5 39669 0.00 1792 f a
-e 5 39669 0.00 1820 f r
-e 5 39669 0.00 1840 f i
-e 5 39669 0.00 1884 f c
-e 6 8038 0.04 1300 i a
-e 6 8038 0.00 1300 i r
-e 6 8038 0.08 1220 i i
-e 6 8038 0.00 1288 i c
-e 6 8038 0.00 1300 r a
-e 6 8038 0.20 1756 r r
-e 6 8038 0.14 1812 r i
-e 6 8038 0.21 1808 r c
-e 6 8038 0.00 1448 f a
-e 6 8038 0.00 1448 f r
-e 6 8038 0.00 1332 f i
-e 6 8038 0.00 1364 f c
-e 7 30705 0.59 1468 i a
-e 7 30705 0.00 1524 i r
-e 7 30705 1.19 1480 i i
-e 7 30705 0.00 1492 i c
-e 7 30705 0.06 1472 r a
-e 7 30705 3.02 3440 r r
-e 7 30705 2.08 3408 r i
-e 7 30705 3.00 3384 r c
-e 7 30705 0.00 1688 f a
-e 7 30705 0.00 1688 f r
-e 7 30705 0.00 1616 f i
-e 7 30705 0.00 1696 f c
-e 8 53435 1.81 1660 i a
-e 8 53435 0.00 1700 i r
-e 8 53435 3.66 1656 i i
-e 8 53435 0.00 1640 i c
-e 8 53435 0.18 1676 r a
-e 8 53435 9.15 4892 r r
-e 8 53435 6.50 5000 r i
-e 8 53435 9.16 4928 r c
-e 8 53435 0.01 1996 f a
-e 8 53435 0.00 1904 f r
-e 8 53435 0.00 1988 f i
-e 8 53435 0.00 1992 f c
-e 9 50961 1.61 1676 i a
-e 9 50961 0.00 1640 i r
-e 9 50961 3.30 1624 i i
-e 9 50961 0.00 1592 i c
-e 9 50961 0.17 1716 r a
-e 9 50961 8.31 4888 r r
-e 9 50961 5.85 4832 r i
-e 9 50961 8.27 4852 r c
-e 9 50961 0.00 1860 f a
-e 9 50961 0.00 1928 f r
-e 9 50961 0.00 1884 f i
-e 9 50961 0.00 1884 f c
-e 10 74748 3.49 1832 i a
-e 10 74748 0.00 1828 i r
-e 10 74748 7.11 1744 i i
-e 10 74748 0.00 1772 i c
-e 10 74748 0.37 1932 r a
-e 10 74748 17.97 6456 r r
-e 10 74748 12.53 6388 r i
-e 10 74748 18.00 6496 r c
-e 10 74748 0.01 2360 f a
-e 10 74748 0.01 2424 f r
-e 10 74748 0.01 2380 f i
-e 10 74748 0.01 2360 f c
#!/bin/bash
affichage=0
#taille=100
echo -e "iTest\ttaille\ttemps\tmem\talgo\ttypeTableau"
for iTest in `seq 1 10`
do
taille=$(( `od -An -N4 -tu < /dev/urandom` % 100000))
for algo in 'i' 'r' 'f'
do
for typeTableau in 'a' 'r' 'i' 'c'
do
res=`( /usr/bin/time -f "%U\t%M" ./main $algo $taille $typeTableau $affichage > /dev/null ) 2>&1`
echo -e "$iTest\t$taille\t$res\t$algo\t$typeTableau"
done
done
done
library(ggplot2)
perf <- read.table("fusion.dat", header = TRUE)
perf <- read.table("testGeneral.dat", header = TRUE)
ggplot(perf, aes(x=taille, y=temps, group=typeTableau, colour=as.character(algo))) + facet_grid(algo ~ typeTableau) +
geom_point() + geom_smooth() +
ggtitle("Graphes Comparaison Algos")
ggtitle("Test General des Algos")
ggsave("graphe.png")
ggsave("testGeneral.png")
iTest taille temps mem algo typeTableau
1 30000 0.04 1396 r a
1 40000 0.06 1400 r a
1 50000 0.08 1388 r a
1 30000 1.38 3200 r c
1 40000 2.45 3756 r c
1 50000 3.87 4568 r c
1 30000 1.38 3192 r r
1 40000 2.43 3748 r r
1 50000 3.81 4568 r r
1 30000 1.35 3312 r i
1 40000 2.40 3812 r i
1 50000 3.74 4472 r i
2 30000 0.03 1352 r a
2 40000 0.05 1380 r a
2 50000 0.08 1348 r a
2 30000 1.37 3168 r c
2 40000 2.42 3732 r c
2 50000 3.79 4564 r c
2 30000 1.39 3248 r r
2 40000 2.42 3884 r r
2 50000 3.79 4560 r r
2 30000 1.35 3236 r i
2 40000 2.41 3732 r i
2 50000 3.74 4564 r i
3 30000 0.04 1384 r a
3 40000 0.05 1352 r a
3 50000 0.08 1400 r a
3 30000 1.43 3228 r c
3 40000 2.43 3696 r c
3 50000 3.79 4568 r c
3 30000 1.42 3168 r r
3 40000 2.42 3748 r r
3 50000 3.87 4504 r r
3 30000 1.41 3192 r i
3 40000 2.47 3820 r i
3 50000 3.79 4484 r i
4 30000 0.04 1344 r a
4 40000 0.06 1396 r a
4 50000 0.09 1404 r a
4 30000 1.37 3184 r c
4 40000 2.49 3884 r c
4 50000 3.85 4632 r c
4 30000 1.36 3136 r r
4 40000 2.41 3764 r r
4 50000 3.77 4572 r r
4 30000 1.34 3204 r i
4 40000 2.39 3816 r i
4 50000 3.81 4776 r i
5 30000 0.04 1400 r a
5 40000 0.06 1352 r a
5 50000 0.10 1356 r a
5 30000 1.36 3192 r c
5 40000 2.41 3764 r c
5 50000 3.77 4480 r c
5 30000 1.38 3236 r r
5 40000 2.42 3764 r r
5 50000 3.78 4568 r r
5 30000 1.34 3156 r i
5 40000 2.40 3812 r i
5 50000 3.75 4456 r i
TP2/testGeneral.png

105 KiB

#!/bin/bash
affichage=0
versionRap=0
#taille=100
echo -e "iTest\ttaille\ttemps\tmem\talgo\ttypeTableau"
for iTest in `seq 1 10`
for iTest in `seq 1 5`
do
#taille=$(( `od -An -N4 -tu < /dev/urandom` % 1000000))
#taille=1000000
for algo in 'i'
for algo in 'r' 'i' 'f'
do
for typeTableau in 'a' 'm'
for typeTableau in 'a' 'c' 'r' 'i'
do
for taille in 50000 70000 90000
for taille in 30000 40000 50000 60000 70000 80000 90000
do
res=`( /usr/bin/time -f "%U\t%M" ./main $algo $taille $typeTableau $affichage > /dev/null ) 2>&1`
res=`( /usr/bin/time -f "%U\t%M" ./main $algo $taille $typeTableau $affichage $versionRap > /dev/null ) 2>&1`
echo -e "$iTest\t$taille\t$res\t$algo\t$typeTableau"
done
done
......
TP2/triRapideAleatoirePivotLast.png

97.1 KiB

TP2/triRapideAleatoirePivotMiddle.png

88.2 KiB

TP2/triRapideMiddlePivotLast.png

95.8 KiB

TP2/triRapideMiddlePivotMiddle.png

87.4 KiB

......@@ -4,19 +4,19 @@
#include "tri_rapide.h"
void triRapide(long* A, size_t n) {
sousTriRapide(A,0,n);
void triRapide(long* A, size_t n, int version) {
sousTriRapide(A,0,n, version);
}
void sousTriRapide(long* A, size_t first, size_t size){
void sousTriRapide(long* A, size_t first, size_t size, int version){
if(first+1 < size){
size_t middle = partition(A,first,size);
sousTriRapide(A,first,middle);
sousTriRapide(A,middle+1,size);
size_t middle = partition(A,first,size, version);
sousTriRapide(A,first,middle, version);
sousTriRapide(A,middle+1,size, version);
}
}
size_t partition(long* A, size_t first, size_t size) {
size_t partition(long* A, size_t first, size_t size, int version) {
//long middle = (size-1) / 2;
//long pivot = A[middle];
......@@ -24,8 +24,19 @@ size_t partition(long* A, size_t first, size_t size) {
size_t i = first;
for(int j = first; j+2 <= size; j++){
if(A[j] <= pivot){
permuter(A,i,j);
if(A[j] <= pivot) {
// Version 1: optimisation sur les tableaux ranges
if(version == 1) {
// Si i = j, pas besoin de permuter
if(i != j ) {
permuter(A,i,j);
}
}
// Version 0: celle de base
else {
permuter(A,i,j);
}
i++;
}
}
......
......@@ -3,8 +3,8 @@
#include <stdint.h>
#include <stdlib.h>
void triRapide(long* A, size_t n);
void sousTriRapide(long* A, size_t first, size_t size);
size_t partition(long* A, size_t first, size_t size);
void triRapide(long* A, size_t n, int version);
void sousTriRapide(long* A, size_t first, size_t size, int version);
size_t partition(long* A, size_t first, size_t size , int version);
void permuter(long* A,size_t i,size_t j);
#endif //TRIS_H
\ No newline at end of file
#endif //TRIS_H
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment