Chapitre 9. Algorithmique. Quelques définitions. L'informatique au lycée.

Dimension: px
Commencer à balayer dès la page:

Download "Chapitre 9. Algorithmique. Quelques définitions. L'informatique au lycée. http://ow.ly/36jth"

Transcription

1 L'informatique au lycée On désigne par algorithmique l'ensemble des activités logiques qui relèvent des algorithmes ; en particulier, en informatique, cette discipline désigne l'ensemble des règles et des techniques qui sont impliquées dans la définition et la conception des algorithmes Quelques définitions Le mot «algorithme» vient du nom du mathématicien Al Khwarizmi, qui, au 9ème siècle écrivit le premier ouvrage systématique sur la solution des équations linéaires et quadratiques. La notion d'algorithme est donc historiquement liée aux manipulations numériques, mais elle s'est progressivement développée pour porter sur des objets de plus en plus complexes : des textes, des images, des formules logiques, des objets physiques, etc. Un algorithme est un énoncé d'une suite d'opérations permettant de donner la réponse à un problème. Si les opérations s'exécutent sur plusieurs processeurs en parallèle, on parle d'algorithme parallèle. Si les tâches s'exécutent sur un réseau de processeurs on parle d'algorithme distribué. Un algorithme qui contient un appel à lui-même est dit récursif. Un algorithme glouton est un algorithme qui suit le principe de faire, étape par étape, un choix optimum local, dans l'espoir d'obtenir un résultat optimum global. Dans les cas où l'algorithme ne fournit pas systématiquement la solution optimale, il est appelé une heuristique gloutonne. En optimisation combinatoire, théorie des graphes et théorie de la complexité, une heuristique est un algorithme qui fournit rapidement (en temps polynomial) une solution réalisable, mais pas nécessairement optimale, pour un problème d'optimisation difficile. Une heuristique, ou méthode approximative, est donc le contraire d'un algorithme exact qui trouve une solution optimale pour un problème donné. L'usage d'une heuristique est pertinente pour calculer une solution approchée d'un problème et ainsi accélérer le processus de résolution exacte. 9-1

2 Le texte et les images de ce paragraphe proviennent de [9] Les métaheuristiques forment une famille d'algorithmes d'optimisation visant à résoudre des problèmes d'optimisation difficile (souvent issus des domaines de la recherche opérationnelle, de l'ingénierie ou de l'intelligence artificielle) pour lesquels on ne connaît pas de méthode classique plus efficace. Ces méthodes utilisent cependant un haut niveau d'abstraction, leur permettant d'être adaptées à une large gamme de problèmes différents. Les métaheuristiques les plus connues sont la recherche avec tabous, le recuit simulé, les algorithmes génétiques et les colonies de fourmis. Sortir d'un labyrinthe Vous êtes prisonnier d'un labyrinthe et vous voulez en sortir. Comment faire? Vous n'avez évidemment aucun plan du labyrinthe. Voici quelques algorithmes, plus ou moins efficaces La méthode de la souris L'algorithme de la souris est l'algorithme le plus simple pour se sortir d'un labyrinthe : il consiste à prendre à chaque intersection un chemin au hasard. Les théorèmes sur les marches aléatoires sont formels : en procédant de cette façon, vous finirez par sortir du labyrinthe... Cependant, le temps que vous mettrez pour trouver la sortie sera vraiment très long (proportionnel au moins au carré de la taille du labyrinthe) La méthode de la main sur le mur Cet algorithme consiste à se déplacer en gardant la main contre un des murs, disons le droit. Ainsi, à chaque intersection, on tournera à droite. En notant les endroits où l'on est passé qu'une seule fois, on peut en déduire un chemin (pas forcément le plus rapide). L'algorithme du mur en action : le point rouge est le point de départ, le chemin en orange est le chemin obtenu en suivant le mur droit. On peut en déduire le chemin le plus rapide, en bleu. Cette méthode permet de sortir à coup sûr du labyrinthe en un temps raisonnable, mais on prend le risque de visiter l'ensemble du labyrinthe. La méthode du mur pose un problème quand le labyrinthe contient des îlots. L'algorithme du mur en action dans un labyrinthe avec îlots : en suivant toujours le mur (gauche ou droit), on finit par tourner en rond. 9-2

3 L'informatique au lycée L'algorithme de Pledge Le principe de base, c'est de longer les murs, mais en évitant de rester coincé sur un même îlot. Pour ça, il faut trouver le bon moment où lâcher son mur. Dans la pratique, il faut garder un compteur dans la tête, que l'on initialise à 0 : si le compteur indique 0, on va tout droit jusqu'au mur en face. À partir de ce mur, on tourne du côté que l'on préfère (mais toujours le même, disons gauche) et on suit le mur en ajoutant 1 au compteur dès que l'on tourne à droite et en soustrayant 1 dès que l'on tourne à gauche. Si le compteur indique 0, on lâche le mur, et on va tout droit. L'algorithme de Pledge en action : on part du point rouge (compteur en position 0) et on file tout droit. On suit alors le mur par la gauche. Dès que l'on tourne à gauche (angle bleu), on incrémente le compteur), et si on tourne à droite (angle vert foncé) on le décrémente. Si le compteur atteint à nouveau 0 (angle vert clair), on lâche le mur, et on continue tout droit. Évidemment, cet algorithme ne marche que dans le cas où le labyrinthe est orthogonal (tous les angles sont à 90 ), mais on peut adapter l'algorithme aux autres labyrinthes. Au lieu d'incrémenter le compteur de 1 dès que l'on tourne, on l'incrémente par l'angle du virage (avec son signe + ou -). Cet algorithme présente un problème si la sortie est une trappe située sur un îlot. L'algorithme de Pledge en action sur un labyrinthe où la sortie (en jaune) se trouve sur un îlot : au bout d'un moment, on tourne en rond La méthode de Trémaux Marquez à la craie le chemin que vous suivez. Si vous tombez dans un cul-de-sac, faites simplement demi-tour. Si vous tombez sur une intersection que vous n'aviez encore jamais croisée, prenez le chemin que vous préférez. Si vous êtes déjà tombé sur cette intersection auparavant, faites comme si vous étiez tombé sur un cul-de-sac en faisant demi-tour, pour rejoindre la dernière intersection où vous avez fait un choix. Si vous revenez à un moment où à un autre sur votre point de départ, c'est que vous avez visité la totalité du labyrinthe et qu'il n'avait aucune sortie... Par contre, si vous trouvez la sortie, rien ne vous dit que c'était le chemin le plus court! 9-3

4 L'algorithme de Trémaux en action : au fur et à mesure, on peut marquer certains passages comme étant des culs-de-sac, ici en gris Le problème des huit dames Le but du problème des huit dames, est de placer huit dames d'un jeu d'échecs sur un échiquier de 8 8 cases sans que les dames ne puissent se menacer mutuellement, conformément aux règles du jeu d'échecs. Par conséquent, deux dames ne devraient jamais partager la même rangée, colonne, ou diagonale (voir dessin ci-contre). Durant des années, beaucoup de mathématiciens, y compris Gauss ont travaillé sur ce problème, qui est un cas particulier du problème généralisé des n-dames, posé en 1850 par Franz Nauck, et qui est de placer n dames «libres» sur un échiquier de n n cases. En 1874, S. Gunther proposa une méthode pour trouver des solutions en employant des déterminants, et J. W. L. Glaisher affina cette approche. Le problème des huit dames a 92 solutions distinctes, ou seulement 12 solutions si l'on tient compte de transformations telles que des rotations ou des réflexions. Le problème des huit dames est un bon exemple de problème simple mais non évident. Pour cette raison, il est souvent employé comme support de mise en œuvre de différentes techniques de programmation, y compris d'approches non traditionnelles de la programmation telles que la programmation par contraintes, la programmation logique ou les algorithmes génétiques Algorithme naïf L'algorithme naïf de recherche exhaustive teste toutes les manières possibles de placer une dame par colonne, pour retirer toutes celles pour lesquelles des dames se menacent mutuellement. Il y a 88 = 16'777'216 placements à explorer. 9-4

5 L'informatique au lycée Exercice 9.1 Programmez l'algorithme naïf pour trouver les 92 solutions au problème des huit dames. Vous représenterez la position par une liste de nombres de 0 à 7. Ces nombres indiquent la ligne sur laquelle la dame se trouve pour la colonne correspondante. Par exemple, la 12 ème solution du graphique ci-dessus sera représentée par la liste : [2, 4, 1, 7, 0, 6, 3, 5] Recherche en profondeur La recherche en profondeur consiste à trouver les solutions en plaçant les dames de gauche à droite. Prenons pour simplifier un exemple sur un damier 4x4. Imaginons que toutes les solutions avec la première dame sur la première ligne ont été trouvées (voir dessin ci-dessous). On veut maintenant placer la première dame sur la 2ème ligne. Plaçons la deuxième dame sur la ligne 1. Il y a conflit : STOP. On ne cherche pas plus loin. Idem pour les lignes 2 et 3. La seule solution possible est la 4ème ligne. Plaçons maintenant la troisième dame. On peut la mettre sur la première ligne sans conflit. Plaçons alors la 4ème et dernière dame. La seule ligne possible est la 3ème. On a une solution : [1,3,0,2]. On remonte alors dans l'arbre : la troisième dame ne peut se placer sur aucune autre ligne. Remontons encore d'un cran. On a déjà essayé toutes les lignes pour la deuxième dame. Remontons encore d'un cran : plaçons la première dame sur la 3ème ligne et recommençons une recherche en profondeur... Exercice 9.2 Programmez la recherche en profondeur expliquée ci-dessus. Comptez le nombre de situations (intermédiaires et finales) analysées Méthode heuristique Un algorithme de «réparation itérative» commence typiquement à partir d'un placement de toutes les dames sur l'échiquier, par exemple avec une seule dame par ligne et par colonne. Il essaie ensuite toutes les permutations des colonnes (il n'y a que des conflits diagonaux à tester) pour ne garder que les configurations sans conflits. Il y a 8! = 40'320 placements à explorer. Exercice 9.3 Placez initialement les 8 dames sur la diagonale de l'échiquier, puis échangez deux colonnes choisies au hasard. Répétez l'opération jusqu'à ce qu'une solution soit trouvée. 9-5

