From b4e32670512325546fab080774cd1d12f5261534 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Tue, 8 Nov 2022 22:24:13 +0100 Subject: [PATCH] updated dates --- slides/cours_6.md | 64 ++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/slides/cours_6.md b/slides/cours_6.md index 2567118..075eab4 100644 --- a/slides/cours_6.md +++ b/slides/cours_6.md @@ -143,37 +143,39 @@ int fib_imp(int n) { ## But: Calculer $x^n$ -* Algorithme naîf et impératif - - ```C - int pow(x, n) { - if (0 == n) { - return 1; - } - for (int i = 1; i < n; ++i) { - x *= x; - } - return x; - } - ``` +* Quel est l'algorithmie le plus simple que vous pouvez imaginer? . . . +```C +int pow(int x, int n) { + if (0 == n) { + return 1; + } + for (int i = 1; i < n; ++i) { + x *= x; + } + return x; +} +``` + * Complexité? Combien de multiplication en fonction de `n`? # Exponentiation rapide ou indienne (2/4) -* Algorithme naïf et récursif +* Proposez un algorithme naïf et récursif - ```C - int pow(x, n) { - if (n != 0) { - return x * pow(x, n-1); - } else { - return 1; - } +. . . + +```C +int pow(x, n) { + if (n != 0) { + return x * pow(x, n-1); + } else { + return 1; } - ``` +} +``` # Exponentiation rapide ou indienne (3/4) @@ -309,8 +311,7 @@ bool is_present(int n, int tab[], int elem) { ``` * Dans le **meilleurs des cas** il faut `1` comparaison. -* Dans le **pire des cas** (élément absent p.ex.) il faut `n` - comparaisons. +* Dans le **pire des cas** (élément absent p.ex.) il faut `n` comparaisons. . . . @@ -343,8 +344,7 @@ bool is_present_binary_search(int n, int tab[], int elem) { ## Recherche dichotomique -](figs/Binary_search_complexity.svg){width=80%} +](figs/Binary_search_complexity.svg){width=80%} . . . @@ -362,20 +362,17 @@ bool is_present_binary_search(int n, int tab[], int elem) { ## Constante de proportionnalité -* Pour la recherche linéaire ou dichotomique, on a des algorithmes qui sont - $\sim N$ ou $\sim \log_2(N)$ +* Pour la recherche linéaire ou dichotomique, on a des algorithmes qui sont $\sim N$ ou $\sim \log_2(N)$ * Qu'est-ce que cela veut dire? . . . -* Temps de calcul est $t=C\cdot N$ (où $C$ est le temps pris pour une - comparaisons sur une machine/compilateur donné) +* Temps de calcul est $t=C\cdot N$ (où $C$ est le temps pris pour une comparaisons sur une machine/compilateur donné) * La complexité ne dépend pas de $C$. ## Le $\mathcal{O}$ de Leibnitz -* Pour noter la complexité d'un algorithme on utilise le symbole -$\mathcal{O}$ (ou "grand Ô de"). +* Pour noter la complexité d'un algorithme on utilise le symbole $\mathcal{O}$ (ou "grand Ô de"). * Les complexités les plus couramment rencontrées sont . . . @@ -482,8 +479,7 @@ $$ ## Finalement $$ -\mathcal{O}(N^2\mbox{ comparaisons}) + \mathcal{O}(N\mbox{ -swaps})=\mathcal{O}(N^2). +\mathcal{O}(N^2\mbox{ comparaisons}) + \mathcal{O}(N\mbox{swaps})=\mathcal{O}(N^2). $$ -- GitLab