Classe de terminale ISN
Complexité d’un algorithme
Table des matières
1.Introduction...2
2. Langage C...2
2.1. Ouverture de fichier...2
2.2. Écriture dans un fichier...3
2.3. Lecture d'un fichier...4
3. Langage C++...5
3.1. Ouverture de fichier...5
3.2. Écriture dans un fichier...5
3.3. Lecture d'un fichier...6
3.4. Gestion par exception...6
4. Langage Python...7
4.1. Ouverture de fichier...7
4.2. Écriture dans un fichier...8
4.3. Lecture d'un fichier...8
4.4. Le mot-clé with...8
5. Langage PHP...9
5.1. Ouverture de fichier...9
5.2. Écriture dans un fichier...9
5.3. Lecture d'un fichier...9
5.4. Les exceptions...10 En informatique, un fichier est un ensemble d’informations stockées sur un support, réuni sous un même nom et manipulé comme une unité. Techniquement un fichier est une information numérique constituée d'une séquence d'octets, c'est-à-dire d'une séquence de nombres, permettant des usages divers.
tempfile_4722.odt 1
Classe de terminale ISN
1.Introduction
La complexité calcule le nombre de ressources nécessaires à l'exécution d'un algorithme. On distingue en général les ressources spatiales (la mémoire) ou les ressources temporel.
Quand on s'intéresse aux ressources temporel on veut calculer le nombre d'instruction élémentaire exécuté par l'algorithme pour résoudre le problème je vais m'intéresser ici au nombre d'instructions c'est à dire la complexité temporel c'est ce qu'on regarde en général la deuxième chose à rappeler c'est que la complexité dépend toujours d'un paramètre ce paramètre est souvent un an un entier qui en entrée de l'algorithme et la complexité des pentes ce paramètre rennes quand il ya plusieurs entrées il ya plusieurs complexité troisième rappel quand on s'intéresse à la complexité on
s'intéresse en fait à des grands n c'est à dire qu'on essaie de regarder le comportement asymptotique du nombre d'instructions nécessaires pour exécuter l'algorithme pour rennes on utilise la notation au de haine qui permet de capturer cette notion de complexité asymptotique ainsi si ces deux n est égal à m² + bn plus sait on va se concentrer sur le m² parce que c'est ce qui importe le plus pour de grands n 6 et de haine est égale à deux puissances n + bn carré plus sait on va s'intéresser aux deux puissances n parce que c'est ce qui grandit le plus vite pour des grands end la dernière chose à noter c'est quand on mesure la complexité on peut s'intéresser au pire des cas au meilleur des cas aucun moyen etc en général on s'intéresse au pire des cas c'est à dire quel est le nombre d'instructions maximale à exécuter pour une entrée n quand on cherche un élément dans une liste le nombre d'instructions maximale est typiquement le cas correspond typiquement au cas où l'élément n'est pas dans la liste donc je vais illustrer ici la technique d'incrémenter est compté pour le cas de la
complexité temporel en fonction d'un paramètre n passé à l'algorithme on se concentre sur des grands n en utilisant la représentation au de haine et on s'intéresse au pire des cas l'idée c'est la suivante étant donné un algorithme étant donné des instructions élémentaire de cet algorithme c'est à dire d instruction qui ne dépendent pas de haine ont comparé ces deux n + 1 avec ses 2 n la complexité pour m + 1 à la complexité de haine donc on incrémente le paramétrer non regarde le nombre d'instructions qu'il faut rajouter qu'il faut exécuter en plus et on les compare à ceux qu'il faut exécuter pour ces 2 n alors si ces deux n + 1 et et gallas et de haine on dit que la complexité est constante si la complexité de ces deux n + 1 est égal à ces deux n + 1 on dit que la complexité et linéaire il est important de noter ici que quand on se concentre sur les grands n le fait que ce soit un plus un plus deux fois plus une constante ne change pas ne change pas le résultat c'est toujours ce qu'on appelle une complexité linéaire il ya d'autres cas un peu plus subtile par exemple le cas où on rajoute un ba n est la complexité par rapport à n augmente un tout petit peu là c'est un cas un peu compliqué parce qu'on ne sait pas dire est ce qu'on ne sait pas toujours dire si c'est constant si ces linéaires etc et parmi ces cas un peu compliqué où il y en a un où si on continue à incrémenté jusqu'à arriver à 2 m on s'aperçoit que là on assez de haine +1 c'est à dire qu'il faut doubler n pour rajouter un à la complexité de ces de haine je vais donner un petit exemple plus tard mais dans ce cas là on a une complexité logarithmique il existe des algorithmes pour lesquels lorsqu'on rajoute 1 n le nombre d'instructions corps ajoute à celui pour ces de haine et de haine c'est à dire que rajouter un à l'entrée n ajoute l instruction à ce moment là la complexité et polynomiale et il existe un autre cas que l'on retrouve parfois qui est celui où lorsqu'on rajoute à n le nom d'un truc d'instruction qu'il faut exécuter est le double de celui qu'il fallait exécuter pour ces deux n ont dit que la complexité est exponentielle donc ces cinq cas de figure on les retrouve assez souvent et je vais présenter ici un exemple très simple pour chacun d'eux supposons par exemple que le problème qu'on veut résoudre est une préparation sportive à une compétition et de paramètres n ici c'est le nombre de jours qui nous restent jusqu'à cette compétition on peut imaginer un algorithme de préparation qui dit il faut faire sans pompe l'instruction élémentaire ici c'est la pompe donc pour préparer cette compétition
tempfile_4722.odt 2
Classe de terminale ISN sportive il faut faire sans pompe cet algorithme là est un algorithme la complexité constante parce que le nombre de pompes qu'il faut faire est indépendant de haine que l'on rajoute 1 ou 2 ou 3 n ce nombre ne change pas la complexité est constante supposons que n est supérieure ou égale à 2 c'est- à-dire que le nombre de jours qui nous restent jusqu'à la compétition et au moins 2 et regardons l'algorithme suivant c'est halloween va faire la chose suivante tous les jours jusqu'au jour de la compétition n y va faire exactement une pompe donc cet algorithme va itérer n fois de haine et de -1 et -2 etc jusqu'à arriver à rien et tous les jours fera exactement une instruction la complexité de cet algorithme et o2 npd linéaire si on rajoute un jour c'est à dire que si nous reste un jour de plus pour la compétition et bien il faudra faire une pompe de plus le nombre d'instructions est exécuté
augmente linéairement avec le nombre de jours qui nous restent qui nous resterait pour la course regardons maintenant l'algorithme suivre comme l'algorithme précédent il va faire une boucle mais cet algorithme ne va pas passer de haine et de -1 et -2 et c'est à chaque fois il va diviser le nombre de jours qui restent pour la course par deux ainsi si reste par exemple quatre jours pour la course qui va faire une pompe diviser le nombre de jours par deux une autre pompe diviser le nombre de jours par deux et il va s'arrêter si le nombre de jours qui restent jusqu'à la course et de huit il va faire une pompe diviser le nombre de jours par deux une autre pompe diviser le nombre de jours par deux ça va faire deux et puis une troisième pompe avant de s'arrêter en fait ce que fait cet algorithme sait faire autant de pompe que l'on peut diviser n par deux la complexité de cet algorithme est
logarithmique au de l'ocs de 2 2 n c'est une complexité inférieur qu'une complexité linéaire bien entendu pour un très grand aisne le nombre d'instructions qui va va augmenter de epsilon va
augmenter un tout petit peu alors que pour contre complexité linéaire il va augmenter en fonction de haine à travers une constante donc l'algorithme en eau de haine qu'on a vu tout à l'heure il va passer de haine à l - un aède -2 à -3 etc jusqu'à arriver à 1 et à chaque fois il va faire une pompe alors que cet algorithme que je viens de présenter il va faire une pompe au début ensuite il va diviser par deux il va faire une deuxième pompe france 8 yves a divisé par deux il va faire une deuxième pompe et il va en faire le dernier avant de s'arrêter il en fera beaucoup moins que l'algorithme ans aux jeunes le quatrième algorithmes va faire la chose suivante il va faire une boucle de haine jusqu'à 1 et à chaque étape de la boucle il a fait rennepont aps avant de décret menthe et m cet algorithme est en complexité m² pourquoi parce que à chaque fois qu'on rajoute 1 c'est à dire que la durée qu'il nous reste à la course est augmenté de un jour il faudra faire une pompe de plus qu on dit que la
complexité et polynomiale noter ici qu'on pourrait imaginer un algorithme par exemple qui pour chaque compte fait n abdos si on considère qu'une séance d'abdos est une unité travail cet
algorithme là serait en haut de heineken remarquer ici que le fait de faire hennebont pas chaque fois c'est comme si on avait deux boucles imbriquées une boucle qui va de haine à 1 pour le nombre de jours et une boucle qui va de 1 m pour le nombre de pompes on retrouve ces deux boucles imbriqué dans la ncaa rennes et on retrouverait trois boucles imbriquée avec les abdos dans le ncube le dernier algorithmes que l'on va regarder utilise une autre variable imprime et consiste à faire la chose suivante il fait une boucle de haine jusqu'à 1 à chaque étape de la boucle il fait même prime pompe et y multiplie ce nombre une prime par deux la première fois il va faire une pompe qui vaille multiplier un prix par deux ça fera deux ponts ce qui veut dire que le deuxième jour il fera deux pompes le troisième jour il fera quatre pompes et c'est dans cet algorithme lorsqu'on rajoute 1 à n on multiplie le nombre d'instructions par 2 1 2 4 8 16 etc c'est un algorithme qui augmentent de
manière exponentielle le cas du premier algorithme qui est l'algorithme en complexité constante on le retrouve par exemple lorsqu'on doit retourner les cas première éléments d'une liste le deuxième exemple de la complexité linéaire on le retrouve par exemple lorsqu'on doit chercher un élément dans une liste qui n'est pas ordonnée on doit parcourir toute la liste plus la liste grandit plus il faut faire de travail pour si la liste grandit 2 1 il faut faire une étape de travail en plus la troisième place d'alou et donc on a vu correspond par exemple au fait de chercher un élément dans une liste
tempfile_4722.odt 3
Classe de terminale ISN ordonnée c'est ce qu'on fait quand on divise la liste par deux on regarde si l'élément est au dessus ou en dessous de cette moitié ont refait la même chose en dessus ou en dessous etc on divise par autant de fois qu'on n'a pas encore trouvé d'éléments et le pire des cas et en haine ça nous fait une
complexité en look de 2,2 m la quatrième classe d'algorithmes qui ont une complexité ans au deuxième quart et c'est le cas à monter tous les jours une pompe c'est le cas où par exemple on doit faire un traitement sur toutes les paires dans une liste à chaque fois qu'on rajoute un élément dans la liste mais il faudra re parcourir toute la liste pour faire le calcul avec toutes les paires et la dernière catégorie c'est la catégorie dans laquelle à chaque fois qu'on rajoute un an multiplie par n c'est ce qui se passe par exemple quand on doit regarder tous les sous-ensembles d'un ensemble le nombre de sous ensembles qu'il ya dans un ensemble et de puissance n lorsque la taille dans l'ensemble et m c'est aussi ce qu'ont fait qu'on doit par contre on doit parcourir des arbres binaire donc ces
techniques de incrémenté est compté et une technique ma foi assez simple qui permet d'avoir une idée d'un algorithme bien entendu pour le cas d'al green très complexe il n'est pas toujours évident de compter mais ça peut donner une piste de réflexion intéressantes
tempfile_4722.odt 4