6 Exercice 9.4 Modifiez le programme de l'exercice 9.3 pour trouver les 92 solutions. Le programme ci-dessous pourra vous aider. N'essayez pas de le comprendre, il fait appel à des notions avancées de Python que l'on n'a pas vues (Iterators et generators). Contentez-vous de l'intégrer à votre programme. def all_perms(str): if len(str)<=1: yield str else: for perm in all_perms(str[1:]): for i in range(len(perm)+1): yield perm[:i] + str[0:1] + perm[i:] for p in all_perms([0,1,2]): print(p) Le résultat sera : [0, [1, [1, [0, [2, [2, , 0, 2, 2, 0, 1, 2] 2] 0] 1] 1] 0] Algorithmes gloutons Un algorithme glouton (en anglais : greedy) est un algorithme qui suit le principe de faire, étape par étape, un choix optimum local, dans l'espoir d'obtenir un résultat optimum global. Il n'y a pas de retour en arrière : à chaque étape de décision dans l'algorithme, le choix qui semble le meilleur à ce moment est effectué et est définitif. Les algorithmes gloutons servent surtout à résoudre des problèmes d'optimisation. Exemple : rendu de monnaie Dans le problème du rendu de monnaie (donner une somme avec le moins possible de pièces), l'algorithme consistant à répéter le choix de la pièce de plus grande valeur qui ne dépasse pas la somme restante est un algorithme glouton. Suivant le système de pièces, l'algorithme glouton est optimal ou pas. Dans le système de pièces européen (en centimes : 1, 2, 5, 10, 20, 50, 100, 200), où l'algorithme glouton donne la somme suivante pour 37 : , on peut montrer que l'algorithme glouton donne toujours une solution optimale. Dans le système de pièces (1, 3, 4), l'algorithme glouton n'est pas optimal. En effet, il donne pour 6 : 4+1+1, alors que 3+3 est optimal. Exercice 9.5 Une route comporte n stations-service, numérotées dans l'ordre du parcours, de 0 à n 1. La première est à une distance d[0] du départ, la deuxième est à une distance d[1] de la première, la troisième à une distance d[2] de la deuxième, etc. La fin de la route est à une distance d[n] de la n-ième et dernière station-service. Un automobiliste prend le départ de la route avec une voiture dont le réservoir d'essence est plein. Sa voiture est capable de parcourir une distance r avec un plein. Question Donnez une condition nécessaire et suffisante pour que l'automobiliste puisse effectuer le parcours. On la supposera réalisée par la suite. 9-6

7 L'informatique au lycée Question Prenez 17 stations-service avec les distances d = [23, 40, 12, 44, 21, 9, 67, 32, 51, 30, 11, 55, 24, 64, 32, 57, 12, 80] et r = 100. L'automobiliste désire faire le plein le moins souvent possible. Écrivez une fonction Python rapide qui détermine à quelles stations-service il doit s'arrêter. Exercice 9.6 Un cambrioleur entre par effraction dans une maison. Il n'est capable de porter que K kilos : il lui faudra donc choisir entre les différents objets de valeur, afin d'amasser le plus gros magot possible. On supposera dans un premier temps que les objets sont fractionnables (on peut en prendre n'importe quelle quantité, c'est le cas d'un liquide ou d'une poudre). Il y a n matières différentes, numérotées de 0 à n 1, la i-ème ayant un prix p[i] par kilo. La quantité disponible de cette matière est q[i]. On suppose que tous les prix sont différents deux à deux. Question Proposez un algorithme qui donne un choix optimal pour le voleur. Ce choix est-il unique? Programmez une fonction voleur en Python qui reprenne cet algorithme (vous pourrez supposer que le tableau p est trié). Prenez par exemple : p = [43, 40, 37, 33, 28, 25, 20, 17, 14, 13], q = [7, 6, 12, 11, 2, 23, 1, 4, 24, 43], K = 55. Question On suppose maintenant que les objets sont non fractionnables (c'est le cas d'un vase ou d'un téléviseur). Le i-ème objet vaut un prix p[i] et pèse un poids q[i]. Proposez une méthode dérivée de la question 1 (sans la programmer). Donne-t-elle un choix optimal? Algorithmes de tri Une des opérations les plus courantes en programmation est le tri d'objets. Les ordres les plus utilisés sont l'ordre numérique et l'ordre lexicographique. Les principales caractéristiques qui permettent de différencier les algorithmes de tri sont la complexité algorithmique (voir 8.5) et les ressources nécessaires (notamment en terme d'espace mémoire utilisé). On peut montrer que la complexité temporelle en moyenne et dans le pire des cas d'un algorithme basé sur une fonction de comparaison ne peut pas être meilleure que O(n log(n)). Les tris qui ne demandent que O(n log(n)) comparaisons en moyenne sont alors dits optimaux. Dans les algorithmes ci-dessous, on effectuera des tris par ordre croissant Tri par sélection Le tri par sélection est un des algorithmes de tri les plus triviaux. On recherche le plus grand élément que l'on va replacer à sa position finale, c'est-à-dire en dernière position. Puis on recherche le second plus grand élément que l'on va placer en avant-dernière position, etc., jusqu'à ce que le tableau soit entièrement trié. def swap(l,i,j): # echange 2 valeurs d'une liste l[i],l[i] = l[j], l[i] 9-7

8 def tri_selection(l): for i in range(len(l)-1): mini=i for j in range(i+1,len(l)): if l[j]<l[mini]: mini=j swap(l,i,mini) Complexité Meilleur des cas : O(n2) quand le tableau est déjà trié. Pire cas : O(n2) quand le tableau est trié en ordre inverse. En moyenne : O(n2) Tri à bulles (Bubble sort) Le tri à bulles est un algorithme de tri qui consiste à faire remonter progressivement les plus petits éléments d'une liste, comme les bulles d'air remontent à la surface d'un liquide. L'algorithme parcourt la liste, et compare les couples d'éléments successifs. Lorsque deux éléments successifs ne sont pas dans l'ordre croissant, ils sont échangés. Après chaque parcours complet de la liste, l'algorithme recommence l'opération. Lorsqu'aucun échange n'a lieu pendant un parcours, cela signifie que la liste est triée : l'algorithme peut s'arrêter. Cet algorithme est souvent enseigné en tant qu'exemple algorithmique. Cependant, il présente une complexité en O(n2) dans le pire des cas (où n est la longueur de la liste), ce qui le classe parmi les mauvais algorithmes de tri. Il n'est donc quasiment pas utilisé en pratique. def swap(l,i,j): # echange 2 valeurs d'une liste l[i],l[j] = l[j],l[i] def tri_a_bulles(l): for i in range(len(l)): for j in reversed(range(i,len(l))): if l[j]<l[j-1]: swap(l,j-1,j) Complexité Meilleur cas : O(n) quand le tableau est trié. Pire des cas : O(n2) quand le tableau est trié en ordre inverse (n 1) (n 1) = O(n²) Tri par insertion Le tri par insertion est le tri le plus efficace sur des listes de petite taille. C'est pourquoi il est utilisé par d'autres méthodes comme le Quicksort (voir 9.5.4). Il est d'autant plus rapide que les données sont déjà triées en partie dans le bon ordre. Le principe de ce tri est très simple : c'est le tri que toute personne utilise naturellement quand elle a des dossiers (ou n'importe quoi d'autre) à classer. On prend un dossier et on le met à sa place parmi les dossiers déjà triés. Puis on recommence avec le dossier suivant. Pour procéder à un tri par insertion, il suffit de parcourir une liste : on prend les éléments dans l'ordre. Ensuite, on les compare avec les éléments précédents jusqu'à trouver la place de l'élément qu'on considère. Il ne reste plus qu'à décaler les éléments du tableau pour insérer l'élément considéré à sa place dans la partie déjà triée. def tri_insertion(liste): j, n = 1, len(liste) while j!= n: i = j - 1 temp = liste[j] while i > -1 and liste[i] > temp: liste[i+1] = liste[i] i = i - 1 liste[i+1] = temp j = j

