From 550abc4e9ac860948ff1355bd5e5d43eb8d77fa6 Mon Sep 17 00:00:00 2001 From: Alexandre Agostinho Date: Fri, 24 Mar 2023 13:03:23 +0100 Subject: [PATCH 1/2] cplx algo1 ok --- code/p2tests | Bin 25456 -> 17128 bytes sections/partie2.tex | 10 +++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/p2tests b/code/p2tests index 787f66f178d239d51514b529e8d0931b003711e0..8a6ab93e107488c21ca7e6677fb3215bacfccc88 100755 GIT binary patch literal 17128 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 diff --git a/sections/partie2.tex b/sections/partie2.tex index c34e002..cfd786d 100644 --- a/sections/partie2.tex +++ b/sections/partie2.tex @@ -10,14 +10,18 @@ \subsection{Question 1} \par\quad - \subsection{Question 2} + \subsection{Question 2 et 4} \par\quad Interressons-nous maintenant au calcul de la complexité de chaque algorithmes. Un calcul de omplexité s'effectue en comptabilisant le nombre d'action que le processeur doit effectuer. Cependant, pour effectuer un tel calcul, il faudrait comptabiliser la totalité des actions effectuées par l'ensemble des bibliothèques utilisées dans les algorithmes. Nous n'avons pas besoin d'aller aussi loin, notamment car dans ce cas, ce calcul changerait en fonction d'un language à un autre, d'un compilateur à un autre, ou encore d'un interpréteur à un autre. Nous allons donc nous intéresser uniquement au nombre de lignes executés par les programmes en fonction de parmamêtres donnés. \subsubsection{Complexité de l'algorithme n°1} - \par\quad Pour ce qui est du premier algorithme proposé, nous pouvons déjà comptabiliser les 4 actions effectuées par la fonction annexe "echanger". Ajoutons-y les 4 création de variables en début d'algorithme. On remarque que les instructions d'après sont bouclées en fonction de paramètres variables. On en déduit donc que nous avons déjà 8 instructions fixes. + \par\quad Pour ce qui est du premier algorithme proposé, nous pouvons déjà comptabiliser les 4 actions effectuées par la fonction annexe "echanger". Ajoutons-y les 4 création de variables en début d'algorithme. On remarque que les instructions d'après sont bouclées en fonction de paramètres variables. On en déduit donc que nous avons déjà 4 instructions fixes et 4 autres que l'on multiplira par le nombre de fois que la fonction "echanger" est appelée. - \par + \par\quad La première boucle (while), qui est la boucle principale tourne tant que la variable échange est à 1. cette variable comptabilise le nombre d'échanges de valeurs qui est effectué pour ordonner le tableau. Notre equation de complexité se construit donc avec la forme : $4 + N * (4 + P)$, où $N$ est le nombre de fois que la boucle tourne et $P$ le nombre d'actions effectuées dans cette boucle. + + \par\quad Dans cette boucle while, on trouve deux boucles "for" pour trier les valeurs du début et de la fin. En analysant l'algorithme caractérisant ces boucles, on en déduit que celui-ci tri le tableau en mettant, pour chaque tour de boucle "while", l'élement le plus petit en premier, et le plus grand à la fin. $P$ est donc de complexité $N * 2$. On peut alors en déduire que au pire, la complexité de cet algorithme est de $4 + N * (4 + (N * 2))$. + + \par\quad En conclusion, on trouve que cette fonction est de complexité quadratique (o(N^2)). Cette algorithme ne comporte pas vraiment d'avantages et son gros inconvéniant est que sa complexité est exponentielle : elle augmente de plus en plus vite. Il serait donc très compliqué de trier un tres grand nombre de valeurs avec. Cependant, elle peut fonctionner sur des petit nombres de valeurs. \subsubsection{Complexité de l'algorithme n°2} From cdc5abe0f783c05dc351ada6b4ff916303d7a315 Mon Sep 17 00:00:00 2001 From: Alexandre Agostinho Date: Fri, 24 Mar 2023 13:42:23 +0100 Subject: [PATCH 2/2] start cplx 2 -> 2nd for --- sections/partie2.tex | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sections/partie2.tex b/sections/partie2.tex index cfd786d..1a0cad2 100644 --- a/sections/partie2.tex +++ b/sections/partie2.tex @@ -25,7 +25,14 @@ \subsubsection{Complexité de l'algorithme n°2} - \par\quad + \par\quad Maintenant, analysons le second algorithme. Pour celui-ci, partons nous ommettrons l'analyse des instructions fixes, car la réelle compléxité des algorithme se base notamment sur les tours de boucles au sein du programme. + + \par\quad La première boucle sert à récupérer les valeurs maximales du tableau. Le nombre de tours que celle-ci effectue est donc égale à la taille du tableau. Appelons cette taille $N$. + + \par\quad L'instruction "calloc" qui suit cette boucle initialise un tableau de pointeur en initialisant toute les valeurs par defaut à "NULL". Ce tableau est composé de toute les valeurs possible entre la valeur minimale du tableau, et la valeur maximale. C'est-à-dire, si la valeur maximal est 7 et la valeur minimale est 4, ce tableau sera composé de 3 cases. La complexité de cette instruction est donc dépendante de l'écart entre ces deux valeurs. Appelons cette écart $P$. + + \par\quad La seconde boucle for compte le nombre de valeurs identiques et stocke ce nombre dans le tableau compteur décrit juste avant. Cette boucle tourne autant de fois qu'il y a de valeurs dans le tableau. + \subsubsection{Complexité de l'algorithme n°3} \par\quad @@ -35,7 +42,5 @@ \subsection{Question 3} \par\quad - \subsection{Question 4} - \par\quad \end{document} \ No newline at end of file