Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAlexandre Robert Modifié depuis plus de 9 années
1
Tutorat en bio-informatique Le 28 novembre 2012
2
Au programme… Algorithmes de tri dans un tableau (suite) Récursivité MAT1400
3
Tri bulle function triBulle(tab) { do{ var inversionFaite = false; for(var i = 0; i < tab.length-1; i++) { if(tab[i] > tab[i+1]) { var temp = tab[i+1]; tab[i+1] = tab[i]; tab[i] = temp; inversionFaite = true; } while(inversionFaite); } Comme pour le tri insertion, dans le meilleur cas (un tableau déjà trié), le tri bulle prend un temps linéaire. Toutefois, dans le pire cas (???), cet algorithme prendra aussi un temps quadratique.
4
Tri bulle function triBulle(tab) { do{ var inversionFaite = false; for(var i = 0; i < tab.length-1; i++) { if(tab[i] > tab[i+1]) { var temp = tab[i+1]; tab[i+1] = tab[i]; tab[i] = temp; inversionFaite = true; } while(inversionFaite); } Comme pour le tri insertion, dans le meilleur cas (un tableau déjà trié), le tri bulle prend un temps linéaire. Toutefois, dans le pire cas (plus petit élément en dernière position), cet algorithme prendra aussi un temps quadratique.
5
Tri bulle On peut optimiser un peu plus le tri bulle. Comment?
6
Tri bulle function triBulle2(tab) { var n = tab.length; do{ var inversionFaite = false; for(var i = 0; i < n-1; i++) { if(tab[i] > tab[i+1]) { var temp = tab[i+1]; tab[i+1] = tab[i]; tab[i] = temp; inversionFaite = true; } n--; } while(inversionFaite); }
7
Tri bulle function triBulle3(tab) { var n = tab.length; do{ var newN = 0; for(var i = 0; i < n-1; i++) { if(tab[i] > tab[i+1]) { var temp = tab[i+1]; tab[i+1] = tab[i]; tab[i] = temp; newN = i+1; } n = newN; } while(n > 0); }
8
Algorithmes de tri Il existe de bien meilleurs algorithmes de tri qui prennent un temps dans O(nlogn) dans le pire cas : Heapsort Mergesort Quicksort * * Important : Quicksort peut prendre un temps quadratique dans le pire cas (ce qui est rare), mais est dans O(nlogn) dans le cas moyen
9
Récursivité Une fonction récursive est une fonction qui s'appelle elle-même Les fonctions récursives possèdent une ou des conditions d'arrêt, qui permettent d'arrêter la récursivité Dans le code, on écrit toujours les conditions d'arrêt en premier dans la fonction
10
Récursivité function facto(n) { if (n <= 1) return 1; return n * facto(n-1); }
11
Récursivité function fibbo(n) { if (n <= 1) return 1; return fibbo(n-1) + fibbo(n-2); }
12
Récursivité terminale Lorsqu’une fonction récursive fait son appel récursif en dernier (il s’agit de la dernière instruction) En d’autres mots, il s’agit de récursivité terminale si la fonction n’a aucun autre travail à faire après avoir reçu le résultat de la récursion terminale
13
Récursivité terminale Exemple avec récursivité traditionnelle : function sumTrad(n) { if(n <= 1) return n; return n + sumTrad(n-1); }
14
Récursivité terminale Exemple avec récursivité terminale : function sumTerm(n) { function helper(n, sum) { if (n == 0) return sum; return helper(n-1, n+sum); } return helper(n, 0); }
15
Exercice 1 Écrivez la fonction fibbonacci avec récursivité terminale.
16
Exercice 1 (solution) function fibboTerm(n) { function helper(cpt, n_1, n_2) { if(cpt == 0) return n_1; return helper(cpt-1, n_1+n_2, n_1); } return helper(n, 1, 0); }
17
Récursivité terminale La récursivité terminale permet d’optimiser la vitesse d’exécution et l’espace utilisé dans la pile d’exécution Malheureusement, ce ne sont pas tous les compilateurs et interprètes qui optimisent la récursivité terminale Pour l’activer dans rhino : rhino -opt -1 monCode.js
18
Exercices (MAT1400) Chapitre 12.2, Analyse - concepts et contextes vol. 2 19) Calculez le volume du solide dressé sur le rectangle R = [-1, 1] x [-2, 2] et coiffé par le paraboloïde elliptique. 23) Calculez le volume du solide du premier quadrant compris dans le cylindre et le plan x = 2.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.