9 L'informatique au lycée Complexité Pire cas : O(n2) quand le tableau est trié en ordre inverse Moyenne : O(n2) Quicksort Le Quicksort est une méthode de tri inventée par Sir Charles Antony Richard Hoare en 1961 et fondée sur la méthode de conception «diviser pour régner». Il peut être implémenté sur un tableau ou sur des listes ; son utilisation la plus répandue concerne tout de même les tableaux. Le Quicksort est un tri dont la complexité moyenne est en O(n log(n)), mais dont la complexité dans le pire des cas est un comportement quadratique en O(n2). Malgré ce désavantage théorique, c'est en pratique un des tris les plus rapide pour des données réparties aléatoirement. Les entrées donnant lieu au comportement quadratique dépendent de l'implémentation de l'algorithme, mais sont souvent (si l'implémentation est maladroite) les entrées déjà presque triées. Il sera plus avantageux alors d'utiliser le tri par insertion. La méthode consiste à placer un élément du tableau (appelé pivot) à sa place définitive, en permutant tous les éléments de telle sorte que tous ceux qui lui sont inférieurs soient à sa gauche et que tous ceux qui lui sont supérieurs soient à sa droite. Cette opération s'appelle le partitionnement. Pour chacun des sous-tableaux, on définit un nouveau pivot et on répète l'opération de partitionnement. Ce processus est répété récursivement, jusqu'à ce que l'ensemble des éléments soit trié. def partition(tab, debut, fin): while debut < fin: while debut < fin: if tab[debut] > tab[fin]: tab[debut], tab[fin] = tab[fin], tab[debut] break fin = fin - 1 while debut < fin: if tab[debut] > tab[fin]: tab[debut], tab[fin] = tab[fin], tab[debut] break debut = debut + 1 return debut def quicksort(tab, debut=none, fin=none): if debut is None: debut = 0 if fin is None: fin = len(tab) if debut < fin: i = partition(tab, debut, fin-1) quicksort(tab, debut, i) quicksort(tab, i+1, fin) Dans la pratique, pour les partitions avec un faible nombre d'éléments (jusqu'à environ 15 éléments), on a souvent recours à un tri par insertion qui se révèle plus efficace que le Quicksort. Le problème le plus important est le choix du pivot. Une implémentation du Quicksort qui ne choisit pas adéquatement le pivot sera très inefficace pour certaines entrées. Par exemple, si le pivot est toujours le plus petit élément de la liste, Quicksort sera aussi inefficace qu'un tri par sélection. 9-9

10 Complexité Pire des cas : O(n2) quand le tableau est trié en ordre inverse En moyenne et dans le meilleur des cas : O(n log(n)) Tri par fusion (Mergesort) Le tri par fusion repose sur le fait que, pour fusionner deux listes/tableaux trié(e)s dont la somme des longueurs est n, n 1 comparaisons au maximum sont nécessaires. Pour aller aussi vite que le Quicksort, il a donc besoin d'utiliser O(n) mémoire supplémentaire, mais il a l'avantage d'être stable c'est-à-dire de ne pas mélanger ce qui est déjà trié. L'algorithme peut être décrit récursivement : On découpe en deux parties à peu près égales les données à trier. On trie les données de chaque partie. On fusionne les deux parties. La récursivité s'arrête car on finit par arriver à des listes composées d'un seul élément et le tri est alors trivial. On peut aussi utiliser un algorithme itératif : On trie les éléments deux à deux. On fusionne les listes obtenues. On recommence l'opération précédente jusqu'à ce qu'on ait une seule liste triée. Complexité Moyenne et pire des cas : O(n log(n)) def merge(l1, l2): liste = [] i = j = 0 n1=len(l1) n2=len(l2) while True: if i<n1 and j<n2: if l1[i]<l2[j]: liste.append(l1[i]) i+=1 else: liste.append(l2[j]) j+=1 elif i>=n1: liste.extend(l2[j:]) break else: liste.extend(l1[i:]) break return liste def tri_fusion(liste): def tri_fusion_interne(liste): if len(liste)<2 : return liste 9-10

