<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RDavid</id>
	<title>Wiki du LAMA (UMR 5127) - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RDavid"/>
	<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php/Sp%C3%A9cial:Contributions/RDavid"/>
	<updated>2026-05-21T07:43:08Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO505_:_Math%C3%A9matiques_pour_l%27informatique&amp;diff=1617</id>
		<title>INFO505 : Mathématiques pour l&#039;informatique</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO505_:_Math%C3%A9matiques_pour_l%27informatique&amp;diff=1617"/>
		<updated>2007-10-05T21:42:22Z</updated>

		<summary type="html">&lt;p&gt;RDavid : /* Approximations asymptotiques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ce wiki est un complément de cours pour le cours &amp;quot;info-505, mathématiques pour l&#039;informatique&amp;quot; donné à l&#039;automne 2007. La participation au wiki n&#039;est&lt;br /&gt;
pas obligatoire mais fortement encouragée. Pour pouvoir modifier les pages, inscrivez-vous (lien en haut à droite) pour obtenir un login et mot de&lt;br /&gt;
passe. (Utilisez votre vrai nom...)&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aller voir [http://meta.wikimedia.org/wiki/Aide:Contenu ce guide] pour vous familiariser avec les wikis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exercice :&amp;lt;/u&amp;gt; si vous n&#039;en avez pas, créez-vous un compte et essayez de modifier cette page (correction de fôtes d&#039;aurtograffe, rajout de détails,&lt;br /&gt;
mise en page, ...)&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser la page de discussion pour ... discuter. (Ou poser des questions, faire des commentaires etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
[http://fr.wikipedia.org/wiki/Dijkstra Edsger Wybe Dijkstra], un grand monsieur de l&#039;informatique a dit &#039;&#039;&amp;quot;Computer Science is not about computers, any more than astronomy is about telescopes.&amp;quot;&#039;&#039; Autrement dit l&#039;informatique ne peut pas se réduire à l&#039;étude des ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Le but de la première partie de ce cours est de regarder comment deux domaines des mathématiques pures sont devenues incontournables dans la société de l&#039;internet et du multimédia :&lt;br /&gt;
* la cryptographie, issue de la théorie des nombres,&lt;br /&gt;
* les codes correcteurs d&#039;erreur, issus des l&#039;algèbre sur les corps finis.&lt;br /&gt;
&lt;br /&gt;
Les technologies résultantes sont utilisées lors de chaque transaction électronique, pour l&#039;échange de mails ou à chaque fois que vous écoutez un CD. La partie officielle du cours est un cours de mathématiques : le temps alloué ne nous permettra pas de regarder les détails d&#039;implantation ou le test des outils mentionnés dans le cours. Je vous encourage à tester, programmer ou utiliser les concepts mentionnés pour vous les approprier...&lt;br /&gt;
&lt;br /&gt;
==Complexité, approximations asymptotiques==&lt;br /&gt;
&lt;br /&gt;
La notion de &#039;&#039;complexité&#039;&#039; d&#039;un programme est fondamentale pour pouvoir évaluer l&#039;intérêt pratique d&#039;un programme. La complexité &#039;&#039;observée&#039;&#039; lors de&lt;br /&gt;
test ou de benchmark est parfois suffisante mais ne prend en compte que certaines exécutions (celles qui sons testées par les tests). Il est souvent&lt;br /&gt;
nécessaire de se faire une idée de la complexité théorique d&#039;un programme pour pouvoir prédire son temps d&#039;exécution (ou ses besoins en ressources)&lt;br /&gt;
pour les exécutions futures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Première approche de la complexité===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous ne nous intéresserons qu&#039;à la complexité en &#039;&#039;temps&#039;&#039;, et (presque) jamais à la complexité en &#039;&#039;espace&#039;&#039;. Il ne faut pas en déduire&lt;br /&gt;
que seule la complexité en temps est importante !&lt;br /&gt;
&lt;br /&gt;
L&#039;idée de base est de compter en combien de temps va s&#039;exécuter un programme donné, mais la question elle même est mal posée :&lt;br /&gt;
* comment compte-t&#039;on ?&lt;br /&gt;
* et surtout, que compte-t&#039;on ?&lt;br /&gt;
&lt;br /&gt;
Chronométrer le temps d&#039;exécution ne permet pas de faire d&#039;analyse fine, et ne permet pas facilement de prédire le comportement général de votre&lt;br /&gt;
programme. Comme le temps dépend beaucoup du processeur utilisé, l&#039;idéal serait de pouvoir compter le nombre de cycle nécessaires au programme. Cela&lt;br /&gt;
est généralement impossible car cela dépend du type de processeur utilisé ainsi que des optimisations faites par le compilateur.&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;complexité en temps&#039;&#039; d&#039;un algorithme, c&#039;est une estimation du nombre d&#039;opérations atomiques effectuées par cette algorithme avant qu&#039;il ne&lt;br /&gt;
termine. Cette estimation doit être donnée comme une fonction dépendant de la taille de l&#039;entrée sur laquelle est lancé l&#039;algorithme.&lt;br /&gt;
&lt;br /&gt;
La notion d&#039;opération atomique est assez intuitive : c&#039;est une opération algorithmique qui n&#039;est pas divisible en sous-opérations. En première&lt;br /&gt;
approximation, une opération est atomique si elle ne porte que sur des objets de type entier, caractère ou booléen. (Les types codés sur un ou deux&lt;br /&gt;
mots). Un test (&amp;lt;code&amp;gt;si (n==42) alors ...&amp;lt;/code&amp;gt;) ou une affectation (&amp;lt;code&amp;gt;x:=3,1415926536&amp;lt;/code&amp;gt;) sont des opérations atomiques ; mais&lt;br /&gt;
l&#039;initialisation d&#039;un tableau n&#039;est pas atomique. (Il y a autant d&#039;opérations qu&#039;il y a d&#039;éléments dans le tableau...)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemple :&amp;lt;/u&amp;gt; la recherche du maximum dans un tableau d&#039;entiers positifs peut se faire comme suit&lt;br /&gt;
 max := 0&lt;br /&gt;
 pour i:=1 à taille&lt;br /&gt;
 faire&lt;br /&gt;
   si (max &amp;lt; Tab[i])&lt;br /&gt;
   alors max:=Tab[i]&lt;br /&gt;
 finfaire&lt;br /&gt;
 affiche(&amp;quot;Le maximum est %i.\n&amp;quot;,max)&lt;br /&gt;
&lt;br /&gt;
Le nombre d&#039;opérations est le suivant :&lt;br /&gt;
* une opération pour l&#039;initialisation de &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt;&lt;br /&gt;
* une opération pour l&#039;initialisation de &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* un test pour voir si &amp;lt;code&amp;gt;i==taille&amp;lt;/code&amp;gt;&lt;br /&gt;
* une opération pour le test &amp;lt;code&amp;gt;max &amp;lt; Tab[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;quot;peut-être&amp;quot; une opération pour l&#039;affectation &amp;lt;code&amp;gt;max:=Tab[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
* puis, pour chaque élément suivant du tableau :&lt;br /&gt;
** un incrément du compteur&lt;br /&gt;
** une affectation du compteur&lt;br /&gt;
** un test pour voir si on a atteint la fin du tableau&lt;br /&gt;
** un test&lt;br /&gt;
** peut-être une affectation&lt;br /&gt;
&lt;br /&gt;
Au total, si &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; est la taille du tableau, on obtient entre &amp;lt;math&amp;gt;4n&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;5n&amp;lt;/math&amp;gt; opérations. De manière générale, on&lt;br /&gt;
s&#039;intéresse surtout au pire cas ; on dira donc que cet algorithme s&#039;exécute en &#039;&#039;&amp;quot;au plus &amp;lt;math&amp;gt;5n&amp;lt;/math&amp;gt; opérations&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Approximations asymptotiques===&lt;br /&gt;
&lt;br /&gt;
On ne peut habituellement pas compter de manière aussi précise le nombre d&#039;opérations ; et ça n&#039;a pas toujours du sens de vouloir être trop précis. (Est-ce que &amp;lt;code&amp;gt;i:=i+1&amp;lt;/code&amp;gt; correspond à une ou deux opérations atomiques ?) Nous allons donc utiliser les approximations asymptotique pour compter la complexité... Le but sera alors de distinguer les algorithmes &amp;quot;rapides&amp;quot;, &amp;quot;lents&amp;quot;, ou &amp;quot;infaisables&amp;quot;. La notion de &amp;quot;grand O&amp;quot; permet de faire&lt;br /&gt;
ça de manière systématique.&lt;br /&gt;
&lt;br /&gt;
;définition: si &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; sont des fonctions de &amp;lt;math&amp;gt;\mathbb N&amp;lt;/math&amp;gt; dans &amp;lt;math&amp;gt;\mathbb N&amp;lt;/math&amp;gt;, on dit que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; est un &amp;quot;grand O&amp;quot; de &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt;, et on écrit &amp;lt;math&amp;gt;f = O(g)&amp;lt;/math&amp;gt; si le quotient &amp;lt;math&amp;gt;|f(n)|\over|g(n)|&amp;lt;/math&amp;gt; est &amp;quot;ultimement&amp;quot; borné. Plus précisément, ça veut dire que &amp;lt;math&amp;gt;\exists B,\forall n, {|f(n)|\over|g(n)|} &amp;lt; B&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le but de cette définition est multiple :&lt;br /&gt;
* elle cache une borne &amp;quot;au pire&amp;quot;&lt;br /&gt;
* elle permet d&#039;identifier des complexités qui ne diffèrent que par une constante multiplicative (&amp;quot;&amp;lt;math&amp;gt;4n&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;5n&amp;lt;/math&amp;gt;, c&#039;est presque la même chose&amp;quot;)&lt;br /&gt;
* elle permet d&#039;ignorer les cas initiaux et autres phénomènes négligeables (c&#039;est le &amp;quot;ultimement&amp;quot; de la définition, qui ne sert strictement à rien)&lt;br /&gt;
* elle permet de simplifier les calculs de complexité&lt;br /&gt;
&lt;br /&gt;
;Propriétés:&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(h)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;g=O(h)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;\alpha f + \beta g=O(h)&amp;lt;/math&amp;gt;&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(g)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;g=O(h)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;f=O(h)&amp;lt;/math&amp;gt;&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(g)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;f&#039;=O(g&#039;)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;f\times f&#039;=O(g\times g&#039;)&amp;lt;/math&amp;gt;&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(g)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;f&#039;=O(g&#039;)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;f+ f&#039;=O(|g|+|g&#039;|)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir simplifier les expressions, il est important de connaître les liens entre les fonctions usuelles : &amp;lt;math&amp;gt;\log&amp;lt;/math&amp;gt;, les fonctions linéaires, les polynômes, les exponentielles, les doubles exponentielles...&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; très grand :&lt;br /&gt;
&amp;lt;math&amp;gt; 1 &amp;lt; \log(\log(n))&amp;lt; \log(n^g) &amp;lt; \log(n) &amp;lt; \log(n^k) &amp;lt; \log(\exp(n))&amp;lt; n^g &amp;lt; n &amp;lt; n^k &amp;lt; \exp(\log(n)) &amp;lt; \exp((n^g)) &amp;lt; \exp(n) &amp;lt; \exp(n^k) &amp;lt; \exp(\exp(n)) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Avec &amp;lt;math&amp;gt;g&amp;lt;1&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;k&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;---À compléter ? C&#039;est vous qui voyez...---&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Un exemple===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Arithmétique : théorie de la cryptographie==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algèbre finie : les codes correcteurs d&#039;erreurs==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quelques références==&lt;br /&gt;
&lt;br /&gt;
* [http://fr.wikipedia.org/wiki/Cryptographie article wikipedia sur la cryptographie]&lt;br /&gt;
&lt;br /&gt;
* [http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_codes article wikipedia sur les codes correcteurs d&#039;erreur]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détails techniques sur le cours==&lt;br /&gt;
&lt;br /&gt;
===Organisation des séances===&lt;br /&gt;
&lt;br /&gt;
Comme il n&#039;y a qu&#039;un seul groupe, le cours sera entièrement en mode &amp;lt;i&amp;gt;cours / TD&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le cours est divisé en deux parties indépendantes :&lt;br /&gt;
* une partie &amp;quot;mathématiques pour l&#039;informatique&amp;quot; (par [[Utilisateur:Hyvernat|Pierre Hyvernat]])&lt;br /&gt;
* une partie &amp;quot;algorithmique des graphes&amp;quot; (faite par Françoise Deloule)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Les support de TD et TP===&lt;br /&gt;
&lt;br /&gt;
* [http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0708/info505/td1.pdf TD 1]&lt;/div&gt;</summary>
		<author><name>RDavid</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO505_:_Math%C3%A9matiques_pour_l%27informatique&amp;diff=1616</id>
		<title>INFO505 : Mathématiques pour l&#039;informatique</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO505_:_Math%C3%A9matiques_pour_l%27informatique&amp;diff=1616"/>
		<updated>2007-10-05T21:33:18Z</updated>

		<summary type="html">&lt;p&gt;RDavid : /* Approximations asymptotiques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ce wiki est un complément de cours pour le cours &amp;quot;info-505, mathématiques pour l&#039;informatique&amp;quot; donné à l&#039;automne 2007. La participation au wiki n&#039;est&lt;br /&gt;
pas obligatoire mais fortement encouragée. Pour pouvoir modifier les pages, inscrivez-vous (lien en haut à droite) pour obtenir un login et mot de&lt;br /&gt;
passe. (Utilisez votre vrai nom...)&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aller voir [http://meta.wikimedia.org/wiki/Aide:Contenu ce guide] pour vous familiariser avec les wikis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exercice :&amp;lt;/u&amp;gt; si vous n&#039;en avez pas, créez-vous un compte et essayez de modifier cette page (correction de fôtes d&#039;aurtograffe, rajout de détails,&lt;br /&gt;
mise en page, ...)&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser la page de discussion pour ... discuter. (Ou poser des questions, faire des commentaires etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
[http://fr.wikipedia.org/wiki/Dijkstra Edsger Wybe Dijkstra], un grand monsieur de l&#039;informatique a dit &#039;&#039;&amp;quot;Computer Science is not about computers, any more than astronomy is about telescopes.&amp;quot;&#039;&#039; Autrement dit l&#039;informatique ne peut pas se réduire à l&#039;étude des ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Le but de la première partie de ce cours est de regarder comment deux domaines des mathématiques pures sont devenues incontournables dans la société de l&#039;internet et du multimédia :&lt;br /&gt;
* la cryptographie, issue de la théorie des nombres,&lt;br /&gt;
* les codes correcteurs d&#039;erreur, issus des l&#039;algèbre sur les corps finis.&lt;br /&gt;
&lt;br /&gt;
Les technologies résultantes sont utilisées lors de chaque transaction électronique, pour l&#039;échange de mails ou à chaque fois que vous écoutez un CD. La partie officielle du cours est un cours de mathématiques : le temps alloué ne nous permettra pas de regarder les détails d&#039;implantation ou le test des outils mentionnés dans le cours. Je vous encourage à tester, programmer ou utiliser les concepts mentionnés pour vous les approprier...&lt;br /&gt;
&lt;br /&gt;
==Complexité, approximations asymptotiques==&lt;br /&gt;
&lt;br /&gt;
La notion de &#039;&#039;complexité&#039;&#039; d&#039;un programme est fondamentale pour pouvoir évaluer l&#039;intérêt pratique d&#039;un programme. La complexité &#039;&#039;observée&#039;&#039; lors de&lt;br /&gt;
test ou de benchmark est parfois suffisante mais ne prend en compte que certaines exécutions (celles qui sons testées par les tests). Il est souvent&lt;br /&gt;
nécessaire de se faire une idée de la complexité théorique d&#039;un programme pour pouvoir prédire son temps d&#039;exécution (ou ses besoins en ressources)&lt;br /&gt;
pour les exécutions futures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Première approche de la complexité===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous ne nous intéresserons qu&#039;à la complexité en &#039;&#039;temps&#039;&#039;, et (presque) jamais à la complexité en &#039;&#039;espace&#039;&#039;. Il ne faut pas en déduire&lt;br /&gt;
que seule la complexité en temps est importante !&lt;br /&gt;
&lt;br /&gt;
L&#039;idée de base est de compter en combien de temps va s&#039;exécuter un programme donné, mais la question elle même est mal posée :&lt;br /&gt;
* comment compte-t&#039;on ?&lt;br /&gt;
* et surtout, que compte-t&#039;on ?&lt;br /&gt;
&lt;br /&gt;
Chronométrer le temps d&#039;exécution ne permet pas de faire d&#039;analyse fine, et ne permet pas facilement de prédire le comportement général de votre&lt;br /&gt;
programme. Comme le temps dépend beaucoup du processeur utilisé, l&#039;idéal serait de pouvoir compter le nombre de cycle nécessaires au programme. Cela&lt;br /&gt;
est généralement impossible car cela dépend du type de processeur utilisé ainsi que des optimisations faites par le compilateur.&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;complexité en temps&#039;&#039; d&#039;un algorithme, c&#039;est une estimation du nombre d&#039;opérations atomiques effectuées par cette algorithme avant qu&#039;il ne&lt;br /&gt;
termine. Cette estimation doit être donnée comme une fonction dépendant de la taille de l&#039;entrée sur laquelle est lancé l&#039;algorithme.&lt;br /&gt;
&lt;br /&gt;
La notion d&#039;opération atomique est assez intuitive : c&#039;est une opération algorithmique qui n&#039;est pas divisible en sous-opérations. En première&lt;br /&gt;
approximation, une opération est atomique si elle ne porte que sur des objets de type entier, caractère ou booléen. (Les types codés sur un ou deux&lt;br /&gt;
mots). Un test (&amp;lt;code&amp;gt;si (n==42) alors ...&amp;lt;/code&amp;gt;) ou une affectation (&amp;lt;code&amp;gt;x:=3,1415926536&amp;lt;/code&amp;gt;) sont des opérations atomiques ; mais&lt;br /&gt;
l&#039;initialisation d&#039;un tableau n&#039;est pas atomique. (Il y a autant d&#039;opérations qu&#039;il y a d&#039;éléments dans le tableau...)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemple :&amp;lt;/u&amp;gt; la recherche du maximum dans un tableau d&#039;entiers positifs peut se faire comme suit&lt;br /&gt;
 max := 0&lt;br /&gt;
 pour i:=1 à taille&lt;br /&gt;
 faire&lt;br /&gt;
   si (max &amp;lt; Tab[i])&lt;br /&gt;
   alors max:=Tab[i]&lt;br /&gt;
 finfaire&lt;br /&gt;
 affiche(&amp;quot;Le maximum est %i.\n&amp;quot;,max)&lt;br /&gt;
&lt;br /&gt;
Le nombre d&#039;opérations est le suivant :&lt;br /&gt;
* une opération pour l&#039;initialisation de &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt;&lt;br /&gt;
* une opération pour l&#039;initialisation de &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* un test pour voir si &amp;lt;code&amp;gt;i==taille&amp;lt;/code&amp;gt;&lt;br /&gt;
* une opération pour le test &amp;lt;code&amp;gt;max &amp;lt; Tab[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;quot;peut-être&amp;quot; une opération pour l&#039;affectation &amp;lt;code&amp;gt;max:=Tab[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
* puis, pour chaque élément suivant du tableau :&lt;br /&gt;
** un incrément du compteur&lt;br /&gt;
** une affectation du compteur&lt;br /&gt;
** un test pour voir si on a atteint la fin du tableau&lt;br /&gt;
** un test&lt;br /&gt;
** peut-être une affectation&lt;br /&gt;
&lt;br /&gt;
Au total, si &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; est la taille du tableau, on obtient entre &amp;lt;math&amp;gt;4n&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;5n&amp;lt;/math&amp;gt; opérations. De manière générale, on&lt;br /&gt;
s&#039;intéresse surtout au pire cas ; on dira donc que cet algorithme s&#039;exécute en &#039;&#039;&amp;quot;au plus &amp;lt;math&amp;gt;5n&amp;lt;/math&amp;gt; opérations&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Approximations asymptotiques===&lt;br /&gt;
&lt;br /&gt;
On ne peut habituellement pas compter de manière aussi précise le nombre d&#039;opérations ; et ça n&#039;a pas toujours du sens de vouloir être trop précis. (Est-ce que &amp;lt;code&amp;gt;i:=i+1&amp;lt;/code&amp;gt; correspond à une ou deux opérations atomiques ?) Nous allons donc utiliser les approximations asymptotique pour compter la complexité... Le but sera alors de distinguer les algorithmes &amp;quot;rapides&amp;quot;, &amp;quot;lents&amp;quot;, ou &amp;quot;infaisables&amp;quot;. La notion de &amp;quot;grand O&amp;quot; permet de faire&lt;br /&gt;
ça de manière systématique.&lt;br /&gt;
&lt;br /&gt;
;définition: si &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; sont des fonctions de &amp;lt;math&amp;gt;\mathbb N&amp;lt;/math&amp;gt; dans &amp;lt;math&amp;gt;\mathbb N&amp;lt;/math&amp;gt;, on dit que &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; est un &amp;quot;grand O&amp;quot; de &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt;, et on écrit &amp;lt;math&amp;gt;f = O(g)&amp;lt;/math&amp;gt; si le quotient &amp;lt;math&amp;gt;|f(n)|\over|g(n)|&amp;lt;/math&amp;gt; est &amp;quot;ultimement&amp;quot; borné. Plus précisément, ça veut dire que &amp;lt;math&amp;gt;\exists B,\forall n, {|f(n)|\over|g(n)|} &amp;lt; B&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le but de cette définition est multiple :&lt;br /&gt;
* elle cache une borne &amp;quot;au pire&amp;quot;&lt;br /&gt;
* elle permet d&#039;identifier des complexités qui ne diffèrent que par une constante multiplicative (&amp;quot;&amp;lt;math&amp;gt;4n&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;5n&amp;lt;/math&amp;gt;, c&#039;est presque la même chose&amp;quot;)&lt;br /&gt;
* elle permet d&#039;ignorer les cas initiaux et autres phénomènes négligeables (c&#039;est le &amp;quot;ultimement&amp;quot; de la définition, qui ne sert strictement à rien)&lt;br /&gt;
* elle permet de simplifier les calculs de complexité&lt;br /&gt;
&lt;br /&gt;
;Propriétés:&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(h)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;g=O(h)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;\alpha f + \beta g=O(h)&amp;lt;/math&amp;gt;&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(g)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;g=O(h)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;f=O(h)&amp;lt;/math&amp;gt;&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(g)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;f&#039;=O(g&#039;)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;f\times f&#039;=O(g\times g&#039;)&amp;lt;/math&amp;gt;&lt;br /&gt;
* si &amp;lt;math&amp;gt;f=O(g)&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;f&#039;=O(g&#039;)&amp;lt;/math&amp;gt; alors &amp;lt;math&amp;gt;f+ f&#039;=O(|g|+|g&#039;|)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir simplifier les expressions, il est important de connaître les liens entre les fonctions usuelles : &amp;lt;math&amp;gt;\log&amp;lt;/math&amp;gt;, les fonctions linéaires, les polynômes, les exponentielles, les doubles exponentielles...&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; très grand :&lt;br /&gt;
&amp;lt;math&amp;gt; 1 &amp;lt; n^g &amp;lt; \log(n^g) &amp;gt; \log(\log(n)) &amp;lt; \log(n) &amp;lt; \log(n^k) &amp;lt; \log(\exp(n)) &amp;lt; n &amp;lt; n^k &amp;lt; \exp((n^g)) &amp;lt; \exp(\log(n)) &amp;lt; \exp(n) &amp;lt; \exp(n^k) &amp;lt; \exp(\exp(n)) &amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Avec &amp;lt;math&amp;gt;g&amp;lt;1&amp;lt;/math&amp;gt; et &amp;lt;math&amp;gt;k&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;---À compléter ? C&#039;est vous qui voyez...---&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Un exemple===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Arithmétique : théorie de la cryptographie==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algèbre finie : les codes correcteurs d&#039;erreurs==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quelques références==&lt;br /&gt;
&lt;br /&gt;
* [http://fr.wikipedia.org/wiki/Cryptographie article wikipedia sur la cryptographie]&lt;br /&gt;
&lt;br /&gt;
* [http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_codes article wikipedia sur les codes correcteurs d&#039;erreur]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détails techniques sur le cours==&lt;br /&gt;
&lt;br /&gt;
===Organisation des séances===&lt;br /&gt;
&lt;br /&gt;
Comme il n&#039;y a qu&#039;un seul groupe, le cours sera entièrement en mode &amp;lt;i&amp;gt;cours / TD&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le cours est divisé en deux parties indépendantes :&lt;br /&gt;
* une partie &amp;quot;mathématiques pour l&#039;informatique&amp;quot; (par [[Utilisateur:Hyvernat|Pierre Hyvernat]])&lt;br /&gt;
* une partie &amp;quot;algorithmique des graphes&amp;quot; (faite par Françoise Deloule)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Les support de TD et TP===&lt;br /&gt;
&lt;br /&gt;
* [http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0708/info505/td1.pdf TD 1]&lt;/div&gt;</summary>
		<author><name>RDavid</name></author>
	</entry>
</feed>