Tutorat en bio-informatique Vos tuteurs : Cedric Roux et Daniel Jimenez Aujourd’hui • Questions pour vous • Algorithmes de recherche dans un tableau • Algorithmes de tri dans un tableau Vos intras!? Algorithmes • Algorithme: Processus logique permettant la résolution d’un problème. Algorithmes • On évalue la performance d’un algorithme en évaluant son temps d’exécution dans le pire cas • Le meilleur cas ne se produit pratiquement jamais… • Le moyen cas est souvent difficile à calculer • L’analyse du temps d’exécution dans le pire cas nous donne la garantie que l’algorithme ne pourra être plus lent peu importe ce qu’on lui donne en entrée Algorithmes • Soit T(n) la fonction qui définie les opérations effectuées par l’algorithme sur n, le nombre d’entrées. On dira que: T(n) = O( f(n) ) • Si pour des constantes positives c et n0 , on a T(n) <= cf(n) quand n>=n0 Algorithmes f(n) Temps c constant log n logarithmique n linéaire n log n nlogn n2 quadratique n3 cubique 2n exponentiel n! factoriel Recherche dans un tableau non trié • On doit parcourir toutes les position du tableau jusqu’à ce qu’on trouve l’élément recherché (recherche directe) Function rechercheDirection(tab, element) { for(var i = 0; i < tab.length; i++){ if(tab[i] == element) return i; Pire cas: O(n) } return -1 } Recherche dans un tableau trié • On peut parcourir toutes les positions du tableau jusqu’à ce qu’on trouve l’élément recherché ou qu’on dépasse la valeur de l’élément recherché s’il n’est pas présent dans le tableau (recherche linéaire) function rechercheLineaire(tab, element){ for (var i = 0; i element < tab.length; i++) if(tab[i] == element) return i; else if(tab[i] >element) return -1; } return -1 } Pire cas: O(n) Indentation • C’est le fait de mettre des tabulations pour différencier les niveaux dans le code. • On change de niveau lorsqu’une partie du code est à l’intérieur de quelque chose d’autre (comme ce qu’on écrit à l’intérieur d’un if) • A chaque fois qu’on utilise des accolades, on indente le code qui se trouve entre les deux. Indentation • Les accolades sont des séparateurs qui indiquent que les lignes de code situées à l’intérieur appartiennent à l’élément qui précédait l’accolade ouvrante. • Les accolades ne sont pas seulement employées avec les if et les else! On les retrouve aussi dans les boucles, les fonctions et les objets. Les boucles • On se sert des boucles lorsqu’on veut que le programme fasse plusieurs fois la même action (la même partie de code) • Elles nous permettent donc de réduire grandement le nombre de lignes de notre programme Les boucles • Exemple en bio-informatique - On souhaite calculer le pourcentage de A dans cette sequence: AGCTAAGTACAAAGTAACAG var sequence = ‘AGCTAAGTACAAAGTAACAG’; var seqLength = sequence.length; var nbA = 0; var nucleo; Les boucles AGCTAAGTACAAAGTAACAG var idx = 0 ; // initialisation d’un compteur if (idx < seqLength) { nucleo = sequence.charAt(idx); if (nucleo == ‘A’) nbA++; } idx++; // nbA = 1 … Algorithmes de tri • La meilleure façon de trier un tableau est de séparer notre tableau en 2 parties: une parties triée et une parties non triée • Il n’y aurait aucun avantage à créer un deuxième tableau: cela nécessiterait plus d’espace et plus d’opération Les boucles for • Le type de boucle que vous allez vous servir le plus souvent! • Dans la déclaration d’une boucle for, on initialise un compteur dont la valeur change à la fin de chaque itération tant qu’une certaine condition sera vraie. Les boucles for for (var i = 0; i < 5 ; i ++) • Initialisation d’un compteur (une variable) • La condition • Permet au compteur de changer à la fin de l’itération Les boucles for • Retour sur notre exemple. Ce code contient une erreur de logique et une ligne inutile. Trouvez les! AGCTAAGTACAAAGTAACAG for (var i =0 ; i <= seqLength; i ++) { nucleo = sequence.charAt(i); if (nucleo == ‘A’) nbA++; } Petite videos pour vous aider • Tri par sélection: https://www.youtube.com/watch?v=Ns4TPTC8whw • Tri par insertion: https://www.youtube.com/watch?v=ROalU379l3U • Tri bulle: https://www.youtube.com/watch?v=lyZQPjUT5B4