11 L'informatique au lycée return merge(tri_fusion_interne(liste[:len(liste)//2]), tri_fusion_interne(liste[len(liste)//2:])) liste[:] = tri_fusion_interne(liste) Tri par tas (Heapsort) Cet algorithme permet de trier les éléments d'un tableau en O(n log (n)) dans le pire des cas, où n est le nombre d'éléments à trier. Les principaux atouts de cette méthode sont la faible consommation mémoire et l'efficacité optimale. Principe L'idée qui sous-tend cet algorithme consiste à voir le tableau comme un arbre binaire. Le premier élément est la racine, le deuxième et le troisième sont les deux descendants du premier élément, etc. Ainsi le n-ième élément a pour fils les éléments 2n+1 et 2n+2. Si le tableau n'est pas de taille 2n, les branches ne se finissent pas tout à fait à la même profondeur. Dans l'algorithme, on cherche à obtenir un tas, c'est-à-dire un arbre binaire vérifiant les propriétés suivantes (les deux premières propriétés découlent de la manière dont on considère les éléments du tableau) : la différence maximale de profondeur entre deux feuilles est de 1 (i.e. toutes les feuilles se trouvent sur la dernière ou sur l'avant-dernière ligne) ; les feuilles de profondeur maximale sont «tassées» sur la gauche. chaque nœud est de valeur supérieure à celles de ses deux fils, pour un tri ascendant. Comme expliqué au paragraphe 6.4.2, un tas ou un arbre binaire presque complet peut être stocké dans un tableau, en posant que les deux descendants de l'élément d'indice n sont les éléments d'indices 2n+1 et 2n+2 (pour un tableau indicé à partir de 0). En d'autres termes, les nœuds de l'arbre sont placés dans le tableau ligne par ligne, chaque ligne étant décrite de gauche à droite. Une fois le tas de départ obtenu, l'opération de base de ce tri est le tamisage d'un élément, supposé le seul «mal placé» dans un arbre qui est presque un tas. Plus précisément, considérons un arbre T = T[0] dont les deux sous-arbres (T[1] et T[2]) sont des tas, tandis que la racine est éventuellement plus petite que ses fils. L'opération de tamisage consiste à échanger la racine avec le plus grand de ses fils, et ainsi de suite récursivement jusqu'à ce qu'elle soit à sa place. Pour construire un tas à partir d'un arbre quelconque, on tamise les racines de chaque sous-tas, de bas en haut (par taille croissante) et de droite à gauche. Pour trier un tableau à partir de ces opérations, on commence par le transformer en tas. On échange la racine avec le dernier élément du tableau, et on restreint le tas en ne touchant plus au dernier élément, c'est-à-dire à l'ancienne racine. On tamise la racine dans le nouveau tas, et on répète l'opération sur le tas restreint jusqu'à l'avoir vidé et remplacé par un tableau trié. def faire_tas(tab, debut, n): # transforme le tableau "tab" en un tas racine = debut while racine*2 + 1 < n: fils = racine*2 + 1 if fils < n-1 and tab[fils] < tab[fils+1]: fils += 1 if tab[racine] < tab[fils]: tab[racine], tab[fils] = tab[fils], tab[racine] racine = fils else: return def heapsort(tab): n = len(tab) debut = n//2-1 fin = n - 1 while debut >= 0: faire_tas(tab, debut, n) debut -= 1 while fin > 0: tab[fin], tab[0] = tab[0], tab[fin] faire_tas(tab, 0, fin) fin -=

12 9.6. Tester si un point est dans un polygone Dans le plan, étant donné un polygone simple (dont les arêtes ne se coupent pas), comment déterminer si un point se trouve à l'intérieur ou à l'extérieur de ce polygone? Méthode La méthode la plus utilisée est de tracer une demi-droite de ce point vers l'infini et de compter les intersections entre cette droite et les segments du polygone. Tracer une demi-droite à partir du point vers l'infini. Calculer le nombre L d'intersections entre cette demi-droite et les côtés du polygone. Un nombre L impair indique que le point est à l'intérieur. Il faut bien sûr faire attention aux coins qui tombent juste sur la demi-droite. Nombre pair d'intersection : point à l'extérieur Nombre impair d'intersections : point à l'intérieur Pour savoir si deux segments se coupent La première chose à faire est de trouver une méthode pour localiser un point P par rapport à une ligne passant par les points P0 et P1. Le dessin ci-dessous illustre les trois possibilités. Pour différencier ces trois cas, on peut utiliser les déterminants. En effet, rappelons-nous qu'un déterminant peut être interprété comme une aire signée. Ainsi, sur le dessin ci-contre : dét(p0p1, P0P2) > 0 dét(p0p1, P0P3) < 0 dét(p0p1, P0P4) = 0 où les PiPj désignent des vecteurs-colonnes et dét un déterminant 2x2. On dira que : orientation(p0, P1, P2) = 1 orientation(p0, P1, P3)= 1 orientation(p0, P1, P4)= 0 D'où la condition ci-dessous : SI orientation(q0,q1,p0) orientation(q0,q1,p1) ET orientation(p0,p1,q0) orientation(p0,p1,q1) ALORS RETOURNER «les deux segments se coupent» 9-12

13 L'informatique au lycée Exercice 9.7 Écrivez un programme Python qui implémente la méthode vue ci-dessus. Le polygone sera donné par la liste de ses sommets. Vous trouverez sur le site compagnon une ébauche à compléter Enveloppe convexe Imaginons une planche avec des clous qui dépassent. Englobons ces points avec un élastique que l'on relâche. Le polygone obtenu (en bleu ci-dessous) est l'enveloppe convexe (convex hull). En trois dimensions, l'idée serait la même avec un ballon qui se dégonflerait jusqu'à être en contact avec tous les points qui sont à la surface de l'enveloppe convexe Marche de Jarvis (Gift wrapping algorithm) La marche de Jarvis est un algorithme qui «enveloppe» un ensemble de points dans un «papier cadeau» : on accroche ce papier à un point initial p1, puis on le tend, et on tourne autour du nuage de points Le premier point rencontré par le papier sera p1, puis p2,... jusqu'à retrouver p0. On construit donc l'enveloppe convexe segment par segment, en partant du point p0. Il ne doit y avoir aucun point à gauche du prochain segment pi pi+1. Il n'y a qu'un point pi+1 qui satisfait cette condition ; il faut le chercher parmi les points qui ne sont pas encore sur l'enveloppe convexe. On s'arrête lorsque pi+1 = p0. Remarquons que les points ne sont pas triés, alors que ce sera le cas pour le parcours de Graham. Cet algorithme doit son nom à R. A. Jarvis, qui publia cet algorithme en Complexité La complexité est en O(nh), où n est le nombre total de sommets et où h représente le nombre de sommets de l'enveloppe convexe. On qualifie ce genre d'algorithme de «sensible à la sortie». 9-13

14 Exercice 9.8 Écrivez un programme Python qui implémente la marche de Jarvis. Vous trouverez sur le site compagnon une ébauche à compléter Parcours de Graham (Graham's scan) Cet algorithme doit son nom à Ronald Graham, qui a publié l'algorithme original en La première étape de cet algorithme consiste à rechercher le point le plus à gauche. S'il y a égalité entre plusieurs points, l'algorithme choisit parmi eux le point de plus petite ordonnée. Nommons P0 ce point. La complexité en temps de cette étape est en O(n), n étant le nombre de points de l'ensemble. Les autres points Pi sont ensuite triés en fonction de la pente du segment P0Pi, de la plus grande pente à la plus petite. N'importe quel algorithme efficace de tri convient pour cela. À l'issue de cette étape, on dispose d'un tableau T contenant les points ainsi triés. P0 sera le premier élément de ce tableau. L'algorithme considère ensuite successivement les séquences de trois points contigus dans le tableau T, vus comme deux segments successifs. On regarde ensuite si ces deux segments mis about à bout constitue un «tournant à gauche» ou un «tournant à droite». Si l'on rencontre un «tournant à droite», l'algorithme passe au point suivant de T. Si c'est un «tournant à gauche», cela signifie que l'avant-dernier point considéré (le deuxième des trois) ne fait pas partie de l'enveloppe convexe, et qu'il doit être enlevé de T. Cette analyse se répète ensuite, tant que l'ensemble des trois derniers points est un «tournant à gauche». Le processus se terminera quand on retombera sur le point P0. T contiendra alors les points formant l'enveloppe convexe. Complexité Le tri des points peut se faire avec une complexité en temps en O(nlog(n)). La complexité de la boucle principale peut sembler être en O(n2), parce que l'algorithme revient en arrière à chaque point pour évaluer si l'un des points précédents est un «tournant à droite». Mais elle est en fait en O(n), parce que chaque point n'est considéré qu'une seule fois. Ainsi, chaque point analysé soit termine la sous-boucle, soit est retiré de T et n'est donc plus jamais considéré. La complexité globale de l'algorithme est donc en O(nlog(n)), puisque la complexité du tri domine la complexité du calcul effectif de l'enveloppe convexe. 9-14

15 L'informatique au lycée Exercice 9.9 Écrivez un programme Python qui implémente le parcours de Graham. Vous trouverez sur le site compagnon une ébauche à compléter Algorithmes probabilistes Un algorithme probabiliste est un algorithme dont le déroulement fait appel à des données tirées au hasard. Dans leur ouvrage, conception et analyse, G. Brassard et P. Bratley classent les algorithmes probabilistes en quatre catégories : Algorithmes numériques Utilisés pour approcher la solution à des problèmes numériques (ex. calcul de pi, intégration numérique, etc.). La précision augmente avec le temps disponible. Certains auteurs classent ces algorithmes dans la catégorie Monte Carlo Algorithmes de Sherwood Utilisés lorsqu'un algorithme déterministe fonctionne plus rapidement en moyenne qu'en pire cas. Ces algorithmes peuvent éliminer la différence entre bonnes et mauvaises entrées. Exemple : Quicksort Algorithmes de Las Vegas Ces algorithmes peuvent parfois retourner un message disant qu'ils n'ont pas pu trouver la réponse. La probabilité d'un échec peut être rendu arbitrairement petite en répétant l'algorithme suffisamment souvent. Algorithmes de Monte Carlo Ces algorithmes retournent toujours une réponse mais celle-ci n'est pas toujours juste. La probabilité d'obtenir une réponse correcte augmente avec le temps disponible. Exercice 9.10 Modifiez le programme de l'exercice 9.7 qui teste si un point est à l'intérieur d'un polygone, afin d'estimer l'aire de ce polygone. Pour ce faire, vous générerez 100'000 points au hasard et calculerez le pourcentage de points «tombés» à l'intérieur du polygone. Exercice 9.11 Développez et programmez une méthode basée sur l'estimation de l'aire d'un quart de cercle pour approcher la valeur de π. Exercice 9.12 : Le compte est bon (2) Nous avons vu au 7.5 un algorithme récursif cherchant les solutions du jeu. Nous allons ici nous contenter d'une méthode naïve et peu efficace, mais facile à programmer : il s'agira de rechercher aléatoirement des solutions et de ne garder que celle qui se rapproche le plus du résultat demandé, ou qui l'atteint. Données : six nombres dans une liste L et le résultat r à approcher Choisir deux nombres a et b au hasard dans la liste L. Choisir une opération arithmétique (+, -, *, /) au hasard. L'opération doit être possible (par exemple, on ne peut pas diviser 5 par 9) et utile (il est 9-15

16 inutile par exemple de multiplier un nombre par 1). Poser c := opération(a, b). Mémoriser ce calcul intermédiaire dans une chaîne de caractères (une string). Éliminer a et b de la liste L. Ajouter c à la liste L. SI c = r ALORS afficher tous les calculs intermédiaires. STOP SI il y a plus d'un nombre dans la liste ALORS aller à 1 SINON afficher la liste des calculs intermédiaires et le résultat obtenu On répétera cet algorithme des milliers de fois et on n'affichera que la meilleure solution trouvée. Programmez cet algorithme en Python. Exercice 9.13 Modifiez le programme du pour trouver la plus belle grille de Ruzzle grâce à un algorithme probabiliste. Par «plus belle», on entend celle qui contient le plus de mots français. Vous utiliserez le dictionnaire du 8.10 qui est disponible sur le site web compagnon : Voici les fréquences des lettres de ce dictionnaire (on a analysé tous les mots de 2 à 16 lettres sans tiret et sans apostrophe) : E S 14.89% 10.21% A I R N T O L U C M D 9.71% 9.40% 8.67% 7.34% 6.82% 5.82% 4.01% 3.60% 3.40% 2.54% 2.36% P G B F H Z V Q Y X J K W 2.35% 1.60% 1.40% 1.36% 1.16% 1.07% 0.96% 0.50% 0.34% 0.25% 0.18% 0.05% 0.01% 9.9. Le problème des n dames pour illustrer les métaheuristiques Le problème des n dames est une généralisation de du problème des 8 dames, vu au paragraphe 9.3 : on considère un échiquier nxn au lieu d'un échiquier 8x8. Bien que ce ne soit pas à proprement parlé un problème d'optimisation, il présente de nombreux avantages : il est visuel et facile à comprendre ; on peut coder la position des dames très simplement : pour chaque colonne, on note sur quelle ligne se trouve la dame, et on lui soustrait 1. La position ci-contre sera : [1, 3, 5, 7, 2, 0, 6, 4] on passe très facilement d'une configuration à une configuration voisine (qui ne satisfait pas forcément les contraintes du problème) : il suffit d'échanger deux colonnes. Une position voisine de celle ci-contre pourrait être [1, 0, 5, 7, 2, 3, 6, 4]. On peut le traiter comme un problème d'optimisation si l'on considère qu'il faut minimiser le nombre de conflits (on parlera de conflit quand deux dames se menacent mutuellement). Il s'agira ici de placer n dames sur l'échiquier nxn, sans aucun conflit, en partant d'une solution avec une seule dame par ligne et par colonne (par exemple toutes les dames sur la diagonale) et en échangeant deux colonnes. On ne cherchera pas toutes les solutions possibles : une seule nous suffira. Notons que dans un problème d'optimisation classique, il n'y a en général qu'une seule meilleure solution. Ici il y en a plusieurs. Il est à noter qu'il existe un algorithme permettant de trouver une solution quel que soit n supérieur à 3 (voir exercice 9.14). L'intérêt du 9.9 n'est donc pas de trouver une solution, mais d'illustrer sur ce problème classique comment se comportent trois des métaheuristiques les plus connues : la recherche avec tabous, le recuit simulé et un algorithme génétique. 9-16

17 L'informatique au lycée Exercice soit r = n mod 12 écrire les nombres pairs de 2 à n si r = 3 ou r = 9 mettre le 2 à la fin de la liste écrire ensuite les nombres impairs de 1 à n, mais si r=8 permuter les nombres impairs 2 par 2 (i.e. 3, 1, 7, 5, 11, 9,...) si r = 2, permuter les places de 1 et 3, puis mettre 5 à la fin de la liste si r = 3 ou r = 9, mettre 1 puis 3 en fin de liste Programmez cet algorithme en Python. Il donnera une solution au problème des n dames. Ainsi, pour n=8 on obtient la position [2, 4, 6, 8, 3, 1, 7, 5] (dans cet algorithme, les lignes sont numérotées à partir de 1). Pour n=15, on aura la solution [4, 6, 8, 10, 12, 14, 2, 5, 7, 9, 11, 13, 15, 1, 3]. Vérifiez la validité de cet algorithme pour n = Première approche : descente de plus grande pente Générer une position de départ. Essayer toutes les permutations de deux colonnes et échanger les deux colonnes qui permettent de diminuer le plus le nombre de conflits. Retourner à 2 jusqu'à obtenir 0 conflit (dans l'idéal) ou un blocage. Résultats avec la descente de plus grande pente Nombre de dames (n) Temps ou nombre de conflits restants 20 2 conflits sec conflit sec sec. Commentaires Selon la position initiale et le nombre de dames, il arrive que l'algorithme se bloque dans un minimum local. C'est arrivé ici avec 20 et 60 dames placées au départ sur la diagonale. Avec 100 dames, on passe d'une situation avec 4950 conflits à une configuration sans conflit en 82 échanges de colonnes. Les temps sont seulement indicatifs et dépendent évidemment de l'ordinateur utilisé. Toutes les expériences ont été faites sur le même ordinateur et dans les mêmes conditions. Exercice 9.15 Modifiez le programme de l'exercice 9.13 pour rechercher la meilleure grille de Ruzzle grâce à une descente de plus grande pente Deuxième approche : recherche avec tabous La méthode taboue est une métaheuristique d'optimisation présentée par Fred Glover en On trouve souvent l'appellation «recherche avec tabous» en français. La méthode taboue consiste, à partir d'une position donnée, à explorer le voisinage et à choisir la position dans ce voisinage qui minimise la fonction objectif (comme dans la descente de plus grande pente). Il est essentiel de noter que cette opération peut conduire à dégrader la valeur de la fonction : c'est le cas lorsque tous les points du voisinage ont une valeur plus élevée. Le risque est qu'à l'étape suivante, on retombe dans le minimum local auquel on vient d'échapper. C'est pourquoi il faut que l'heuristique ait de la mémoire : le mécanisme consiste à interdire (d'où le nom de «tabou») de revenir sur les dernières positions explorées. Les positions déjà explorées sont conservées dans une file (voir 6.2), souvent appelée liste des tabous, d'une taille donnée. Cette file doit conserver des positions complètes, mais cela ne pose pas de problèmes avec les n dames. Pour nos expériences, nous avons utilisé une liste de 10 mouvements tabous. Méthode taboue Rappelons que l'on passe d'une position Générer une position de départ. Parmi les positions voisines, choisir la meilleure qui n'est pas dans la liste des tabous. Si la liste des tabous est pleine, retirer de cette liste la position la plus 9-17

18 à une position voisine en échangeant deux colonnes ancienne. Mettre la position actuelle en queue de la liste des tabous. Retourner à 2, tant qu'on n'a pas décidé de s'arrêter. Résultats avec la méthode taboue Nombre de dames (n) Temps ou nombre de conflits restants sec. 15 sec. 114 sec. 422 sec sec. Commentaires Le programme ne se bloque plus dans un minimum local. La solution finale est toujours la même et dépend de la position initiale. Avec 100 dames, on passe d'une situation avec 4950 conflits à une configuration sans conflit en 95 échanges de deux colonnes. Exercice 9.16 Modifiez le programme de l'exercice 9.13 pour rechercher la meilleure grille de Ruzzle grâce à une recherche avec tabous Troisième approche : recuit simulé Le recuit simulé (Simulated Annealing en anglais) est une métaheuristique inspirée d'un processus utilisé en métallurgie. Ce processus alterne des cycles de refroidissement lent et de réchauffage (recuit) qui tendent à minimiser l'énergie du matériau. Elle est aujourd'hui utilisée en optimisation pour trouver les extrema d'une fonction. Elle a été mise au point par trois chercheurs de la société IBM, S. Kirkpatrick, C.D. Gelatt et M.P. Vecchi en 1983, et indépendamment par V. Cerny en Recuit simulé Remarque sur le point 4 Ici, on cherche à minimiser le score, qui est le nombre de conflits. Si on cherche à maximiser le score, il faut calculer = score(p1) score(p2) Choisir une «température» de départ T. Générer une position aléatoire. Appelons-la Copier la position P1 dans une position P2, choisies aléatoirement. Calculer = score(p2) score(p1) Si 0, P1 P2 ; le cas échéant, mettre meilleure position. Aller à 8. Générer un nombre réel aléatoire entre 0 et Si r < exp( /T), P1 P2. Diminuer T. Retourner à 3, tant qu'on n'a pas décidé de P1. puis échanger deux colonnes de P1 à jour le meilleur score et la 1, que nous appellerons r. s'arrêter. Le réglage des paramètres est ici plus délicat. En particulier, comment faut-il faire baisser la température? Trop vite, on risque de se bloquer dans un minimum local. Trop lentement, le temps de calcul augmentera, sans garantie de trouver une solution. La solution retenue a été de faire baisser la température par palier de longueur 10, avec une température initiale T=100, avec Tk+1=0.6 Tk, k représentant un numéro de palier. C'est très inhabituel, car on prend généralement un coefficient proche de 1. Résultats avec le recuit simulé Nombre de dames (n) Temps moyen en cas de succès* Nombre de succès sur 10 essais sec sec sec sec sec. 10 *Il s'agit d'une moyenne sur 10 essais, puisque le hasard joue ici un rôle important. Les temps des essais où l'on n'a pas trouvé de solution n'ont pas été pris en compte. 9-18

19 L'informatique au lycée Commentaires Étant donné l'usage du hasard, on ne sait pas quelle solution finale sera trouvée. Ce ne sera pas toujours la même, contrairement à la recherche avec tabous. Curieusement, le recuit simulé marche le moins bien quand il y a peu de dames (7 succès seulement avec 20 dames). Il est par contre redoutable en temps de calcul, puisqu'il ne lui faut que 23 secondes pour trouver une solution avec 100 dames, alors que la méthode taboue en mettait Exercice 9.17 Modifiez le programme de l'exercice 9.13 pour rechercher la meilleure grille de Ruzzle grâce à un recuit simulé Quatrième approche : algorithme génétique Les algorithmes génétiques appartiennent à la famille des algorithmes évolutionnistes (un sousensemble des métaheuristiques). Leur but est d'obtenir une solution approchée, en un temps correct, à un problème d'optimisation, lorsqu'il n'existe pas ou qu'on ne connaît pas de méthode exacte pour le résoudre en un temps raisonnable. Les algorithmes génétiques utilisent la notion de sélection naturelle développée au XIXe siècle par le scientifique Darwin et l'appliquent à une population de solutions potentielles au problème donné. On se rapproche par bonds successifs d'une solution. L'utilisation d'algorithmes génétiques, dans la résolution de problèmes, est à l'origine le fruit des recherches de John Holland et de ses collègues et élèves de l'université du Michigan qui ont, dès 1960, travaillé sur ce sujet. Le premier aboutissement de ces recherches a été la publication en 1975 de Adaptation in Natural and Artificial System. Algorithme génétique Générer une population de 2n positions aléatoires. Classer et numéroter ces 2n positions selon leur score, du meilleur au moins bon. Croiser les grilles 2k 1 et 2k, pour k allant de 1 à n. Effectuer une mutation pour chaque position : avec une certaine probabilité, effacer une case et placer un nouveau chiffre de 0 à 7. Classer et numéroter les 2n grilles obtenues selon leur score, du meilleur au moins bon. Dupliquer la grille 1 (la meilleure) et placer ce doublon en position 2n, après avoir éliminé la grille 2n (la moins bonne). Le cas échéant, mettre à jour le meilleur score et la meilleure position. Retourner à 3, tant qu'on n'a pas décidé de s'arrêter. Schéma de l'algorithme génétique Quelques commentaires sur ce schéma Chaque position est représentée pas une liste de n nombres indiquant la ligne occupée pour la colonne correspondante. 9-19

20 Avec 8 dames, la position ci-dessous est représentée par la liste [0, 5, 1, 4, 6, 3, 7, 2]. Chaque position est évaluée grâce à la fonction de performance, ici ce sera le nombre de conflits. (b) Une phase de reproduction détermine quelles positions seront sélectionnées pour la reproduction. Certaines positions peuvent être reproduites plusieurs fois, d'autres disparaîtront. (c) Pour chaque paire se combinant, on détermine aléatoirement le point de croisement. (c) Les enfants sont créés en croisant chaque paire. (d) Finalement, chaque position subit éventuellement une mutation aléatoire. (e) Commentaire Cette approche n'a (pour l'instant) pas donné de résultats intéressants. Elle ne fonctionne qu'avec de petits damiers. Il semble difficile de choisir les différents paramètres. Exercice 9.18 Modifiez le programme de l'exercice 9.13 pour rechercher la meilleure grille de Ruzzle grâce à un algorithme génétique. Sources [1] Wikipédia,, <http://fr.wikipedia.org/wiki/> [2] Wikipédia, «Algorithmes de tri», <http://fr.wikipedia.org/wiki/catégorie:algorithme_de_tri> [3] Wikipédia, «Marche de Jarvis», <http://fr.wikipedia.org/wiki/marche_de_jarvis> [4] Wikipédia, «Parcours de Graham», <http://fr.wikipedia.org/wiki/parcours_de_graham> [5] Wikipédia, «Test de primalité de Miller-Rabin», <http://fr.wikipedia.org/wiki/test_de_primalité_de_miller-rabin> [6] Wikipédia, «Méta-heuristique», <http://fr.wikipedia.org/wiki/métaheuristique> [7] Wikipédia, «Recuit simulé», <http://fr.wikipedia.org/wiki/recuit_simulé> [8] Wikipédia, «Algorithme génétique», <http://fr.wikipedia.org/wiki/algorithme_génétique> [9] Le labyrinthe dont vous êtes le héros, <http://eljjdx.canalblog.com/archives/2011/02/20/ html> 9-20

Proposition d activité utilisant l application. Tripatouille. (http://www.malgouyres.fr/tripatouille/)

Proposition d activité utilisant l application. Tripatouille. (http://www.malgouyres.fr/tripatouille/) IREM Clermont-Ferrand Algorithmique au lycée Malika More malika.more@u-clermont1.fr 28 janvier 2011 Proposition d activité utilisant l application Tripatouille (http://www.malgouyres.fr/tripatouille/)

Plus en détail

Arbres ordonnés, binaires, tassés, FAP, tri par FAP, tas, tri par tas

Arbres ordonnés, binaires, tassés, FAP, tri par FAP, tas, tri par tas Arbres ordonnés, binaires, tassés, FAP, tri par FAP, tas, tri par tas 1. Arbres ordonnés 1.1. Arbres ordonnés (Arbres O) On considère des arbres dont les nœuds sont étiquetés sur un ensemble muni d'un

Plus en détail

Introduction à l Algorithmique

Introduction à l Algorithmique Introduction à l Algorithmique N. Jacon 1 Définition et exemples Un algorithme est une procédure de calcul qui prend en entier une valeur ou un ensemble de valeurs et qui donne en sortie une valeur ou

Plus en détail

Structures de données non linéaires

Structures de données non linéaires Structures de données non linéaires I. Graphes Définition Un graphe (simple) orienté G est un couple (S, A), où : S est un ensemble dont les éléments sont appelés les sommets. A est un ensemble de couples

Plus en détail

PARCOURS DU CAVALIER SUR L ÉCHIQUIER

PARCOURS DU CAVALIER SUR L ÉCHIQUIER I05 ÉPREUVE COMMUNE DE TIPE 2011 - Partie D TITRE : PARCOURS DU CAVALIER SUR L ÉCHIQUIER Temps de préparation :.. 2 h 15 minutes Temps de présentation devant les examinateurs :.10 minutes Dialogue avec

Plus en détail

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 1 de 46 Algorithmique Trouver et Trier Florent Hivert Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 2 de 46 Algorithmes et structures de données La plupart des bons algorithmes

Plus en détail

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES I-Présentation Un algorithme de recherche de sous-chaine est un type d'algorithme de recherche qui a pour objectif de trouver une chaîne de caractères

Plus en détail

Algorithmique P2. HeapSort et files de priorité Ulg, 2009-2010 Renaud Dumont

Algorithmique P2. HeapSort et files de priorité Ulg, 2009-2010 Renaud Dumont Algorithmique P2 HeapSort et files de priorité Ulg, 2009-2010 Renaud Dumont Structure de tas - arbre Un tas est une structure de données qui Permet un nouveau type de tri (Tri par tas) Permet l'implémentation

Plus en détail

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Leçon 11 PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Dans cette leçon, nous retrouvons le problème d ordonnancement déjà vu mais en ajoutant la prise en compte de contraintes portant sur les ressources.

Plus en détail

Algorithmes probabilistes. Références: Fundamentals of Algortihms de Gilles Brassard et Paul Bratley Note de cours de Pierre McKenzie

Algorithmes probabilistes. Références: Fundamentals of Algortihms de Gilles Brassard et Paul Bratley Note de cours de Pierre McKenzie Algorithmes probabilistes Références: Fundamentals of Algortihms de Gilles Brassard et Paul Bratley Note de cours de Pierre McKenzie Mise en contexte: Indices: Vous êtes à la recherche d un trésor légendaire

Plus en détail

Initiation aux algorithmes des arbres binaires

Initiation aux algorithmes des arbres binaires Initiation aux algorithmes des arbres binaires Plan I. Les arbres biniaires I. Définition II. Représentation graphique d un arbre III. Terminologie IV. Représentation en mémoire des arbres binaires V.

Plus en détail

Date : 18.11.2013 Tangram en carré page

Date : 18.11.2013 Tangram en carré page Date : 18.11.2013 Tangram en carré page Titre : Tangram en carré Numéro de la dernière page : 14 Degrés : 1 e 4 e du Collège Durée : 90 minutes Résumé : Le jeu de Tangram (appelé en chinois les sept planches

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche Chapitre 1 Arbres binaires de recherche 1 Les arbre sont très utilisés en informatique, d une part parce que les informations sont souvent hiérarchisées, et peuvent être représentées naturellement sous

Plus en détail

Travaux dirigés n o 6

Travaux dirigés n o 6 Travaux dirigés n o 6 Lycée Kléber MPSI, Option Info 2014/2015 Exercice 1 (Indexation d un arbre binaire) Ecrire une fonction Caml indexation : ( f, n) arbre_binaire -> (string,string) arbre_binaire qui

Plus en détail

chapitre 4 Nombres de Catalan

chapitre 4 Nombres de Catalan chapitre 4 Nombres de Catalan I Dénitions Dénition 1 La suite de Catalan (C n ) n est la suite dénie par C 0 = 1 et, pour tout n N, C n+1 = C k C n k. Exemple 2 On trouve rapidement C 0 = 1, C 1 = 1, C

Plus en détail

Diagrammes de décisions binaires

Diagrammes de décisions binaires Diagrammes de décisions binaires Épreuve pratique d'algorithmique et de programmation Concours commun des écoles normales supérieures Durée de l'épreuve: 3 heures 30 minutes Juillet 2009 ATTENTION! N oubliez

Plus en détail

Marches, permutations et arbres binaires aléatoires

Marches, permutations et arbres binaires aléatoires Marches, permutations et arbres binaires aléatoires Épreuve pratique d algorithmique et de programmation Concours commun des Écoles Normales Supérieures Durée de l épreuve: 4 heures Cœfficient: 4 Juillet

Plus en détail

LE PROBLEME DU PLUS COURT CHEMIN

LE PROBLEME DU PLUS COURT CHEMIN LE PROBLEME DU PLUS COURT CHEMIN Dans cette leçon nous définissons le modèle de plus court chemin, présentons des exemples d'application et proposons un algorithme de résolution dans le cas où les longueurs

Plus en détail

L2 - Algorithmique et structures de données (Année 2010/2011) Examen (2 heures)

L2 - Algorithmique et structures de données (Année 2010/2011) Examen (2 heures) L2 - lgorithmique et structures de données (nnée 2010/2011) Delacourt, Phan Luong, Poupet xamen (2 heures) Les documents (cours, TD, TP) sont autorisés. Les quatre exercices sont indépendants. À la fin

Plus en détail

Arbres binaires de recherche (ABR) Binary Search Trees (BST)

Arbres binaires de recherche (ABR) Binary Search Trees (BST) LSVIII-BIM Algorithmie, 2015 Arbres binaires de recherche (ABR) Binary Search Trees (BST) I. Arbres binaires 1. Structure 2. Parcours II. Arbres binaires de recherche 1. Définition 2. Opérations sur les

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications A. Optimisation sans contrainte.... Généralités.... Condition nécessaire et condition suffisante

Plus en détail

À propos des matrices échelonnées

À propos des matrices échelonnées À propos des matrices échelonnées Antoine Ducros appendice au cours de Géométrie affine et euclidienne dispensé à l Université Paris 6 Année universitaire 2011-2012 Introduction Soit k un corps, soit E

Plus en détail

Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP)

Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP) Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP) Loris Marchal, Guillaume Melquion, Frédéric Tronel 21 juin 2011 Remarques générales à propos de l épreuve Organisation

Plus en détail

Algorithmes de recherche

Algorithmes de recherche Algorithmes de recherche 1 Résolution de problèmes par recherche On représente un problème par un espace d'états (arbre/graphe). Chaque état est une conguration possible du problème. Résoudre le problème

Plus en détail

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation Complexité Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement Exemples : - si on lance le calcul

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

Licence Sciences et Technologies Examen janvier 2010 Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

ARBRES BINAIRES DE RECHERCHE

ARBRES BINAIRES DE RECHERCHE ARBRES BINAIRES DE RECHERCHE Table de symboles Recherche : opération fondamentale données : éléments avec clés Type abstrait d une table de symboles (symbol table) ou dictionnaire Objets : ensembles d

Plus en détail

CHAPITRE VIII : Les circuits avec résistances ohmiques

CHAPITRE VIII : Les circuits avec résistances ohmiques CHAPITRE VIII : Les circuits avec résistances ohmiques VIII. 1 Ce chapitre porte sur les courants et les différences de potentiel dans les circuits. VIII.1 : Les résistances en série et en parallèle On

Plus en détail

Appuyez et relâchez une fois le bouton gauche de la souris. Il sert à choisir un item ou pour appuyer sur l'un des différents boutons de Windows.

Appuyez et relâchez une fois le bouton gauche de la souris. Il sert à choisir un item ou pour appuyer sur l'un des différents boutons de Windows. Introduction Cette page a été conçue pour vous démontrer les possibilités de la souris. Elle sert premièrement à déplacer le pointeur sur l'écran ou vers des commandes. C'est avec les combinaisons de boutons

Plus en détail

Rendu de travaux I, Algo - langage C

Rendu de travaux I, Algo - langage C IFIP 33 avenue de la République 75011 PARIS Rendu de travaux I, Valérie Amiot RP 50 2001-2002 SOMMAIRE I. Pourquoi sous C? II. Présentation du jeu 1) But du jeu III. Analyse fonctionnelle IV. Fonctionnalités

Plus en détail

Les algorithmes de base du graphisme

Les algorithmes de base du graphisme Les algorithmes de base du graphisme Table des matières 1 Traçage 2 1.1 Segments de droites......................... 2 1.1.1 Algorithmes simples.................... 3 1.1.2 Algorithmes de Bresenham (1965).............

Plus en détail

Chaînes de Markov au lycée

Chaînes de Markov au lycée Journées APMEP Metz Atelier P1-32 du dimanche 28 octobre 2012 Louis-Marie BONNEVAL Chaînes de Markov au lycée Andreï Markov (1856-1922) , série S Problème 1 Bonus et malus en assurance automobile Un contrat

Plus en détail

1. Introduction...2. 2. Création d'une requête...2

1. Introduction...2. 2. Création d'une requête...2 1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête

Plus en détail

Arbres binaires. Chapitre 1. 1. Introduction. option informatique. 1.1 Définition formelle d un arbre binaire

Arbres binaires. Chapitre 1. 1. Introduction. option informatique. 1.1 Définition formelle d un arbre binaire Chapitre option informatique Arbres binaires. Introduction Dans son acceptation la plus générale, un arbre est un graphe acyclique orienté enraciné : tous les sommets, à l exception de la racine, ont un

Plus en détail

Université Paris Diderot Paris 7. TD n 2. Arbres Binaire de Recherche

Université Paris Diderot Paris 7. TD n 2. Arbres Binaire de Recherche Université Paris Diderot Paris L Informatique Algorithmique Année 00-0, er semestre TD n Arbres Binaire de Recherche Le type de donné arbre" sera utilisé pour indiquer l ensemble de toutes les Arbres Binaires

Plus en détail

Jeu de taquin : résolution automatique sur ordinateur

Jeu de taquin : résolution automatique sur ordinateur 1 Jeu de taquin : résolution automatique sur ordinateur Sous sa forme la plus générale, le jeu de taquin est constitué d un rectangle rempli par des blocs carrés accolés, chacun portant un numéro, avec

Plus en détail

Chapitre 1. L algorithme génétique

Chapitre 1. L algorithme génétique Chapitre 1 L algorithme génétique L algorithme génétique (AG) est un algorithme de recherche basé sur les mécanismes de la sélection naturelle et de la génétique. Il combine une stratégie de survie des

Plus en détail

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007 Vision industrielle et télédétection - Détection d ellipses Guillaume Martinez 17 décembre 2007 1 Table des matières 1 Le projet 3 1.1 Objectif................................ 3 1.2 Les choix techniques.........................

Plus en détail

SUPPORT DE COURS WINDOWS VISTA

SUPPORT DE COURS WINDOWS VISTA SOMMAIRE I.... LA GESTION DE L'ORDINATEUR... 2 A.... LES UNÎTES LOGIQUES... 2 1 DISQUES DURS... 2 2 SUPPORTS AMOVIBLES... 3 3 PROPRIÉTÉS DU SUPPORT... 3 B... LE CONTENU DE L'ORDINATEUR... 4 1 DOSSIERS...

Plus en détail

1 Recherche en table par balayage

1 Recherche en table par balayage 1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément

Plus en détail

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Interface PC Vivago Ultra. Pro. Guide d'utilisation Interface PC Vivago Ultra Pro Guide d'utilisation Version 1.03 Configuration de l'interface PC Vivago Ultra Configuration requise Avant d'installer Vivago Ultra sur votre ordinateur assurez-vous que celui-ci

Plus en détail

TP1 Microsoft Access : base de donne es et tables V 1.2

TP1 Microsoft Access : base de donne es et tables V 1.2 TP1 Microsoft Access : base de donne es et tables V 1.2 Il est demandé de suivre pas à pas les indications de ce document. Les tâches bien spécifiques à réaliser sont écrites de cette manière : 1.x faire

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

UTILISER SA CALCULATRICE GRAPHIQUE TI NSPIRE CX CAS

UTILISER SA CALCULATRICE GRAPHIQUE TI NSPIRE CX CAS UTILISER SA CALCULATRICE GRAPHIQUE TI NSPIRE CX CAS Table des matières I ) Bon à savoir 2 I.1. L écran d Accueil (Home), le Bloc-Note (Scratchpad) et les classeurs............................ 2 I.2. Le

