Algorithmique et Programmation
|
|
|
- Gabin Fortier
- il y a 10 ans
- Total affichages :
Transcription
1 École Supérieure d Ingénieurs de Poitiers Gea Algorithmique et Programmation Laurent Signac
2 ii Algorithmique et programmation Gea
3 Table des matières Avant Propos v Structures de données Notion de pointeur Passage par adresse Listes chaînées Parcours de liste Insertion en tête de liste Arbres binaires Parcours d un arbre Construction d un arbre Arbres binaires de recherche Graphes Matrices d adjacences Listes d adjacences Insertion d une arête Recherche de plus courts chemins Méthodes algorithmiques Diviser pour régner Marquage d une règle Tri par fusion Programmation dynamique Notions de complexité en temps Tri par insertion Complexité d un problème Tri rapide Programmation en C A Travaux dirigés 7 iii
4 iv Algorithmique et programmation Gea
5 Avant Propos Ce fascicule constitue le support de cours utilisé à l École Supérieure d Ingénieurs de Poitiers, dans la spécialité Génie Électrique et Automatique en deuxième année. Il fait suite au polycopié de tronc commun de première année, en ce sens que des problèmes d algorithmique y sont encore traités. En revanche, une partie conséquente, et plus technique, est consacrée à la programmation en C. Le lecteur se rendra vite compte que les sujets qui auraient pu être traités sont inépuisables. En conséquence, il est intéressant de pouvoir se reporter à des ouvrages plus spécialisés ou plus complets. En voici une liste (la bibliographie se trouve à la fin) : En ce qui concerne l algorithmique en général, [4] constitue ne référence, aborde largement plus de sujet que ceux qui sont traités ici, et de manière très rigoureuse. Néanmoins, il ne contient aucune référence technique (de programmation), et fait appel à un langage algorithmque créé pour l occasion. L ouvrage [8] est plus abordable, contient de nombreux problèmes amusants, et se focalise sur la façon dont une personne habituée aux raisonnements mathématiques peut appréhender l algorithmique et la programmation. Les exemples sont donnés en pseudo-code Pascal. Enfin, [] est une introduction assez courte à l algorithmique destinée au premier cycle. Les propos sont très clairs mains moins approfondis que dans les deux autres ouvrages. Dans les ouvrages un peu plus techniques, mais néanmoins centrés sur l algorithmique, on trouvera [7] ou [6] respectivement consacrés à l écriture d algorithmes en C et C++. En ce qui concerne particulièrement le C, [] est une référence et présente la norme de 98. Plus agréable à lire, et tout aussi complet, on pourra consulter [] qui contient de nombreux exemples. Enfin, il existe un grand nombre d ouvrages très techniques, comme [] qui traite de programmation système (sous Unix, mais les principes sont valables sous Windows), [9], qui constitue une référence de l Api d OpenGL et de nombreux autres ouvrages... v
6 vi Algorithmique et programmation Gea
7 Chapitre Structures de données Dans ce chapitre, nous présentons les structures de données classiques, dynamiques et basée pour leur implantation sur l utilisation de pointeurs. Nous aborderons ainsi les listes, les piles, les arbres binaires et les graphes. Notion de pointeur Nous avons vu qu une variable désignait en fait un tiroir dans la mémoire de l ordinateur, dans lequel nous pouvions ranger une valeur. Nous pouvons considérer qu un pointeur est aussi un tiroir, mais qu il contient une référence à un autre tiroir. Pour préciser la forme que prend cette référence, nous pouvons continuer dans le même sens en précisant que tous les tiroirs dont dispose la machine sont numérotés. Le numéro d un tiroir est appelé son adresse. Si la variable a correspond à tel tiroir, et que ce tiroir est le tiroir n 400 de la machine, un pointeur qui fait référence à a sera un tiroir qui contiendra le numéro 400. Sur la figure. sont représentées deux variables. Une variable ordinaire : b, et un pointeur (qui est aussi une variable) : p. p 000 b Fig.. Une variable et un pointeur Le pointeur p contient la valeur 000, qui est l adresse de la variable b. Dans une telle situation, on dit que p pointe sur b. Nous utiliserons des notations (un peu) similaires au C, comme : b pour désigner le contenu de (du tiroir) b (4) p pour désigner le contenu de (du tiroir) p (000) &b pour désigner l adresse du tiroir b (ici 000) *p pour désigner le contenu du tiroir sur lequel pointe p (4)
8 Algorithmique et programmation Gea Passage par adresse La première utilisation des pointeurs que nous verrons est le passage des paramètres par adresse. Considérons les procédures données en... Passage d un paramètre par valeur ajoute un(a : entier) a a+ algo test() b : entier b ajoute un(b) écrire(b) La procédure algo test affiche la valeur (et non 4), comme illustré sur la figure.. La variable b contient la valeur (.-a), puis la procédure ajoute un est appelée avec, comme paramètre, le contenu de b, c est à dire la valeur. À l intérieur de la procédure ajoute un, (.-b) a est donc initialisé à la valeur. On ajoute à la valeur de a (.-c), et a vaut donc 4. La procédure se termine. La valeur de b (.-d) est toujours. a b b b a 00 c b d b 00 a Fig.. Exécution de algo test Dans certains cas, nous souhaitons que les paramètres soient effectivement modifiés lors d un appel de procédure, même s il faut se méfier de telles pratiques. On voit rapidement que, pour rendre ceci possible, une solution serait, plutôt que de communiquer la valeur qui est dans b, de communiquer l adresse du tiroir b. Ceci permettra à la procédure (ou fonction) d écrire réellement dans le tiroir b. La nouvelle procédure principale est indiquée en.. C est donc l adresse de b qui est communiquée. Naturellement nous devons réécrire notre procédure ajoute un en une procédure ajoute un bis qui reçoit maintenant en paramètre l adresse d une variable plutôt qu un entier. L adresse d une variable étant stockée dans un pointeur, ajoute un bis aura donc un pointeur (p par exemple) pour paramètre. Nous voulons ajouter au contenu de la variable pointée par p, et non pas ajouter au contenu de p. Il faudra donc écrire : *p *p+. Ce que nous obtenons est donné en.. En effet, si b vaut (figure.-a) et est stocké dans le tiroir qui a pour adresse 00, p sera initialisé à 00 (.-b) à l appel de la procédure et *p vaudra le contenu du tiroir dont l adresse est 00, c est à dire. *p+ vaudra donc 4 (.-c) et cette valeur sera rangée dans le tiroir dont l adresse est stockée dans p, c est à dire dans le tiroir 00. Au retour de la procédure (.-d) b vaudra donc 4. Ce type de passage des paramètres, qui permet de modifier les variables de l algorithme appelant se nomme passage par adresse, tout simplement parce que c est l adresse de la variable, plutôt que sa valeur qui est transmise au sous programme ou à la fonction.
9 . Structures de données. Passage d un paramètre par adresse ajoute un bis(p : pointeur) *p *p+ algo test bis() b : entier b ajoute un bis(&b) écrire(b) a b b b p c b d b 00 4 p Fig.. Exécution de algo test bis Listes chaînées On représente généralement une liste comme indiqué sur la figure.4. La liste simplement chaînée du schéma.4 est une liste de 4 entiers. Le premier entier de la liste vaut 4, le second, etc... Comment représenter plus informatiquement une telle structure? La solution réside dans l utilisation d enregistrements et de pointeurs. Afin de rendre les notations plus explicites dans la suite, nous allons ajouter un peu de vocabulaire à notre langage algorithmique et prendrons l habitude, lorsque nous déclarons un pointeur, de préciser vers quel type de donnée il est censé pointer. Considérons la définition suivante :. Définition d une liste enregistrement cellule val : entier suiv : pointeur cellule Cette définition du type cellule correspond à l une des quatre cases du schéma. Chaque case est en effet composée d une valeur entière et d un chemin vers la case suivante, un pointeur dans notre cas. La liste en elle-même est accessible par un simple pointeur vers une cellule (le carré du haut sur le schéma) Fig..4 Une liste simplement chainée
10 4 Algorithmique et programmation Gea. Parcours de liste Voici une première procédure algorithmique qui prend une liste en paramètre, et la parcourt en affichant ses valeurs. Elle utilise une valeur spéciale, que nous appellerons nul et qui est la valeur écrite dans un pointeur qui ne pointe sur rien (c est souvent 0 en pratique) :.4 Affichage d une liste affiche liste(p : pointeur cellule) répéter tant que p nul écrire ((*p).val) p (*p).suiv La ligne écrire ((*p).val) signifie : écrire le champ val de la cellule pointée par p, et la ligne p (*p).suiv signifie : mettre dans p la valeur inscrite dans le champ suiv de la cellule pointée par p... La figure. résume l exécution de l algorithme sur une liste contenant les valeurs, et. Pour en simplifier la lecture, une flèche en pointillés a été ajoutée pour visualiser vers quelle case de la mémoire pointe chaque pointeur. 7 4 L A A p A p 4 B B B C nul C nul C nul (a) (b) (c) 7 4 A p A p nul 7 4 L A 4 4 B B B C nul C nul C nul (d) (e) (f) Fig.. Affichage d une liste Supposons que la liste du schéma (a) ait été créée et que le pointeur L pointe sur la première cellule. Lorsqu on appelle la procédure affiche liste(l), le pointeur p est créé (b) et initialisé à la valeur contenue dans L (4). Puisque p ne vaut pas nul, la boucle est engagée. Le champ val de la cellule pointée par p (cellule A) est affiché ( s affiche). Puis, la valeur du champ suiv de la cellule pointée par p (cette valeur est 4) est inscrite dans p (c), qui pointe donc maintenant vers la cellule B. Puisque p ne vaut pas nul, la boucle continue. Le champ val de la cellule pointée
11 . Structures de données par p (cellule B) est affiché ( s affiche). Puis, la valeur du champ suiv de la cellule pointée par p (cette valeur est 67) est inscrite dans p (d), qui pointe donc maintenant vers la cellule C. Puisque p ne vaut pas nul, la boucle continue. Le champ val de la cellule pointée par p (cellule C) est affiché ( s affiche). Puis, la valeur du champ suiv de la cellule pointée par p (cette valeur est nul) est inscrite dans p, (e) qui ne pointe donc plus vers rien. Puisque p vaut nul, la boucle s arrête. Lorsque la procédure est terminée, la liste a été affichée et est restée intacte (f) en mémoire.. Insertion en tête de liste L algorithme suivant insère un entier en tête de la liste passée en paramètres. Il utilise la notion d allocation dynamique : la création d un emplacement mémoire au cours de l exécution.. Insertion en tête de liste insère liste(p : pointeur cellule, i : entier) : pointeur cellule p : pointeur cellule p nouvelle cellule (*p).suiv p (*p).val i renvoyer p Supposons que la liste du schéma (a) (figure.6) ait été créée et que le pointeur L pointe sur sa première cellule. On souhaite insérer la valeur en tête, par un appel à L insère liste(l,). Les variables i p et p de la fonction d insertion sont créées (b). Le pointeur p est initialisé à l adresse transmise (4) et la variable i à la valeur à insérer (). Lors de l exécution de p nouvelle cellule, une nouvelle cellule vide est créée en mémoire (c), et son adresse est rangée dans le pointeur p. Puis ((*p).suiv p), le champ suiv de la cellule pointée par p reçoit la valeur stockée dans p (d). Ensuite ((*p).val i), le champ val de la cellule pointée par p reçoit la valeur stockée dans i (e). Enfin, (renvoyer p), la valeur contenue dans le pointeur p est renvoyée par la fonction (f). Puisque l appel à cette dernière était : L insère liste(l,), la valeur renvoyée () est stockée dans L (g). On a donc bien inséré la valeur en tête de la liste L. Notons au passage que l algorithme précédent fonctionne aussi si la liste est initialement vide, c est à dire si L vaut nul.
12 6 Algorithmique et programmation Gea nul L 7 A B C (a) nul A B C 4 p 00 i 9 nul 98 p (b) nul A B C 4 p 00 i 9 98 p nul 0 D (c) nul A B C 4 p 00 i 9 98 p 4 0 D (d) nul A B C 4 p 00 i 9 98 p 4 D (e) nul A B C D L (f) nul A B C 4 D L (g) Fig..6 Insertion dans une liste
13 . Structures de données Fig..7 Un arbre binaire 4 Arbres binaires Un arbre binaire est représenté figure.7. Chaque nœud de l arbre contient une donnée (dans notre exemple il s agit d entiers) et possède 0, ou fils. Les feuilles de l arbre sont les nœuds qui n ont pas de fils (elles sont en bas), et la racine de l arbre est le nœud qui n a pas de père (elle est en haut!). On peut représenter informatiquement un arbre en utilisant enregistrements et pointeurs :.6 Définition d un arbre binaire enregistrement nœud val : entier gauche : pointeur nœud droite : pointeur nœud Chaque nœud possède ainsi une valeur (le champ val), ainsi que deux pointeurs vers les nœuds fils (gauche et droite). Si un fils est absent, on mettra simplement à nul le pointeur correspondant. Notons que la structure d un arbre est récursive. On peut définir un arbre ainsi : Un arbre peut être vide ou peut être un nœud qui a pour fils un ou deux arbres... En conséquence, les algorithmes sur les arbres sont souvent récursifs eux aussi. 4. Parcours d un arbre La procédure récursive suivante affiche chaque nœud d un arbre :.7 Affichage d un arbre binaire affiche prefixe(r : pointeur nœud) si r nul alors écrire((*r).val) affiche prefixe((*r).gauche) affiche prefixe((*r).droite) On obtient de cette façon un affichage préfixé, c est à dire l affichage de la valeur d un nœud avant l affichage de ses arbres fils. Dans le cas de la figure.7, on obtiendrait : Il existe de même les algorithmes d affichage infixé ou suffixé. 4. Construction d un arbre L algorithme suivant permet de construire un arbre. Il prend en paramètres la valeur du futur nœud racine et des pointeurs vers les sous-arbres gauche et droite. Il renvoie un pointeur vers l arbre construit. Chacun des pointeur vers les sous-arbres peut être nul.
14 8 Algorithmique et programmation Gea Fig..8 Un autre arbre binaire Fig..9 Un arbre binaire de recherche.8 Construction d un arbre binaire construit(v : entier, ag : pointeur nœud, ad : pointeur nœud) : pointeur nœud p : pointeur nœud p nouveau nœud (*p).val v (*p).gauche ag (*p).droite ad renvoyer p L arbre de la figure.8 est construit par l exécution de :.9 Exemple de construction d une arbre binaire p,p : pointeurs nœuds p construit(,nul,nul) p construit(9,nul,nul) p construit(7,p,p) p construit(6,nul,nul) p construit(,nul,p) p construit(,p,p) L arbre final est pointé par p. 4. Arbres binaires de recherche Un arbre binaire de recherche est un arbre binaire qui vérifie les propriétés suivantes :. Tous les nœuds du sous-arbre gauche ont une valeur strictement inférieurs à celle de la racine.. Tous les nœuds du sous-arbre droit ont une valeur supérieure ou égale à celle de la racine.. Les sous-arbres droit et gauche sont des arbres binaires de recherche. L arbre de la figure.9 est un arbre binaire de recherche. Un arbre binaire de recherche est utilisé, comme son nom l indique, pour rechercher la présence d une valeur dans un ensemble de valeurs. La fonction suivante renvoie un pointeur sur le nœud cherché et nul si la valeur n est pas trouvée.
15 . Structures de données Fig..0 Un graphe orienté.0 Recherche d un élément dans un arbre binaire de recherche recherche(a : pointeur nœud, v : entier) : pointeur nœud p : pointeur nœud si a nul alors si (*a).val=v alors renvoyer a sinon si (*a).val<v alors renvoyer recherche((*a).droite,v) sinon renvoyer recherche((*a).gauche,v) sinon renvoyer nul Cet algorithme mérite quelques commentaires : D une part, on préférera toujours renvoyer un pointeur vers le nœud que la valeur du nœud. En effet, connaissant le pointeur, il est facile d avoir la valeur, alors que l inverse n est pas vrai. De plus le pointeur donne des indications sur la position du nœud dans l arbre. En ce qui concerne l efficacité de cet algorithme, on constate sans mal que la valeur à rechercher ne sera comparée à une autre valeur qu un nombre de fois au pire égal à la profondeur de l arbre (la longueur de la plus longue branche). Si l arbre est parfait, cette hauteur sera de l ordre de ln (n) (avec n le nombre de nœuds de l arbre). En conséquence, la recherche d une valeur prendra au pire ln (n) comparaisons, alors que dans un tableau non trié, elle prendrait au pire n comparaisons. Les considérations de cet ordre (comptage de l ordre de grandeur du nombre d opérations en fonction de la taille des données) font partie de l étude de la complexité des algorithmes et seront évoquées un peu plus loin. Graphes Un graphe orienté valué dans R est un ensemble N de sommets, et une application A de N N dans R {nul} qui à un couple de sommets fait correspondre la valeur de leur arête orientée ou l absence d arête. Si un graphe n est pas orienté, alors (n, n ) N, A(n, n ) = A(n, n ). Si un graphe n est pas valué, l application A est à valeurs dans {vrai, f aux} de façon à seulement signifier la présence ou l absence d arête. La figure.0 représente un exemple de graphe orienté. Les sommets sont numérotés de à, et nous avons : A(,)=0, A(,)=nul, A(4,)=, A(,4)=,... Il existe de nombreuses manières de représenter un graphe dont : les matrices d adjacence, les listes d adjacences, les représentations par pointeurs. Un arbre parfait est tel que tous les niveaux, sauf éventuellement le dernier, sont remplis. Au dernier niveau, les feuilles sont groupées à gauche. Cette considération est importante. Si au lieu de valeurs, l arbre en contient milliard, le nombre de comparaisons pour une recherche passera de 4 à seulement 0.
16 0 Algorithmique et programmation Gea Fig.. Représentation d un graphe. Matrices d adjacences Soit un graphe (N, A) valué orienté à n sommets numérotés de à n. La matrice d adjacence de ce graphe est un tableau bidimensionnel t de taille n n défini par : (i, j) {,..., n}, t[i][j] = A(i, j). Ainsi, le graphe de la figure.0 sera représenté par le tableau t suivant :. Listes d adjacences i \j 4 nul 0 nul nul nul - nul nul nul 6 nul 4 nul nul nul - nul 8 nul nul nul On peut représenter un graphe par un tableau de listes (!), chaque élément de la liste étant un couple (n de sommet, valeur d arête). Le graphe de la figure.0 se représenterait comme indiqué figure.. Algorithmiquement, nous représenterions un graphe par une liste d adjacence ainsi :. Représentation d une liste d adjacence enregistrement cellule sommet : entier valeur : réel suiv : pointeur cellule t[..n] : tableau de pointeurs cellules. Insertion d une arête L algorithme suivant insère une arête dans un graphe (les tableaux sont passés par adresse) :. Insertion d une arête dans un graphe insertion(t[] : tableau de pointeurs cellules, s : entier, s : entier, v : réel) p : pointeur cellule p nouvelle cellule (*p).sommet s (*p).valeur v (*p).suivant t[s] t[s] p.4 Recherche de plus courts chemins Nous nous intéressons à présent à la possibilité de rechercher le plus court chemin (le chemin qui emprunte le moins d arêtes) entre deux sommets d un graphe non orienté et non valué.
17 . Structures de données 0-8 (a) Exemple de graphe t[..] : tableau de pointeurs cellules insertion(t,,,0) insertion(t,,,) insertion(t,,,-) insertion(t,,,) insertion(t,,,8) (b) Construction du graphe (c) Liste d adjacence associée Fig.. Construction et représentation d un graphe L idée de l algorithme est la suivante : Partant du sommet source, les distances aux autres sommets sont initialisées à +. Puis, on sélectionne tous les voisins du sommet source, et on indique que leur distance au sommet source vaut. Ces sommets sont placés, avec le sommet source dans l ensemble des sommets traités. Puis, on sélectionne l ensemble des sommets voisins des derniers sommets traités, qui ne sont pas eux-même des sommets traités. On indique que leur distance au sommet source vaut. On les place dans la liste des sommets traités... jusqu à ce que tous les sommets soient traités. Nous allons donner un algorithme plus formel qui résout le problème du calcul des plus courts chemins. Cet algorithme prend en paramètres la matrice d adjacence M du graphe, le nombre de sommets N, et le numéro du sommet source s. Les variables utilisées sont d[] qui contient les distances vers les autres sommets, ok[] qui comptabilise les sommets traités, encours[] qui indique les sommets que l on traite, et marque[] qui indique quels sont les voisins des sommets que l on traite qui n ont pas déjà été traités. Les variables faits et dist indiquent respectivement le nombre de sommets déjà traités, et la distance en cours. Par souci de concision, le raccourci marque[] 0 utilisé dans l algorithme signifie : mettre 0 dans toutes les cases du tableau marque[] et encours[] marque[] est mis pour la recopie de toutes les valeurs du tableau marque[] dans le tableau encours[]. La figure. illustre le déroulement de l algorithme pour un graphe de taille 7, de matrice d adjacence ( signifie la présence d une arête et 0 l absence d une arête) : i \j Les plus courts chemins sont calculés à partir du sommet. Les sommets qui sont marqués dans ok[] sont en gras, ceux qui sont marqués dans encours[] sont en zone pointillée, et ceux qui sont marqués dans marque[] en zone hachurée. Près de chaque sommet figure sa valeur indiquée dans le tableau d[]. Une absence de valeur signifie +. La figure. indique l état du graphe, avant l exécution de l algorithme (a), après la ligne faits (b), puis à deux endroits de la boucle principale : avant la ligne encours[] marque[] ((c), (e) et (g)), et après la ligne marque[] 0 ((d), (f) et (h)).
18 Algorithmique et programmation Gea. Recherche dun plus court chemin dans un graphe plus court(n : entier, M[..N][..N], s : entier) : tableau d entiers d[..n], ok[..n], encours[..n], marque[..n] : tableaux d entiers i, j, dist, faits : entiers d[] + ok[] 0 encours[] 0 marque[] 0 dist 0 d[s] dist ok[s] encours[s] faits répéter tant que faits N dist dist+ répéter pour i de à N si encours[i]= alors répéter pour j de à N si M[i][j]= et ok[j] alors marque[j] d[j] dist faits faits+ encours[] marque[] répéter pour i de à N ok[i] ok[i]+marque[i] marque[] 0 renvoyer d
19 . Structures de données dist : 0 faits : dist : faits : (a) (b) (c) 0 dist : faits : dist : faits : dist : faits : (d) (e) (f) 0 dist : faits : dist : faits : (g) (h) Fig.. Recherche du plus court chemin
20 4 Algorithmique et programmation Gea
21 Chapitre Méthodes algorithmiques Un certain nombre de principes algorithmiques fondamentaux sont récurrents dans la résolution de nombreux problèmes. C est le cas du principe très général de récursivité qui a été abordé l an passé. Dans ce chapitre, nous verrons le principe du divide and conquer et de la programmation dynamique. Puis, nous aborderons le très vaste problème de la mesure de la complexité des algorithmes en prenant pour exemples quelques algorithmes de tri. Diviser pour régner La méthode diviser pour régner est aussi connu sous les noms diviser pour résoudre ou divide and conquer. C est une méthode récursive. L idée générale consiste à diviser la tâche à accomplir en deux sous-tâches deux fois plus simples, à résoudre ces sous-tâches, puis à rassembler les résultats des deux sous-tâches pour obtenir le résultat de la tâche complète. La résolution des deux sous-tâches se fait naturellement aussi par la même méthode (division en sous-sous-tâches). La méthode étant récursive, il faut nécessairement qu on puisse résoudre directement une tâche très simple (condition d arrêt de la récursivité). Marquage d une règle Cet exemple est tiré de [7] et illustre bien la méthode du diviser pour régner (ainsi que son pendant itératif). Il s agit de tracer des graduations sur une règle, de longueurs différentes, comme indiqué sur la figure.. Sur cette figure, les nombres indiquent l ordre dans lequel les graduations ont été tracées. Le tracé prédédent est obtenu par l algorithme., en exécutant : regle(0,8,4).. Marquage de repères sur une règle, version diviser pour régner regle(g,d,h : entiers) m : entier m (g+d)/ si h>0 alors regle(g,m,h-) regle(m,d,h-) marque en m de hauteur h Cet algorithme suit le modèle du diviser pour régner ; la graduation de la règle se fait en trois temps : Fig.. Règle tracée par l algorithme récursif.
22 6 Algorithmique et programmation Gea Fig.. Règle tracée par l algorithme itératif Fig.. Comment est tracée cette règle?. Graduer la partie gauche de la règle.. Graduer la partie droite de la règle.. Réunir les graduations en ajoutant la graduation centrale. Néanmoins, il existe dans ce cas précis un algorithme itératif simple à trouver, ce qui n est pas toujours le cas. En effet, dans l exemple de la règle, le traitement qui divise les données, et celui qui les réunit sont relativement simples. À titre d exemple, nous donnons l algorithme. qui trace la règle de manière itérative. L ordre du tracé est visible sur la figure... Marquage de repères sur une règle, version itérative regle iter(g,d,h : entiers) lepas,ht,i : entiers lepas répéter pour ht variant de à h répéter pour i variand de g+lepas/ à d par pas de lepas marque en i de hauteur ht lepas lepas* Observez bien l ordre dans lequel se fait le tracé. Pensez-vous pouvoir produire un algorithme qui trace les marques comme indiqué dans la figure.?. Tri par fusion Le tri par fusion utilise la méthode du diviser pour régner. Le tri d un tableau d entiers se fait comme indiqué informellement par l algorithme... Méthode générale du tri par fusion pour trier le tableau t[ ] diviser t en deux tableaux t et t trier t trier t fusionner les deux tableaux t et t pour obtenir le résultat Programmation dynamique Alors que le principe du diviser pour régner consiste à découper un gros problème en deux (parfois plus) sous problèmes plus simple, la programmation dynamique consiste à résoudre tous les sous-problèmes d un problème
23 . Méthodes algorithmiques 7 donné, afin d utiliser les résultats des sous-problèmes pour résoudre le problème final. Cette méthode est à appliquer lorsque : la solution s obtient récursivement ; un algorithme récursif ordinaire implique le calcul d un grand nombre de sous-problèmes, alors que peu d entre eux sont différents ;... Nous allons éclaircir ces notions sur un exemple classique : l ordre de multiplication d une chaîne de matrices. Considérons les matrices, de tailles suivantes : M 0 (, 4) M (4, ) M (, ) Pour effectuer le produit M 0 M M, nous avons le choix de l ordre des multiplications. Nous pouvons effectuer M 0 (M M ) ou bien (M 0 M )M. Le produit de deux matrices de tailles respectives (p, r) et (r, q) est une matrice de taille (p, q). Chaque coefficient du résultat est une somme de r termes. Il y a donc environ pqr opérations à effectuer pour calculer ce produit. Le tableau suivant indique, selon l ordre du produit choisi, le nombre d opérations nécessaires : M 0 (M M ) = 00 (M 0 M )M 4 + = 4 On voit donc que l ordre des opérations a une certaine importance. Déterminer l ordre optimal de multiplication d une chaîne de matrices peut être résolu par programmation dynamique. La solution s obtient récursivement : notons l i le nombre de lignes de la matrice i, c i le nombre de colonnes de la matrice i et σ i,i+j le nombre minimal d opérations pour calculer le produit : M i..m i+j. Nous pouvons écrire que : (M i...m i+j ) = (M i...m i+k )(M i+k+..m i+j ) et que cet ordre particulier implique un nombre minimal de σ i,i+k + σ i+k+,i+j + l i c i+j c i+k opérations. Si on recherche la valeur de k comprise entre 0 et j qui minimise cette valeur, on obtient σ i,i+j. Dans ce cas précis de récursivité, on a intérêt à utiliser la programmation dynamique, plutôt qu une écriture récursive immédiate. Dans le dernier cas, on obtiendrait pour la multiplication de matrices, l arbre des appels représenté sur la figure ( 4) (0 ) ( 4) (0 ) ( 4) (0 ) 4 ( 4) ( ) ( 4) ( ) 4 ( 4) ( ) 4 0 ( ) (0 ) 0 ( ) (0 ) ( ) (0 ) ( 4) ( ) 4 4 ( ) ( ) 4 0 ( ) ( ) 0 0 ( ) (0 ) 4 0 Fig..4 Arbre des appels Multiplication d une chaîne de matrices version récursive Cette figure se lit ainsi : pour calculer le nombre d opérations optimal, du produit M (M M M 4 ) (troisième nœud en lecture préfixée), il faut calculer les nombres d opérations optimaux pour les produite M (M M 4 ) et (M M)M 4 et pour faire ceci il faudra calculer le nombre d opérations pour les produits M M 4 et M M. Certaines feuilles de l arbre sont en gras. Elles nous permettent de remarquer que pour avoir la réponse à notre question de départ, il faudra calculer fois le nombre d opérations nécessaires au produit M M. L idée de la programmation dynamique est de ne pas provoquer plusieurs évaluations du même sous-problème. Pour cela, on décide de calculer en premier les plus petits sous-problèmes, desquels on déduit les solutions au sous-problèmes de taille supérieure, desquels on déduit... L ordre des calculs tels que nous venons de le décrire est indiqué sur la figure.. (0 ) ( ) ( ) ( 4) (0 ) ( ) ( 4) (0 ) ( 4) (0 4) Fig.. Ordre des calculs Multiplication d une chaîne de matrices programmation dynamique
24 8 Algorithmique et programmation Gea Si nous faisons les calculs dans l ordre indiqué par la figure., nous allons d abord calculer σ 0,, σ,, σ, et σ,4 et stocker les résultats. Puis, nous allons calculer σ 0,, σ, et σ,4 en utilisant les résultats stockés et stocker ces nouveaux résultats. Par la suite, on voit par exemple que le calcul de σ 0, utilisera les résultats précédemment stockés : σ 0,, σ 0, σ et σ. Il nous faut donc une structure de stockage pour les résultats intermédiaires, ce qui ne serait pas nécessaire dans la version récursive. Nous utiliserons le tableau bidimensionnel cout[ ][ ] (cout[i][j] contiendra le nombre optimal d opérations pour effectuer le produit M i..m j. Un problème classique de programmation dynamque est de tracer la façon dont le résultat est obtenu. En effet, si nous nous contentons de calculer le tableau cout, nous obtiendrons, dans le cas des trois matrices précédentes : Ce tableau se lit ainsi : le nombre optimal d opérations pour calculer le produit M M est indiqué ligne, colonne (60). Le nombre minimal d opérations pour calculer le produit M 0..M est indiqué ligne 0, colonne (4). Nous avons donc la réponse à la question : on peut calculer le produit M 0..M en seulement 4 opérations. Mais nous ne savons pas comment... (dans ce cas précis, c est évident, puisque σ, = 60 > 4, mais si le tableau est plus grand...) Nous devons donc, en plus de calculer la solution, mettre en place un moyen de retrouver la façon dont la solution a été construite (4 vient-il de M 0 (M M ) ou de (M 0 M )M?) Penchons-nous tout d abord sur le calcul du tableau cout. Une première version est donnée par l algorithme.4..4 Problème de la multiplication d une chaîne de matrices (version provisoire) chaine(taille[][] : tableau d entiers,n : entier) : tableau bidimensionnel d entiers cout[][] : tableau d entiers de dimension n,n i,j,k,nb : entiers {Initialisation} répéter pour i de 0 à n- répéter pour j de 0 à n- cout[i][j] cout[i][i] 0 {Calcul de σ} répéter pour j de à n- répéter pour i de 0 à n--j répéter pour k de 0 à j- nb cout[i][i+k]+cout[i+k+][i+j]+taille[i][0]*taille[i+j][]*taille[i+k][] si nb<cout[i][i+j] alors cout[i][i+j] nb renvoyer cout Le paramètre taille est un tableau à n lignes et colonnes. n est le nombre de matrices, taille[i][0] indique le nombre de lignes de M i et taille[i][] son nombre de colonnes. Nous ne faisons pas ici de vérification sur les tailles. La première partie de l algorithme initialise le tableau cout : les produits σ i,i sont initialisés à 0 et toutes les autres valeurs sont mises à +. L indice j de la boucle la plus extérieure est la taille du sous-problème considéré. On commence avec des produits de matrice (M i M i+ ) jusqu à des produits de n matrices (M 0..M n ). Un tour de boucle sur j va donc calculer tous les σ i,i+j (et le résultat qui nous intéresse est σ 0,n.
25 . Méthodes algorithmiques 9 À l intérieur de cette boucle, la boucle sur i fait varier la première matrice du produit. À j fixé, on va donc calculer : σ 0,j, σ,+j,... σ n j,n. À l intérieur de la boucle sur i nous devons donc calculer σ i,i+j. Pour cela, nous utilisons la relation de récurrence précédente : σ i,i+j = min (σ i,i+k + σ i+k+,i+j + l i c i+j c i+k ) k [0..j] Le calcul de ce minimum est réalisé par la boucle sur k. Enfin, nous renvoyons le résultat qui est dans le tableau cout. Nous voyons dans l algorithme.4 qu une coupure particulière du produit M i..m i+j en (M i..m i+k )(M i+k+..m i+j ) est utilisée dans la solution optimale pour la valeur de k qui correspond au minimum. Pour reconstruire la solution (l ordre de multiplication des matrices), c est la valeur de i + k du point de coupure dont nous avons besoin. Nous allons donc ajouter à notre solution un second tableau bidimensionnel, nommé ordre[ ][ ] pour stocker le point de coupure des produits : si ordre[i][i+j] vaut i+k, cela signifiera que pour calculer de façon optimal le produit M i..m i+j, il faut calculer : (M i..m i+k )(M i+k+,i+j ). La version finale est donnée par l algorithme.. De plus, comme nous devons renvoyer deux tableaux, nous prenons une écriture proche du C : les tableaux cout et ordre sont passés en paramètres et par adresse.. Problème de la multiplication d une chaîne de matrices (version finale) chaine(taille[][], ordre[][], cout[][] : tableaux d entiers,n : entier) i,j,k : entiers {Initialisation} répéter pour i de 0 à n- répéter pour j de 0 à n- cout[i][j] cout[i][i] 0 {Calcul de σ} répéter pour j de à n- répéter pour i de 0 à n--j répéter pour k de 0 à j- nb cout[i][i+k]+cout[i+k+][i+j]+taille[i][0]*taille[i+j][]*taille[i+k][] si nb<cout[i][i+j] alors cout[i][i+j] nb ordre[i][i+j] i+k Notions de complexité en temps Les différents problèmes que nous sommes amenés à traiter peuvent être résolus de différentes manières (selon l algorithme choisi). Un des critères pour choisir un algorithme plutôt qu un autre est le temps que mettra celui-ci à résoudre le problème. L étude du temps d exécution des algorithmes constitue une partie d un domaine vaste nommé complexité. Dans cette section, nous nous attacherons à découvrir comment calculer la complexité en temps de certains algorithmes. Le temps d exécution en secondes d un programme dépend : des entrées qui lui sont fournies ; de la machine qui l exécute. Il s agit bien du temps d exécution des algorithmes, et non des programmes sur une machine, le second étant forcément relié au premier, et le premier étant une caractéristique intrinsèque de l algorithme choisi, indépendante des avancées technologiques.
26 0 Algorithmique et programmation Gea Le même programme, exécuté sur la même machine, auquel on fourni les même entrées, mettra à chaque fois le même temps à s exécuter (ce qui n est pas évident à l époque des ordinateurs de bureau multitâches). Si on considère une machine B deux fois plus rapide qu une machine A (c est à dire dont les instructions élémentaires sont deux fois plus rapides), alors le programme mettra environ deux fois moins de temps à s exécuter. En revanche, si sur la même machine A, on exécute deux fois un programme, la première fois avec N données d entrées, et la seconde fois avec N données d entrées, il se peut que le programme mette fois plus de temps à s exécuter, ou bien 4 fois plus de temps ou autre chose encore. Autrement dit, ce qui est vraiment important, c est de décrire ce que vaut le temps d exécution en fonction de la taille des données, en faisant abstraction de la vitesse de la machine elle-même.. Tri par insertion Voyons plus précisément de quoi il s agit sur l exemple du tri par insertion, rappelé dans l algorithme.6..6 Tri par insertion insertion(t[] : tableau d entiers, n : entier) i,j : entiers val : entier répéter pour j variant de à n- val t[j] i j- répéter tant que i 0 et t[i]>val t[i+] t[i] i i- t[i+] val Tableau clé Début de l algorithme Sélection de la première clé Test d insertion Insertion de la clé Sélection de la seconde clé Test d insertion Décalage Test d insertion Insertion de la clé Sélection de la dernière clé Test d insertion Décalage Test d insertion Décalage Test d insertion Décalage Test d insertion Décalage Test d insertion Décalage Insertion de la clé Le principe de l algorithme est simple et ressemble à la méthode que nous utilisons pour trier une poignée de cartes à jouer. Le tableau est parcouru de gauche à droite (boucle extérieure). Pour chaque valeur, la clé, on cherche à l insérer à sa gauche (qui est supposée triée). Pour cela, on parcourt le tableau de droite à gauche, à partir de la case située juste à gauche de la clé (boucle intérieure). Dès qu on a trouvé la position d insertion, on insère la clé. Nous allons à présent essayer de compter le nombre d instructions élémentaires (le temps d exécution de l algorihtme) nécessaire à l exécution du tri pour un tableau de taille n. La boucle extérieure sera exécutée n fois. Elle contient des instructions élémentaires, et une autre boucle. Nous devons nous intéresser aux nombre de tours effectués par la boucle intérieure. Un exemple d exécution est détaillé à côté de l algorithme. Il apparaît clairement que le nombre de fois que la boucle intérieure s exécute ne dépend pas seulement de n ou de la valeur de j : elle dépend aussi du contenu du tableau. Nous sommes donc amenés à considérer au moins deux calculs : celui de la complexité moyenne (sur toutes les données possibles, ou sur toutes les données probables), et celui de la complexité dans le cas le pire. Le deuxième cas est souvent plus facile à calculer, et il donne un majorant.
27 . Méthodes algorithmiques Essayons de déterminer le cas le pire. Lorsque la clé examinée est en position j, alors le pire des cas se produit si la clé doit être insérée tout au début du tableau. Dans ce cas, la boucle intérieure sera exécutée j fois. Pour récapituler, notre algorithme est composé d une boucle principale, exécutée n fois, pour j variant de à n. Cette boucle contient instructions élémentaires, et une boucle, qui est exécutée j fois dans le cas le pire. Cette boucle intérieure contient elle même instructions élémentaires. En partant de l approximation qu une instruction élémentaire a un temps d exécution de, le temps d exécution dans le cas le pire de notre algorithme de tri d un tableau de taille n est donc : T (n) = j=n j= ( + j) = (n ) + n(n ) = n + n Obtenir un résultat aussi précis n est pas notre but, d autant plus que toutes les instructions élémentaires n ont pas réellement le même temps d exécution et que nous n avons pas compté les tests des boucles ni l incrémentation des compteurs... Ce qui nous intéresse est de savoir comment se comporte le temps d exécution lorsque n est grand. Notre but n est pas de décrire ici les subtilités des calculs d asymptotes, mais nous rappelons néanmoins deux définitions : Pour une fontion g(n) donnée, on note : Θ(g(n)) = { f(n), (c, c, n 0 ) R N/ n > n 0, 0 c g(n) f(n) c g(n) } Pour une fontion g(n) donnée, on note : O(g(n)) = {f(n), (c, n 0 ) R N/ n > n 0, 0 f(n) cg(n)} Dans notre exemple, T (n) Θ(n ), ce qui est le résultat qui nous intéresse : dans le pire des cas, pour un grand nombre de données, le temps d exécution se comportera comme le carré de la taille des données. En pratique, on rencontre néanmoins très souvent l autre notation, qui ne donne qu une borne supérieure du comportement asymptotique. Puisque on essaie de faire en sorte que cette borne soit la meilleure possible, la notation O(.) peut la plupart du temps être comprise comme Θ(.). Nous écrirons donc que l algorithme du tri par insertion a un complexité dans le cas le pire en O(n ). Intéressons nous maintenant au cas moyen. Nous allons supposer pour cela que les nombres du tableau ont été pris au hasard. Le point à éclaircir est le nombre de tours de la boucle intérieure, autrement dit, la position où la clé j devra être placée dans la portion triée [0..j ]. Si les nombres ont été tirés au hasard, alors la portion triée contiendra en moyenne autant de nombre plus petits que la clé que de nombres plus grands que la clé. Et la position d insertion sera donc j/. En reprenant notre calcul, nous voyons que le temps d exécution moyen peut s écrire : T m (n) = j=n j= ( + j ) n(n ) = (n ) + = n + n Cette quantité est plus naturellement plus petite que T (n). Néanmoins, son comportement asymptotique est le même au sens où nous l entendons. La complexité en moyenne du tri par insertion est aussi en O(n ) (on précise généralement dans ce cas que les constantes multiplicatives sont plus petites ( < )) Nous disposons maintenant d un moyen d évaluer les algorithmes, et donc de les comparer. Les valeurs de complexité les plus répandues sont (elles sont ici classées de la meilleure à la pire) : O() pour un algorithme en temps constant ; O(ln(n)) pour un algorithme en temps logarithmique ; O(n) pour un algorithme linéaire ; O(n ln(n)) ; O(n ) pour un algorithme en temps quadratique ; O(n m ) pour un algorithme polynomial (le temps quadratique en est un cas particulier) ; O(c n ) pour un algorihtme exponentiel (c est constant).. Complexité d un problème De la même façon qu on étudie la complexité d un algorithme, on peut étudier la complexité d un problème donné, et parfois indiquer que le meilleur algorithme possible pour un problème donné ne pourra pas être mieux que linéaire, ou quadratique, par exemple. Il est par exemple évident qu un algorithme de tri ne pourra pas être mieux que linéaire, puisqu il devra au minimum examiner chaque donnée et qu il y en a n.
28 Algorithmique et programmation Gea. Tri rapide Puisque le tri par insertion est en O(n ) est que la complexité minimum du problème est linéaire. On peut se demander s il n existe pas de meilleurs algorithmes de tri que le tri par insertion. La méthode de tri rapide (qui fonctionne sur le principe du diviser pour régner à l instar du tri par fusion) est donnée par l algorithme.7 (la procédure echanger n est pas détaillée)..7 Tri rapide rapide(t[] : tableau d entiers, p, r : entiers) q : entier si p<r alors q partitionner(t,p,r) rapide(t,p,q) rapide(t,q+,r) partitionner(t[] : tableau d entiers, p, r : entiers) cle,i,j : entiers cle t[p] i p- j r+ répéter indéfiniment j j- répéter tant que t[j]>cle j j- i i+ répéter tant que t[i]<cle i i+ si i<j alors echanger(t,i,j) sinon renvoyer j L algorithme de tri rapide étant récursif, les temps de calcul vont s exprimer par récurrence. Nous allons nous intéresser uniquement au cas moyen. Dans le cas moyen, on suppose que la fonction partitionner partitionne la tranche de tablea p..r en deux tranches de taille égale. Il est facile de voir que la fonction partitionner est en O(n) si n est la taille de la tranche de tableau qui lui est envoyée (en effet, l indice i croit toujours, l indice j décroit toujours, jusqu à ce qu ils se croisent). La relation de récurrence qui donne le temps d exécution dans le cas moyen est donc : T (n) = T (n/) + O(n) La récurrence est assez facile à résoudre si nous supposons que n = k avec k entier et si nous remplaçons simplement O(n) par n. Nous admettrons que le résultat se généralise. On a alors : T ( k ) = T ( k ) + k c est à dire : T ( ) = T ( 0 ) + T ( ) = T ( ) + = T ( 0 ) + + T ( ) = T ( ) + = T ( 0 ) + + +
29 . Méthodes algorithmiques Il semblerait que l on ait : T ( k ) = k T ( 0 ) + k k On peut aisément le montrer par récurrence. Si nous revenons à n, et en constatant que T () = O(), nous obtenons : T (n) = n + n ln(n) = O(n ln(n)) Le temps d exécution en moyenne du tri rapide est donc en O(n ln(n)), ce qui est beaucoup mieux que le tri par insertion. Un calcul rapide nous permettrait de vérifier que dans le cas de pire, le tri rapide a par contre un temps d exécution en O(n ) (la différence se fait au moment où l on considère que partitionner ne partitionne plus en deux ensembles de longueur égale, mais en un tableau de taille n et un tableau de taille ).
30 4 Algorithmique et programmation Gea
31 Chapitre Programmation en C Le contenu de ce chapitre est désormais accessible en ligne sur la plate-forme Updago : http ://updago.univ-poitiers.fr Le cours Updago est intitulé : Algorithmique et Programmation
32 6 Algorithmique et programmation Gea
33 Annexe A Travaux dirigés TD I : Pointeurs, listes, arbres et graphes Listes chaînées d entiers Question Longueur de liste Écrivez une fonction qui renvoie le nombre d éléments d une liste. Question Suppression dans une liste Écrivez une fonction qui supprime l élément de tête d une liste. Question Égalité Écrivez une fonction qui indique en renvoyant 0 ou si deux listes contiennent les mêmes données dans le même ordre (si c est le cas, la fonction renverra ) Question 4 Suppression d un élément Écrivez une fonction qui supprime un élément d une liste (on donne sa valeur en paramètre). Donnez une version qui supprime uniquement le premier élément trouvé, puis une qui supprime tous les éléments correspondants. Question Concaténation Écrivez une fonction qui à partir de deux listes, crée une troisième liste, concaténation de la première avec la seconde. Question 6 Listes triées Écrivez une fonction qui insère un élément dans une liste triée, en conservant l ordre de tri (croissant) de cette liste. Arbres binaires Question 7 Affichages infixés et suffixés Écrivez les algorithmes d affichage infixé et suffixé d un arbre binaire d entiers. Question 8 Taille d un arbre Écrivez une fonction qui renvoie la taille (le nombre de nœuds) d un arbre binaire. Question 9 Hauteur d un arbre Écrivez une fonction qui renvoie la hauteur d un arbre, c est à dire la longueur, en nombre de nœuds, de la plus longue branche. Question 0 Nombre d occurences Écrivez une fonction qui indique le nombre d apparitions d un élément dans un arbre binaire. Question Insertion dans un arbre de recherche Écrivez une fonction qui insère un nouvel entier dans un arbre binaire de recherche. 7
34 8 Algorithmique et programmation Gea F α 0 0 A B C D G E 6 6 ω Fig. A. Graphe d ordonnancement de tâches Question Minimum Écrivez une fonction qui renvoie le plus petit élément d un arbre binaire de recherche. Question Affichage ordonné Écrivez une procédure qui affiche dans l ordre croissant les éléments d un arbre binaire de recherche. Graphes Question 4 Valeur d arête Écrivez une fonction qui à partir de la représentation par listes d adjacence indique la valeur de l arête entre deux nœuds donnés en paramètres. Question Nombre d arêtes Donnez un algorithme qui détermine le nombre d arêtes d un graphe orienté à partir de sa matrice d ajacence. Et si le graphe n est pas orienté? Question 6 Parcour d un graphes en profondeur d abord Écrivez un algorithmes de parcours en profondeur d un graphe. Un parcours en profondeur consiste à explorer d abord un chemin le plus long possible issu d un nœud. On utilisera une représentation des graphes par listes d adjacence. Question 7 Plus long chemin Écrivez un algorithme de recherche des plus longs chemins d un nœud source vers tous les autres nœuds dans un graphe valué (à valeurs positives) orienté sans cycle. Question 8 Ordonnancement Le graphe de la figure A. est un graphe d ordonnancement de tâches. C est un graphe orienté, valué (à valeurs positives), et sans cycle. Chaque nœud étiqueté par une capitale romaine représente une tâche (par exemple pour la construction d une maison). Un arc du nœud i vers le nœud j signifie que l accomplissement de la tâche i est nécessaire au démarrage de la tâche j. Les valeurs des arêtes issues d un sommet (toutes égales) sont le temps nécessaires à la réalisation de la tâche. Les nœuds fictifs α et ω représentent le départ et la fin du travail. Exceptés ces deux nœuds, tous ont au moins un prédécesseur et un successeur. Donnez un algorithme indiquant, à partir d un tel graphe, le temps minimum pour réaliser l ensemble des tâches, ainsi que la liste des tâches critiques (les tâches pour lesquels un retard pris influera nécessairement sur le temps mis à accomplir l ensemble des tâches). Allocation dynamique Question 9 Structure de pile Cette question sera l occasion de découvrir la structure de pile et de donner des portions de code. Une pile est un ensemble de données ordonnées. Soit elle est vide, soit elle est composée d une cellule, puis d une pile. C est un cas particulier de liste, pour laquelle les opérations usuelles sont empiler (i.e. rajouter une cellule au sommet), dépiler (i.e. enlever la cellule qui est au sommet), tester si la pile est vide, ou encore récupérer la valeur de la cellule qui est au sommet. Nous travaillerons ici avec des piles d entiers.
35 A. Travaux dirigés 9 9- Donnez la définition d une cellule, puis d une pile, en langage algorithmique, p uis en C. 9- Écrivez une fonction qui ajoute un entier dans une pile et renvoie la pile résultante. Il faudra ici utiliser la fonction d allocation dynamique du C. 9- Écrivez une fonction qui renvoie l entier situé au sommet de la pile. 9-4 Écrivez une fonction qui dépile la cellule située au sommet de la pile, puis renvoie la pile résultante. 9- Écrivez une fonction qui vide une pile. 9-6 Écrivez une fonction qui teste si une pile est vide.
36 0 Algorithmique et programmation Gea
37 Bibliographie [] Christophe Blaess. Programmation système en C sous Linux. Eyrolles, 000. [] Jean-Pierre Braquelaire. Méthodologie de la programmation en C. Dunod, 000. [] Alain Cardon and Christian Charras. Introduction à l algorithmique et à la programmation. Ellipses, 996. [4] Thomas Cormen, Charles Leiserson, and Ronald Rivest. Introduction à l Algorithmique. Dunod, 994. [] Brian W. Kerninghan and Denis M. Ritchie. Le langage C Norme ANSI. Dunod, 000. [6] Robert Sedgewick. Algorithmes en langage C++. Pearson Education, 999. [7] Robert Sedgewick. Algorithmes en langage C. Dunod, 00. [8] Raymond Séroul. Math-Info, Informatique pour Mathématiciens. InterEditions, 99. [9] Mason Woo, Jackie Neider, Tom Davis, and Dave Shreiner. OpenGL.. Campus Press, 999.
1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : [email protected] Page personnelle : http://www.lri.fr/ hivert
1 de 46 Algorithmique Trouver et Trier Florent Hivert Mél : [email protected] Page personnelle : http://www.lri.fr/ hivert 2 de 46 Algorithmes et structures de données La plupart des bons algorithmes
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.
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
Les structures de données. Rajae El Ouazzani
Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Ces exercices portent sur les items 2, 3 et 5 du programme d informatique des classes préparatoires,
Quelques Algorithmes simples
Quelques Algorithmes simples Irène Guessarian [email protected] 10 janvier 2012 Je remercie Patrick Cegielski de son aide efficace pour la programmation Java ; la section sur le codage de Huffman a été
Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2
éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........
Chapitre 5 : Flot maximal dans un graphe
Graphes et RO TELECOM Nancy A Chapitre 5 : Flot maximal dans un graphe J.-F. Scheid 1 Plan du chapitre I. Définitions 1 Graphe Graphe valué 3 Représentation d un graphe (matrice d incidence, matrice d
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,
Architecture des Systèmes d Information Architecture des Systèmes d Information
Plan... Tableaux et tris I3 - Algorithmique et programmation 1 Rappels Nicol Delestre 2 Tableaux à n dimensions 3 Initiation aux tris Tableaux - v2.0.1 1 / 27 Tableaux - v2.0.1 2 / 27 Rappels : tableau
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,
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
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
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,
ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII
ALGORITHMIQUE II NOTION DE COMPLEXITE 1 2 Comment choisir entre différents algorithmes pour résoudre un même problème? Plusieurs critères de choix : Exactitude Simplicité Efficacité (but de ce chapitre)
Rappels sur les suites - Algorithme
DERNIÈRE IMPRESSION LE 14 septembre 2015 à 12:36 Rappels sur les suites - Algorithme Table des matières 1 Suite : généralités 2 1.1 Déition................................. 2 1.2 Exemples de suites............................
Algorithme. Table des matières
1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............
Feuille TD n 1 Exercices d algorithmique éléments de correction
Master Sciences, Technologies, Santé Mention Mathématiques, spécialité Enseignement des mathématiques Algorithmique et graphes, thèmes du second degré Feuille TD n 1 Exercices d algorithmique éléments
Cours d initiation à la programmation en C++ Johann Cuenin
Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................
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
Introduction à MATLAB R
Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d
Plus courts chemins, programmation dynamique
1 Plus courts chemins, programmation dynamique 1. Plus courts chemins à partir d un sommet 2. Plus courts chemins entre tous les sommets 3. Semi-anneau 4. Programmation dynamique 5. Applications à la bio-informatique
Représentation des Nombres
Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...
La fonction exponentielle
DERNIÈRE IMPRESSION LE 2 novembre 204 à :07 La fonction exponentielle Table des matières La fonction exponentielle 2. Définition et théorèmes.......................... 2.2 Approche graphique de la fonction
Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte
Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes
Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS
Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Mémento Ouvrir TI-Nspire CAS. Voici la barre d outils : L insertion d une page, d une activité, d une page où l application est choisie, pourra
avec des nombres entiers
Calculer avec des nombres entiers Effectuez les calculs suivants.. + 9 + 9. Calculez. 9 9 Calculez le quotient et le rest. : : : : 0 :. : : 9 : : 9 0 : 0. 9 9 0 9. Calculez. 9 0 9. : : 0 : 9 : :. : : 0
Programmation linéaire
1 Programmation linéaire 1. Le problème, un exemple. 2. Le cas b = 0 3. Théorème de dualité 4. L algorithme du simplexe 5. Problèmes équivalents 6. Complexité de l Algorithme 2 Position du problème Soit
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
Introduction à la théorie des graphes. Solutions des exercices
CAHIERS DE LA CRM Introduction à la théorie des graphes Solutions des exercices Didier Müller CAHIER N O 6 COMMISSION ROMANDE DE MATHÉMATIQUE 1 Graphes non orientés Exercice 1 On obtient le graphe biparti
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
Eteindre. les. lumières MATH EN JEAN 2013-2014. Mme BACHOC. Elèves de seconde, première et terminale scientifiques :
MTH EN JEN 2013-2014 Elèves de seconde, première et terminale scientifiques : Lycée Michel Montaigne : HERITEL ôme T S POLLOZE Hélène 1 S SOK Sophie 1 S Eteindre Lycée Sud Médoc : ROSIO Gauthier 2 nd PELGE
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
Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.
Université du Québec à Chicoutimi Département d informatique et de mathématique Plan de cours Titre : Élément de programmation Sigle : 8inf 119 Session : Automne 2001 Professeur : Patrice Guérin Local
Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)
Objectifs du cours d aujourd hui Informatique II : Cours d introduction à l informatique et à la programmation objet Complexité des problèmes Introduire la notion de complexité d un problème Présenter
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 -
LES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Université Paris-Dauphine DUMI2E 1ère année, 2009-2010. Applications
Université Paris-Dauphine DUMI2E 1ère année, 2009-2010 Applications 1 Introduction Une fonction f (plus précisément, une fonction réelle d une variable réelle) est une règle qui associe à tout réel x au
Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.
Eo7 Calculs de déterminants Fiche corrigée par Arnaud Bodin Eercice Calculer les déterminants des matrices suivantes : Correction Vidéo ( ) 0 6 7 3 4 5 8 4 5 6 0 3 4 5 5 6 7 0 3 5 4 3 0 3 0 0 3 0 0 0 3
INF601 : Algorithme et Structure de données
Cours 2 : TDA Arbre Binaire B. Jacob IC2/LIUM 27 février 2010 Plan 1 Introuction 2 Primitives u TDA Arbin 3 Réalisations u TDA Arbin par cellules chaînées par cellules contiguës par curseurs (faux pointeurs)
LA PHYSIQUE DES MATERIAUX. Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE
LA PHYSIQUE DES MATERIAUX Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE Pr. A. Belayachi Université Mohammed V Agdal Faculté des Sciences Rabat Département de Physique - L.P.M [email protected] 1 1.Le réseau
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
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
MIS 102 Initiation à l Informatique
MIS 102 Initiation à l Informatique Responsables et cours : Cyril Gavoille Catherine Pannier Matthias Robine Marc Zeitoun Planning : 6 séances de cours 5 séances de TD (2h40) 4 séances de TP (2h40) + environ
Traitement des données avec Microsoft EXCEL 2010
Traitement des données avec Microsoft EXCEL 2010 Vincent Jalby Septembre 2012 1 Saisie des données Les données collectées sont saisies dans une feuille Excel. Chaque ligne correspond à une observation
introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives
introduction Chapitre 5 Images récursives http ://univ-tln.fr/~papini/sources/flocon.htm Récursivité http://www.poulain.org/fractales/index.html Image qui se contient elle-même 1 Exemples mathématiques
Les arbres binaires de recherche
Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s
Algorithmique I. [email protected] [email protected] [email protected]. Algorithmique I 20-09-06 p.1/??
Algorithmique I [email protected] [email protected] [email protected] Télécom 2006/07 Algorithmique I 20-09-06 p.1/?? Organisation en Algorithmique 2 séances par semaine pendant 8 semaines. Enseignement
Introduction à l étude des Corps Finis
Introduction à l étude des Corps Finis Robert Rolland (Résumé) 1 Introduction La structure de corps fini intervient dans divers domaines des mathématiques, en particulier dans la théorie de Galois sur
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
TP 2 Réseaux. Adresses IP, routage et sous-réseaux
TP 2 Réseaux Adresses IP, routage et sous-réseaux C. Pain-Barre INFO - IUT Aix-en-Provence version du 24/2/2 Adressage IP. Limites du nombre d adresses IP.. Adresses de réseaux valides Les adresses IP
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
Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé
Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé A. P. M. E. P. Exercice 1 5 points 1. Réponse d. : 1 e Le coefficient directeur de la tangente est négatif et n est manifestement pas 2e
Cours de Master Recherche
Cours de Master Recherche Spécialité CODE : Résolution de problèmes combinatoires Christine Solnon LIRIS, UMR 5205 CNRS / Université Lyon 1 2007 Rappel du plan du cours 16 heures de cours 1 - Introduction
ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.
ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de
CCP PSI - 2010 Mathématiques 1 : un corrigé
CCP PSI - 00 Mathématiques : un corrigé Première partie. Définition d une structure euclidienne sur R n [X]... B est clairement symétrique et linéaire par rapport à sa seconde variable. De plus B(P, P
Jade. Projet Intelligence Artificielle «Devine à quoi je pense»
Jade Projet Intelligence Artificielle «Devine à quoi je pense» Réalisé par Djénéba Djikiné, Alexandre Bernard et Julien Lafont EPSI CSII2-2011 TABLE DES MATIÈRES 1. Analyse du besoin a. Cahier des charges
ÉPREUVE COMMUNE DE TIPE 2008 - Partie D
ÉPREUVE COMMUNE DE TIPE 2008 - Partie D TITRE : Les Fonctions de Hachage Temps de préparation :.. 2 h 15 minutes Temps de présentation devant le jury :.10 minutes Entretien avec le jury :..10 minutes GUIDE
Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.
1 Définitions, notations Calcul matriciel Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes. On utilise aussi la notation m n pour le
UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.
UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases
# 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
IV- Comment fonctionne un ordinateur?
1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions
Vérification de programmes et de preuves Première partie. décrire des algorithmes
Vérification de programmes et de preuves Première partie. décrire des algorithmes Yves Bertot September 2012 1 Motivating introduction A partir des années 1940, il a été compris que l on pouvait utiliser
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
Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé
Baccalauréat S ntilles-guyane 11 septembre 14 Corrigé EXERCICE 1 6 points Commun à tous les candidats Une entreprise de jouets en peluche souhaite commercialiser un nouveau produit et à cette fin, effectue
Auto-Entreprise : Activités : Eric SOTY - Siret n 47868353500023. Formation Bureautique, continue d'adultes. Tél : 0953020032 - Fax : 0958020032
Auto-Entreprise : Activités : Eric SOTY - Siret n 47868353500023 Formation Bureautique, APE : 8559A formation continue d'adultes. identité visuelle, charte T.V.A. non applicable, article 293 B du CGI.
INTRODUCTION À L ANALYSE FACTORIELLE DES CORRESPONDANCES
INTRODUCTION À L ANALYSE FACTORIELLE DES CORRESPONDANCES Dominique LAFFLY Maître de Conférences, Université de Pau Laboratoire Société Environnement Territoire UMR 5603 du CNRS et Université de Pau Domaine
Précision d un résultat et calculs d incertitudes
Précision d un résultat et calculs d incertitudes PSI* 2012-2013 Lycée Chaptal 3 Table des matières Table des matières 1. Présentation d un résultat numérique................................ 4 1.1 Notations.........................................................
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.........................
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)
IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C
IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en
UE Programmation Impérative Licence 2ème Année 2014 2015
UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie [email protected] 2 Programmation Impérative
GUIDE Excel (version débutante) Version 2013
Table des matières GUIDE Excel (version débutante) Version 2013 1. Créer un nouveau document Excel... 3 2. Modifier un document Excel... 3 3. La fenêtre Excel... 4 4. Les rubans... 4 5. Saisir du texte
Les indices à surplus constant
Les indices à surplus constant Une tentative de généralisation des indices à utilité constante On cherche ici en s inspirant des indices à utilité constante à définir un indice de prix de référence adapté
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.
Génie Logiciel avec Ada. 4 février 2013
Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre
Présentation du logiciel
Chapitre A Présentation du logiciel R Pré-requis et objectif La lecture du chapitre sur l installation de R dans les Annexes peut se révéler utile. Ce chapitre présente les origines, l objectif et les
Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions
Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental
Module 16 : Les fonctions de recherche et de référence
Module 16 : Les fonctions de recherche et de référence 16.0 Introduction L une des fonctions les plus importantes d Excel, c est la possibilité de chercher une valeur spécifique dans un grand nombre de
Les structures. Chapitre 3
Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre
Techniques d interaction dans la visualisation de l information Séminaire DIVA
Techniques d interaction dans la visualisation de l information Séminaire DIVA Zingg Luca, [email protected] 13 février 2007 Résumé Le but de cet article est d avoir une vision globale des techniques
Optimisation, traitement d image et éclipse de Soleil
Kléber, PCSI1&3 014-015 I. Introduction 1/8 Optimisation, traitement d image et éclipse de Soleil Partie I Introduction Le 0 mars 015 a eu lieu en France une éclipse partielle de Soleil qu il était particulièrement
Utilisation d objets : String et ArrayList
Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons
Algorithmique, Structures de données et langage C
UNIVERSITE PAUL SABATIER TOULOUSE III Algorithmique, Structures de données et langage C L3 IUP AISEM/ICM Janvier 2005 J.M. ENJALBERT Chapitre 1 Rappels et compléments de C 1.1 Structures Une structure
EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version 1.0 30/11/05
EXCEL PERFECTIONNEMENT Version 1.0 30/11/05 SERVICE INFORMATIQUE TABLE DES MATIERES 1RAPPELS...3 1.1RACCOURCIS CLAVIER & SOURIS... 3 1.2NAVIGUER DANS UNE FEUILLE ET UN CLASSEUR... 3 1.3PERSONNALISER LA
Initiation à Excel. Frédéric Gava (MCF) [email protected]
Initiation à Excel Frédéric Gava (MCF) [email protected] LACL, bâtiment P2 du CMC, bureau 221 Université de Paris XII Val-de-Marne 61 avenue du Général de Gaulle 94010 Créteil cedex Plan de cette année
les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3
Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4
UE C avancé cours 1: introduction et révisions
Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple
Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3
8 Systèmes de numération INTRODUCTION SYSTÈMES DE NUMÉRATION POSITIONNELS Dans un système positionnel, le nombre de symboles est fixe On représente par un symbole chaque chiffre inférieur à la base, incluant
Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application
Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un
ASR1 TD7 : Un microprocesseur RISC 16 bits
{Â Ö Ñ º ØÖ Ý,È ØÖ ºÄÓ Ù,Æ ÓÐ ºÎ ÝÖ Ø¹ ÖÚ ÐÐÓÒ} Ò ¹ÐÝÓÒº Ö ØØÔ»»Ô Ö Óº Ò ¹ÐÝÓÒº Ö» Ö Ñ º ØÖ Ý»¼ Ö½» ASR1 TD7 : Un microprocesseur RISC 16 bits 13, 20 et 27 novembre 2006 Présentation générale On choisit
Programme d Accès Communautaire / Atelier 4 Initiation à Microsoft Excel PLAN DE COURS 3 MICROSOFT EXCEL 4 LANCER EXCEL 4
TABLE DES MATIÈRES PLAN DE COURS 3 MICROSOFT EXCEL 4 LANCER EXCEL 4 LE COMPAGNON OFFICE 4 Masquage ou affichage du Compagnon Office 4 Sélection d un autre Compagnon 4 APPRIVOISER EXCEL 5 Exercice no 1
Fibonacci et les paquerettes
Fibonacci et les paquerettes JOLY Romain & RIVOAL Tanguy Introduction Quand on entend dire que l on peut trouver le nombre d or et la suite de Fibonacci dans les fleurs et les pommes de pin, on est au
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
Organigramme / Algorigramme Dossier élève 1 SI
Organigramme / Algorigramme Dossier élève 1 SI CI 10, I11 ; CI 11, I10 C24 Algorithmique 8 février 2009 (13:47) 1. Introduction Un organigramme (ou algorigramme, lorsqu il est plus particulièrement appliqué
Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test
Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite
Chap III : Les tableaux
Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction
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).............
Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme
Chapitre 3 Quelques fonctions usuelles 1 Fonctions logarithme et eponentielle 1.1 La fonction logarithme Définition 1.1 La fonction 7! 1/ est continue sur ]0, +1[. Elle admet donc des primitives sur cet
SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : [email protected]
Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : [email protected] SUPPORT DE COURS Matière : Algorithmiques et Structures de Données 1 Niveau : 2 ème Année Licence en Informatique
