1 / 18

Tutorat en bio-informatique

Tutorat en bio-informatique. Le 28 novembre 2012. Au programme…. Algorithmes de tri dans un tableau (suite) Récursivité MAT1400. Tri bulle. function triBulle(tab) ‏ { do{ var inversionFaite = false; for(var i = 0; i < tab.length-1; i++) { if(tab[i] > tab[i+1]) {

saad
Download Presentation

Tutorat en bio-informatique

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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.

More Related