Plus en détail

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes. Promotion X 004 COURS D ANALYSE DES STRUCTURES MÉCANIQUES PAR LA MÉTHODE DES ELEMENTS FINIS (MEC 568) contrôle non classant (7 mars 007, heures) Documents autorisés : polycopié ; documents et notes de

Plus en détail

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/ Recherche opérationnelle Les démonstrations et les exemples seront traités en cours Souad EL Bernoussi Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/ Table des matières 1 Programmation

Plus en détail

Exercices de dénombrement

Exercices de dénombrement Exercices de dénombrement Exercice En turbo Pascal, un entier relatif (type integer) est codé sur 6 bits. Cela signifie que l'on réserve 6 cases mémoires contenant des "0" ou des "" pour écrire un entier.

Plus en détail

Chapitre 1 : Introduction aux bases de données

Chapitre 1 : Introduction aux bases de données Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données

Plus en détail

AGASC / BUREAU INFORMATION JEUNESSE 06700 Saint Laurent du Var Tel : 04.93.07.00.66 bij@agasc.fr www.agasc.fr. Word: Les tableaux.

AGASC / BUREAU INFORMATION JEUNESSE 06700 Saint Laurent du Var Tel : 04.93.07.00.66 bij@agasc.fr www.agasc.fr. Word: Les tableaux. Word: Les tableaux Introduction 6 ième partie Il est préférable par moments de présenter de l'information sous forme de tableau. Les instructions qui suivent démontrent comment créer un tableau et comment

Plus en détail

Cours d Algorithmique et Complexité

Cours d Algorithmique et Complexité Cours d Algorithmique et Complexité Structures de données (2e suite) Catalin Dima Arbres binaires de recherche Propriété de base des arbres binaires de recherche Soit x un noeud de l arbre. Alors : 1.

Plus en détail

Raisonnement par récurrence Suites numériques

Raisonnement par récurrence Suites numériques Chapitre 1 Raisonnement par récurrence Suites numériques Terminale S Ce que dit le programme : CONTENUS CAPACITÉS ATTENDUES COMMENTAIRES Raisonnement par récurrence. Limite finie ou infinie d une suite.

Plus en détail

EXCEL TUTORIEL 2012/2013

EXCEL TUTORIEL 2012/2013 EXCEL TUTORIEL 2012/2013 Excel est un tableur, c est-à-dire un logiciel de gestion de tableaux. Il permet de réaliser des calculs avec des valeurs numériques, mais aussi avec des dates et des textes. Ainsi

Plus en détail

Quelques Algorithmes simples

Quelques Algorithmes simples Quelques Algorithmes simples Irène Guessarian ig@liafa.jussieu.fr 10 janvier 2012 Je remercie Patrick Cegielski de son aide efficace pour la programmation Java ; la section sur le codage de Huffman a été

Plus en détail

Utiliser les propriétés Savoir réduire un radical savoir +,-,x,: Utiliser les propriétés des puissances Calculer avec des puissances

Utiliser les propriétés Savoir réduire un radical savoir +,-,x,: Utiliser les propriétés des puissances Calculer avec des puissances ARITHMETIQUE 1 C B A Numération Ecrire en lettres et en chiffres Poser des questions fermées autour d un document simple (message, consigne, planning ) Connaître le système décimal Déterminer la position

Plus en détail

SOMMAIRE 1.Création de la liste d'adresses de courriel...2

SOMMAIRE 1.Création de la liste d'adresses de courriel...2 Luc Mamin Courriel : mamin.luc@orange.fr Mode d'emploi destiné à effectuer un «mailing» par courriel sous OpenOffice.org. L'intérêt du mailing avec OpenOffice.org est double : le mailing s'effectue sans

Plus en détail

THÉORIE DE L'INFORMATION : RAPPELS

THÉORIE DE L'INFORMATION : RAPPELS THÉORIE DE L'INFORMATION : RAPPELS 1920 : premières tentatives de définition de mesure de l'information à partir de 1948 : travaux de Shannon Théorie de l'information discipline fondamentale qui s'applique

Plus en détail

Programmation C++ (débutant)/instructions for, while et do...while

Programmation C++ (débutant)/instructions for, while et do...while Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de

Plus en détail

Algorithmique avancée en Python TDs

Algorithmique avancée en Python TDs Algorithmique avancée en Python TDs Denis Robilliard sept. 2014 1 TD 1 Révisions 1. Ecrire un programme qui saisit un entier, et détermine puis affiche si l entier est pair où impair. 2. Ecrire un programme

Plus en détail

Chapitre 4 Pierre, papier, ciseaux

Chapitre 4 Pierre, papier, ciseaux Python 3 : objectif jeux Chapitre 4 Chapitre 4 Pierre, papier, ciseaux (version graphique) 4.1. Thèmes abordés dans ce chapitre Le module tkinter : Label, Button Fenêtre Événements Réceptionnaire d'événements

Plus en détail

Systemes d'exploitation des ordinateurs

Systemes d'exploitation des ordinateurs ! " #$ % $ &' ( $ plan_ch6_m1 Systemes d'exploitation des ordinateurs Conception de Systèmes de Gestion de la Mémoire Centrale Objectifs 1. Conception de systèmes paginés 2. Conception des systèmes segmentés

Plus en détail

Projet de traitement d'image - SI 381 reconstitution 3D d'intérieur à partir de photographies

Projet de traitement d'image - SI 381 reconstitution 3D d'intérieur à partir de photographies Projet de traitement d'image - SI 381 reconstitution 3D d'intérieur à partir de photographies Régis Boulet Charlie Demené Alexis Guyot Balthazar Neveu Guillaume Tartavel Sommaire Sommaire... 1 Structure

Plus en détail

Chapitre 3 Structures de données linéaires : listes, piles et files

Chapitre 3 Structures de données linéaires : listes, piles et files Chapitre 3 Structures de données linéaires : listes, piles et files 1. Introduction Le but de ce chapitre est de décrire des représentations des structures de données de base telles les listes en général

Plus en détail

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes. Introduction L'objectif de mon TIPE est la reconnaissance de sons ou de notes de musique à l'aide d'un réseau de neurones. Ce réseau doit être capable d'apprendre à distinguer les exemples présentés puis

Plus en détail

Arbres Binaire. PSI DAKHLA Prof Youssef El marzak. 1 Prof Youssef Elmarzak

Arbres Binaire. PSI DAKHLA Prof Youssef El marzak. 1 Prof Youssef Elmarzak Arbres Binaire PSI DAKHLA Prof Youssef El marzak 1 Prof Youssef Elmarzak 1.introduction: Les arbre sont très utilisées en informatique, d une part parce que les informations sont souvent hiérarchisées,

Plus en détail

Traitement de texte : Quelques rappels de quelques notions de base

Traitement de texte : Quelques rappels de quelques notions de base Traitement de texte : Quelques rappels de quelques notions de base 1 Quelques rappels sur le fonctionnement du clavier Voici quelques rappels, ou quelques appels (selon un de mes profs, quelque chose qui

Plus en détail

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB Ce document, écrit par des animateurs de l IREM de Besançon, a pour objectif de présenter quelques unes des fonctions du logiciel Scilab, celles qui sont spécifiques

Plus en détail

Pourquoi l apprentissage?

Pourquoi l apprentissage? Pourquoi l apprentissage? Les SE sont basés sur la possibilité d extraire la connaissance d un expert sous forme de règles. Dépend fortement de la capacité à extraire et formaliser ces connaissances. Apprentissage

Plus en détail

D'UN THÉORÈME NOUVEAU

D'UN THÉORÈME NOUVEAU DÉMONSTRATION D'UN THÉORÈME NOUVEAU CONCERNANT LES NOMBRES PREMIERS 1. (Nouveaux Mémoires de l'académie royale des Sciences et Belles-Lettres de Berlin, année 1771.) 1. Je viens de trouver, dans un excellent

Plus en détail

Algorithmique P2. La complexité Ulg, 2009-2010 R.Dumont

Algorithmique P2. La complexité Ulg, 2009-2010 R.Dumont Algorithmique P2 La complexité Ulg, 2009-2010 R.Dumont Sources supplémentaires Ouvrages Data Structures in Java, T. Standish, 1998 Data Structures and Algorithms in Java (4th ed), Michael T. Goodrich &

Plus en détail

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée. ANALYSE 5 points Exercice 1 : Léonie souhaite acheter un lecteur MP3. Le prix affiché (49 ) dépasse largement la somme dont elle dispose. Elle décide donc d économiser régulièrement. Elle a relevé qu elle

Plus en détail

Initiation à l algorithmique

Initiation à l algorithmique Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG Exploitations pédagogiques du tableur en STG Académie de Créteil 2006 1 EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG Commission inter-irem lycées techniques contact : dutarte@club-internet.fr La maquette

Plus en détail

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list =

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun> 94 Programmation en OCaml 5.4.8. Concaténation de deux listes Définissons maintenant la fonction concat qui met bout à bout deux listes. Ainsi, si l1 et l2 sont deux listes quelconques, concat l1 l2 constitue

Plus en détail

x n = x x n 1 Exercice 3 Le but de cet exercice est de modéliser les suites définies par récurrence de la façon suivante :

x n = x x n 1 Exercice 3 Le but de cet exercice est de modéliser les suites définies par récurrence de la façon suivante : Ocaml - Exercices Exercice Définir en Ocaml les fonctions suivantes:. f : x sin x + cos x. g : x x 3x+ x x 5 3. Fonction h calculant la moyenne géométrique de deux float positifs ( xy) Exercice Ecrire

Plus en détail

Terminale STMG Lycée Jean Vilar 2013/2014. Terminale STMG. O. Lader

Terminale STMG Lycée Jean Vilar 2013/2014. Terminale STMG. O. Lader Terminale STMG O. Lader Table des matières 1 Information chiffrée (4s) 4 1.1 Taux d évolution....................................... 6 1.2 indices............................................. 6 1.3 Racine

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

9 è et 10 è années 2013

9 è et 10 è années 2013 Partie A: Chaque bonne réponse vaut 3 points. Jeu-concours international KANGOUROU DES MATHÉMATIQUES 1. Le nombre n'est pas divisible par (A). (B). (C). (D). (E). 2. Les huit demi-cercles inscrits à l'intérieur

Plus en détail

modélisation solide et dessin technique

modélisation solide et dessin technique CHAPITRE 1 modélisation solide et dessin technique Les sciences graphiques regroupent un ensemble de techniques graphiques utilisées quotidiennement par les ingénieurs pour exprimer des idées, concevoir

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

CH.8 Décidabilité. Propriétés des langages récursifs : Fermés par complémentation, union et intersection. oui. non. oui M 1. non. oui M 2.

CH.8 Décidabilité. Propriétés des langages récursifs : Fermés par complémentation, union et intersection. oui. non. oui M 1. non. oui M 2. CH.8 Décidabilité 8.1 Les langages récursifs 8.2 La machine de Turing universelle 8.3 Des problèmes de langages indécidables 8.4 D'autres problèmes indécidables Automates ch8 1 8.1 Les langages récursifs

Plus en détail

Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21

Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21 Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21 Anne Brygoo, Maryse Pelletier, Christian Queinnec, Michèle Soria Université Paris 6 Pierre et Marie Curie septembre 2005

Plus en détail

Mathématiques financières

Mathématiques financières Mathématiques financières Table des matières 1 Intérêt simple 1 1.1 Exercices........................................ 1 2 Intérêt composé 2 2.1 Taux nominal, taux périodique, taux réel.......................

Plus en détail

file://c:\documents and Settings\moi\Local Settings\Temp\~hhBA4D.htm

file://c:\documents and Settings\moi\Local Settings\Temp\~hhBA4D.htm Page 1 sur 10 Évaluation de position par le programme d'échecs Un programme d'échecs évalue la position de manière algébrique. Ici, l'évaluation est de -/+ (-0.79). Ceci signifie que le programme évalue

Plus en détail

Systèmes Binaires. V. Langlet

Systèmes Binaires. V. Langlet Systèmes Binaires V. Langlet Niveau : De la Terminale aux Maths du supérieur Diculté : De plus en plus dur au l des exercices. Durée : Environ deux heures, suivant la compréhension du sujet. Rubrique(s)

Plus en détail

AGASC / BUREAU INFORMATION JEUNESSE 06700 Saint Laurent du Var Tel : 04.93.07.00.66 E mail : bij@agasc.fr www.agasc.fr. Word: La présentation

AGASC / BUREAU INFORMATION JEUNESSE 06700 Saint Laurent du Var Tel : 04.93.07.00.66 E mail : bij@agasc.fr www.agasc.fr. Word: La présentation Word: La présentation Introduction 2 ième partie Bien que le contenu du document soit le plus important, Word vous offre plusieurs options pour améliorer la présentation du texte. Cette page va vous montrer

Plus en détail

Jeu de Dames. Rapport de projet. Etudiants : Tuteur : Mohr Maxence Ollagnon Julien. Informatique 3 ème année Promo 2016 Projet Algorithmique

Jeu de Dames. Rapport de projet. Etudiants : Tuteur : Mohr Maxence Ollagnon Julien. Informatique 3 ème année Promo 2016 Projet Algorithmique Polytech'Marseille Case 925 163, avenue de Luminy 13288 Marseille cedex 9 Informatique 3 ème année Promo 2016 Projet Algorithmique Jeu de Dames Rapport de projet Etudiants : Tuteur : Charton Trystan Alexandra

Plus en détail

Le chiffre est le signe, le nombre est la valeur.

Le chiffre est le signe, le nombre est la valeur. Extrait de cours de maths de 6e Chapitre 1 : Les nombres et les opérations I) Chiffre et nombre 1.1 La numération décimale En mathématique, un chiffre est un signe utilisé pour l'écriture des nombres.

Plus en détail

RÉVISION DE CALCUL NUMÉRIQUE

RÉVISION DE CALCUL NUMÉRIQUE RÉVISION DE CALCUL NUMÉRIQUE. Les ensembles numériques. Propriétés des nombres réels. Ordre des opérations. Nombres premiers. Opérations sur les fractions 7. Puissances entières 0.7 Notation scientifique.8

Plus en détail

Algorithmique et Programmation Projets 2012/2013

Algorithmique et Programmation Projets 2012/2013 3 Dames 3. Objectif Il s agit d écrire un programme jouant aux Dames selon les règles. Le programme doit être le meilleur possible. Vous utiliserez pour cela l algorithme α β de recherche du meilleur coup

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Infolettre #18 : Les graphiques avec Excel 2010

Infolettre #18 : Les graphiques avec Excel 2010 Infolettre #18 : Les graphiques avec Excel 2010 Table des matières Introduction... 1 Hourra! Le retour du double-clic... 1 Modifier le graphique... 4 Onglet Création... 4 L onglet Disposition... 7 Onglet

Plus en détail

Chapitre 7. Récurrences

Chapitre 7. Récurrences Chapitre 7 Récurrences 333 Plan 1. Introduction 2. Applications 3. Classification des récurrences 4. Résolution de récurrences 5. Résumé et comparaisons Lectures conseillées : I MCS, chapitre 20. I Rosen,

Plus en détail

Tune Sweeper Manuel de l'utilisateur

Tune Sweeper Manuel de l'utilisateur Tune Sweeper Manuel de l'utilisateur www.wideanglesoftware.com Table des matières Introduction 2 Démarrage rapide 5 Recherche de doublons 9 Sélection des pistes à conserver 12 Éliminer les doublons 15

Plus en détail

2. Fractions et pourcentages

2. Fractions et pourcentages FRACTIONS ET POURCENTAGES. Fractions et pourcentages.. Définitions Certaines divisions tombent justes. C'est par exemple le cas de la division 4 8 qui donne.. D'autres ne s'arrêtent jamais. C'est ce qui

Plus en détail