Algorithmique facile, Lecture notes of Algorithms and Programming

Ce document parle des algorithmes de façon très simple

Typology: Lecture notes

2020/2021

Uploaded on 02/17/2021

reine-emilie
reine-emilie 🇨🇲

1 document

1 / 217

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Algorithmique
Amin Shokrollahi
Semestre d’Automne 2010-2011
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Partial preview of the text

Download Algorithmique facile and more Lecture notes Algorithms and Programming in PDF only on Docsity!

Algorithmique

Amin Shokrollahi

Semestre d’Automne 2010-

Contents

  • 0 Introduction
    • 0.1 Qu’est ce qu’un algorithme?
    • 0.2 Exemples d’algorithmes
      • 0.2.1 Somme d’entiers positifs
      • 0.2.2 Probl`eme de Localisation
      • 0.2.3 Monnaie Optimale
    • 0.3 Th´eorie des ensembles
      • 0.3.1 Rappels de notations de logique
      • 0.3.2 Rappels de notations de th´eorie des ensembles
      • 0.3.3 Ensembles des parties, Ensembles des mots
      • 0.3.4 Ensembles standards
    • 0.4 Relations et Fonctions
    • 0.5 Sp´ecification d’un Probl`eme
    • 0.6 Du Problemea l’algorithme et son impl´ementation
  • 1 Induction
    • 1.1 Ce que c’est et `a quoi c¸a sert
    • 1.2 Techniques d’induction
      • 1.2.1 Induction simple
      • 1.2.2 Induction descendante
      • 1.2.3 Induction Forte
    • 1.3 Exemples
      • 1.3.1 La formule d’Euler pour les arbres
      • 1.3.2 Ensemble Ind´ependant de l’Hypercube
      • 1.3.3 Le Lemme de Schwartz-Zippel
  • 2 Analyse d’Algorithmes
    • 2.1 Pourquoi analyser des Algorithmes?
    • 2.2 Exemple: Multiplication de polynˆomes
    • 2.3 Exemple: Multiplication de matrices
    • 2.4 La notation “O”
    • 2.5 L’algorithme de Karatsuba
    • 2.6 L’algorithme de Strassen
    • 2.7 Relations de R´ecurrence
    • 2.8 Remarques Finales
  • 3 Structures de donn´ees ´el´ementaires
    • 3.1 Ensembles dynamiques
    • 3.2 Structures des donn´ees dynamiques ´el´ementaires
      • 3.2.1 Stack (ou pile)
      • 3.2.2 Files d’attente (Queues)
      • 3.2.3 Listes li´ees (Linked lists)
    • 3.3 Graphes et Arbres
      • 3.3.1 Repr´esenter des graphes
      • 3.3.2 Arbres
      • 3.3.3 Repr´esentation d’arbres
      • 3.3.4 Parcourir des arbres
      • 3.3.5 R´esum´e de la section 3.3
    • 3.4 Structures de donn´ees pour des algorithmes de recherche
      • 3.4.1 Arbres binaires de recherche
      • 3.4.2 Arbres AVL
    • 3.5 Le Hachage ( Hashing )
  • 4 Construction d’algorithmes par induction
    • 4.1 La m´ethode de Horner
    • 4.2 Elimination de Gauss
    • 4.3 Les algorithmes diviser-pour-r´egner
      • 4.3.1 Le paradigme DPR g´en´eral
      • 4.3.2 L’algorithme de Karatsuba
      • 4.3.3 Recherche binaire
      • 4.3.4 MergeSort
      • 4.3.5 La paire la plus proche
      • 4.3.6 Carrelage de formes L
    • 4.4 Programmation dynamique
      • 4.4.1 Multiplication de plusieurs matrices
      • 4.4.2 Le probl`eme LCS
      • 4.4.3 Le plus-court-chemin-pour-toute-paire (Floyd-Warshall)
      • 4.4.4 Le Probleme 0 / 1 -Knapsack (Sac-a-dos 0 / 1 )
    • 4.5 Un algorithme plus rapide pour le probl`eme LCS
  • 5 Algorithmes gloutons
    • 5.1 Exemple: horaires de salles de cours
    • 5.2 El´´ements d’une strat´egie gloutonne
    • 5.3 Glouton compar´e a la programmation dynamique: Le probleme du sac `a dos
    • 5.4 Codes de Huffman
      • 5.4.1 Codes represent´es par des arbres binaires
      • 5.4.2 Le codage de Huffman
      • 5.4.3 Impl´ementation de l’algorithme de codage de Huffman
      • 5.4.4 Optimalit´e de l’algorithme de codage de Huffman
  • 6 Algorithmes de tri
    • 6.1 Algorithmes ´el´ementaires
      • 6.1.1 Selection Sort
      • 6.1.2 Insertion Sort
      • 6.1.3 Shell Sort
      • 6.1.4 Bubble Sort
    • 6.2 Quicksort
      • 6.2.1 Variantes
    • 6.3 Heap Sort
      • 6.3.1 Sifting
      • 6.3.2 Cr´eation d’un heap
      • 6.3.3 L’algorithme HEAPSORT
      • 6.3.4 Priority Queues
  • 7 Algorithmes de graphes
    • 7.1 Parcourir des graphes
    • 7.2 L’algorithme Depth First Search (DFS)
    • 7.3 L’algorithme Breadth First Search (BFS)
    • 7.4 Tri Topologique (Topological Sorting)
    • 7.5 Chemins les plus courts
    • 7.6 L’algorithme de Moore-Bellman-Ford
    • 7.7 Flux de r´eseau
    • 7.8 Application: Maximum Bipartite Matching
    • 7.9 Arbres couvrants minimaux
      • 7.9.1 L’algorithme de Kruskal
      • 7.9.2 La structure “Union Find”
      • 7.9.3 Version finale de l’algorithme de Kruskal
      • 7.9.4 L’algorithme de Prim
    • 7.10 D´etecter des cycles
      • 7.10.1 D´etecter des cycles n´egatifs
      • 7.10.2 L’algorithme de Karp pour trouver des cycles avec poids moyen minimal
  • 8 Les probl`emes NP-complets
    • 8.1 La classe P
    • 8.2 R´eduction polynomiale
    • 8.3 La classe NP
    • 8.4 NP-Compl´etude
    • 8.5 Probl`emes de Satisfiabilit´e
    • 8.6 Quelques probl`emes de graphe NP-Complets

8.7 Quelques autres problemes de graphe NP-complets.................................... 210 8.8 Probl`emes de th´eorie des ensembles........................ 211

Algorithme 1 M´ethode na¨ıve de sommation Input: Un entier positif n ∈ N. Output: La somme s :=

∑n k=1 k. s ← 0 for i = 1 to n do s ← s + i end for return s

Une meilleure m´ethode a ´et´e d´ecouverte par le math´ematicien allemand Carl Friedrich Gauß a l’ˆage de 5 ans. Son instituteur, pour le punir, lui demanda de calculer la somme des entiers de 1a 100. Le jeune Gauß annonca le r´esultat tres peu de temps apres, car il avait r´ealis´e qu’on pouvait ajouter les termes deux par deux en partant des cˆot´es oppos´es de la liste, et que les termes interm´ediaires ainsi obtenus ´etaient tous identiques: 1 + 100 = 101, 2 + 99 = 101,... , 50 + 51 =

  1. On obtient ainsi 50 termes, le r´esultat est donc 50 · 101 = 5050.

Cette m´ethode peut ˆetre g´en´eralis´ee `a tout n pair. On a:

n 2

termes

1 + n = n + 1 2 + n − 1 = n + 1 3 + n − 2 = n + 1 .. .

n 2 −^1 +^

n n^2 + 2^ =^ n^ + 1 2 +^

n 2 + 1^ =^ n^ + 1

Donc,

S(n) =

n(n + 1) 2

L’impl´ementation de la m´ethode de Gauß est triviale; Il suffit d’´ecrire la formule ci-dessus:

Algorithme 2 M´ethode de sommation de Gauß Input: Un entier positif n ∈ N. Output: La somme s :=

∑n k=1 k. return n(n 2 +1)

Nous avons d´eclar´e que la m´ethode de Gauß ´etait meilleure que notre m´ethode originale. Mais que veut dire “meilleure”? Nous pouvons donner un sens pr´ecis a ce terme: nous voulions dire qu’en utilisant la m´ethode de Gauß, la somme pouvait ˆetre calcul´ee de fac¸on plus efficace. Ceci peut ˆetre montr´e formellement en comparant le nombre d’op´erations arithm´etiques dont a besoin chaque algorithme pour parvenir au r´esultat.

La premiere m´ethode utilise n additions du compteur s. (Nous ignorons les additions de i). La deuxieme m´ethode utilise 3 op´erations arithm´etiques (une addition, une multiplication et une division). La m´ethode de Gauß est donc plus performante pour n > 3.

Il nous manque toujours:

  • Une d´emonstration que la formule de Gauß est juste. (R´ecurrence!)
  • Une notion de performance et des m´ethodes pour analyser nos algorithmes.
  • Une sp´ecification formelle du probl`eme.

0.2.2 Probl`eme de Localisation

Probleme: Probleme de localisation Input: Des entiers a 0 < a 1 < · · · < an− 1 , et x ∈ Z Output: Trouver un indice i tel que ai = x, si un tel i existe

Exemple: Supposons que les entiers soient 1 , 3 , 8 , 11 , 39 , 41 ; Si x = 39, l’output de l’algorithme serait 4 , alors que si x = 26 il n’y aurait pas de r´eponse.

Voici une premiere solution au probleme:

Algorithme 3 Recherche lin´eaire i ← 0 while ai 6 = x and i < n do i ← i + 1 end while if i = n then return ERROR else return i end if

Quelle est l’efficacit´e de cette solution? Comme avant, nous comptons le nombre d’op´erations arithm´etiques que doit r´ealiser l’algorithme. Nous ignorons de nouveau les op´erations qui ne concernent que le compteur i. Les op´erations restantes sont donc les comparaisons ai 6 = x. Cet algorithme effectue n comparaisons dans le pire des cas (ici le pire des cas se produit quand x n’est pas dans la liste ou quand x est le dernier ´el´ement, x = an− 1 ).

Peut-on faire mieux? Oui, car on peut utiliser le fait que les ai sont ordonn´es. C’est ce que fait l’algorithme suivant, appel´e Recherche Binaire ( Binary Search ):

0.2.3 Monnaie Optimale

**Probleme: Monnaie optimale Input:** Une collection C = { 1 , 2 , 5 , 10 , 20 , 50 , 100 } de valeurs de pieces de monnaie, et un entier x Output: Une suite finie de pieces, contenant aussi peu de pieces que pos- sible, dont la somme des valeurs vaut x

Exemple: Si x = 325, alors

c 0 = c 1 = c 2 = 100, c 3 = 20, c 4 = 5.

Nous pouvons donc obtenir le r´esultat demand´e en utilisant 5 pi`eces.

Voici l’algorithme le plus simple qui vienne `a l’esprit, appel´e Algorithme Glouton ( Greedy Algorithm ):

Algorithme 5 Algorithme Glouton v ← 0 et t ← 0 while v < x do Trouver le plus grand c ∈ C tel que c + v ≤ x ct ← c v ← v + c t ← t + 1 end while return (c 0 , c 1 ,... , ct− 1 )

Cet algorithme retourne-t-il une suite de pieces dont la somme des valeurs vaut x? Si oui, le nombre de pieces est-il minimal?

Il nous manque toujours:

  • Une preuve que l’algorithme est juste - Sp´ecification du probl`eme - Analyse - Solution optimale
  • Structures de donn´ees ( Data structures )
  • Principes de construction ( greedy algorithms )

Le premier pas vers ces objectifs est d’avoir une maniere rigoureuse de d´ecrire ce que l’algorithme doit accomplir, c’est-a-dire une sp´ecification formelle du probl`eme. Ceci n´ecessite quelques concepts math´ematiques (ensembles, relations, fonctions,... ) que nous d´ecrirons dans les prochaines sections.

0.3 TH´EORIE DES ENSEMBLES

Nous supposons que la notion d’ensemble est connue. En g´en´eral, nous noterons les ensembles par des lettres majuscules A, B, etc. Les mots “famille” et “collection” seront pour nous des synonymes de “ensemble”.

0.3.1 Rappels de notations de logique

Rappelons les symboles suivants:

∀ pour tout ∃ il existe ∧ et ∨ ou =⇒ implique ∈ appartient `a

Exemple: L’expression ∀x ∈ A : x 6 = y =⇒ x > y ∨ x < y,

est lue comme suit:

Pour tout x appartenant `a A, si x est distinct de y, alors x est strictement plus grand que y ou x est strictement plus petit que y.

Rappelons aussi que les versions barr´ees 6 ∃, /∈, etc... d´enotent les oppos´es des symboles correspondants (c’est-a-dire, “x /∈ A” veut dire que “x n’appartient pasa A”).

Remarque:

  • Le symbole ∀ est un A tourn´e; en anglais on dit “for A ll”, en allemand “f¨ur A lle”.
  • Le symbole ∃ est un E tourn´e; on dit “il E xiste”.
  • Le symbole ∈ rappelle `a un E, comme l´ement; x ∈ A peut aussi ˆetre lu “x el´´ement de A”.

D´efinition. L’union, l’intersection, la diff´erence et le produit cart´esien d’ensembles peuvent ˆetre d´efinis comme suit:

  • L’ union de deux ensembles A et B est l’ensemble

A ∪ B := {x | x ∈ A ∨ x ∈ B}.

Plus g´en´eralement, si F est un ensemble de sous-ensembles d’un ensemble X, l’union de tous les membres de F est d´efinie comme suit: ⋃

A∈F

A := {x ∈ X | ∃A ∈ F : x ∈ A}

  • L’ intersection de deux ensembles A et B est l’ensemble

A ∩ B := {x | x ∈ A ∧ x ∈ B}.

De mani`ere plus g´en´erale, pour une famille F de sous-ensembles de X, l’intersection de tous les membres de X est l’ensemble ⋂

A∈F

A := {x ∈ X | ∀A ∈ F : x ∈ A}.

  • La diff´erence de A et B est l’ensemble

A \ B := {x ∈ A | x /∈ B}.

  • La diff´erence symm´etrique de A et B est l’ensemble

A∆B = (A \ B) ∪ (B \ A).

  • Le produit cart´esien A × B est l’ensemble de tous les couples (a, b), o`u a ∈ A et b ∈ B. (Deux ´el´ements (a, b), (a′, b′) ∈ A×B sont ´egaux si et seulement si a = a′^ et b = b′). Pour des ensembles A 1 ,... , An, le produit cart´esien A 1 × · · · × An est l’ensemble de n-tuples

(a 1 ,... , an) o`u a 1 ∈ A 1 ,... , an ∈ An.

Le n-`eme produit cart´esien de A est l’ensemble

An^ := A︸ × · · · ×︷︷ A︸ n fois

Remarque: Les op´erateurs ∪ et ∨, respectivement ∩ et ∧, ne sont pas seulement superficielle- ment similaires. En fait, la d´efinition de ∪ fait appel a ∨ et celle de ∩ a ∧.

D´efinition. A tout ensemble A nous pouvons associer une quantit´e appel´ee sa cardinalit´e (ou simplement taille ). Nous d´enotons |A| la cardinalit´e de A, d´efinie comme ´etant

|A| :=

n si A contient exactement n ´el´ements, ∞ si le nombre d’´el´ements de A n’est pas fini.

Pour dire que A est fini, nous ´ecrivons souvent |A| < ∞. Il n’existe qu’un seul ensemble de cardinalit´e nulle, qui est l’ ensemble vide ∅ , caract´eris´e par le fait qu’aucun ´el´ement n’est contenu dans ∅.

D´efinition. Les ensembles A et B sont disjoints si

A ∩ B = ∅,

i.e., si A et B n’ont aucun ´el´ement en commun.

Soit X un ensemble et F une famille de sous-ensembles disjoints de X. La r´eunion disjointe des membres de F est not´ee (^) ⊔

A∈F

A.

Il ne s’agit de rien autre que de l’union usuelle. Mais parfois, on parle de r´eunion disjointe et on ´ecrit ⊔ au lieu se ∪ pour souligner le fait que les ensembles sont disjoints. (Par exemple, de mani`ere g´en´erale, on a (^) ∣ ∣ ∣ ∣ ∣

A∈F

A

A∈F

|A|,

ce qui n’est pas toujours vrai pour l’union usuelle.)

0.3.3 Ensembles des parties, Ensembles des mots

D´efinition. L’ ensemble des parties d’un ensemble X est d´efini comme ´etant l’ensemble de tous les sous-ensembles de X. L’ensemble des parties de X est not´e Pot(X) ou encore 2 X^.

L’ ensemble des parties finies de X est d´efini comme ´etant l’ensemble de tous les sous- ensembles finis de X. Il est not´e Pot∗(X).

On voit que si X est fini, alors on a Pot(X) = Pot∗(X).

Remarque: L’´ecriture 2 X^ est due au fait que si X est fini, on a | 2 X^ | = 2|X|. La notation Pot(X) vient de l’allemand: l’ensemble des parties s’appelle “die Potenzmenge” en allemand.

0.4 RELATIONS ET FONCTIONS

Dans toute cette partie, A et B seront des ensembles.

D´efinition. Une relation entre A et B est un sous ensemble R ⊆ A × B.

Si R ⊆ A × A, on dit que R est une relation sur A au lieu de “une relation entre A et A”.

Exemple: A = B = N,

R := {(m, n) | m, n ∈ N, m divise n}

est la relation de divisibili´e. On a donc (3, 12), (4, 4) ∈ R, mais (5, 9) ∈/ R.

Nous avons l’habitude de travailler avec des relations, mais en utilisant une notation diff´erente. Par exemple “≤” est une relation sur Z, mais il est plus pratique d’´ecrire “a ≤ b” que “(a, b) ∈ R≤”, o`u R≤ := {(m, n) | m, n ∈ Z, m ≤ n}.

D´efinition. La relation inverse de R est d´efinie par

R−^1 := {(b, a) ∈ B × A | (a, b) ∈ R}.

Exemple: La relation inverse de “≤” (R≤ dans l’exemple ci-dessus) est la relation sup´erieur ou egal `´ a “≥”.

D´efinition. Une relation R est dite sym´etrique si R = R−^1.

Exemple: Si P est un ensemble d’hommes, alors “ˆetre le frere de” est une relation sym´etrique sur P : Si David est le frere de Georges, alors Georges est aussi le fr`ere de David.

D´efinition. Une fonction partielle est une relation F ⊆ A × B qui v´erifie

∀a ∈ A : |{b ∈ B | (a, b) ∈ F }| ≤ 1. (2)

Une fonction est une fonction partielle pour laquelle on a ´egalit´e dans (2).

Si F est une fonction et (a, b) ∈ F , alors on ´ecrit b = F (a), et on dit que F envoie a sur b, ou aussi que b est l’ image de a par F.

On utilise parfois la notation F : A → B pour dire que F est une fonction de A vers B. L’ensemble de toutes les fonctions de A vers B est not´e BA.

On remarque que si F est une fonction F : A → B, alors pour chaque a ∈ A, il existe exacte- ment un b ∈ B tel que b = F (a). Nous avons l’habitude de travailler avec des fonctions, mais sans les consid´erer comme des relations. On voit une fonction plutˆot comme une transformation a laquelle on donne un ´` el´ement de A et qui nous retourne un ´el´ement de B.

Exemple: La relation F = {(a, b) | a, b ∈ R, b = a^2 }

est une fonction. La relation

R = {(a, b) | a, b ∈ R, b^2 = a}

n’est pas une fonction, car si a < 0 , il n’y a pas de b ∈ R tel que (a, b) ∈ R. En fait, R n’est mˆeme pas une fonction partielle, car si a > 0 , il y a deux valeurs de b ∈ R pour lesquelles (a, b) ∈ R. Cependant, la mˆeme relation d´efinie entre R≥ 0 et R≥ 0 est une fonction: il est facile de v´erifier que R′^ = {(a, b) | a, b ∈ R≥ 0 , b^2 = a}

a pour chaque a ∈ R≥ 0 exactement une image b ∈ R≥ 0. R′^ est la fonction racine carr´ee.

D´efinition. Une fonction F : A → B est dite surjective si pour tout b ∈ B, il existe a ∈ A tel que b = F (a).

Exemple: La fonction F = {(a, b) | a, b ∈ R, b = 2a + 1} est surjective, car pour tout b ∈ R, il existe un a ∈ R dont l’image par F est b, `a savoir a = (b − 1)/ 2. Par contre, G = {(a, b) | a, b ∈ R, b = a^4 + 1} n’est pas surjective. En effet, pour b = − 1 il n’y a pas de a ∈ R tel que F (a) = b.

D´efinition. Une fonction F est dite injective si F (a) = F (a′) implique que a = a′.

On remarque qu’une d´efinition ´equivalente de l’injectivit´e de F est a 6 = a′^ =⇒ F (a) 6 = F (a′).

Exemple: La fonction F = {(a, b) | a, b ∈ R, b = a^3 } est injective. En effet, si a^3 = b^3 alors on a a = b. Par contre, G = {(a, b) | a, b ∈ R, b = a^2 } n’est pas injective car G(1) = 1 = G(−1).

Si A = {a 1 ,... , am} est fini, alors il peut ˆetre pratique d’exprimer F : A → B sous la forme d’un vecteur. On ´ecrit (F (a 1 ),... , F (am)).

0.6 DU PROBLEMEA L’ALGORITHME ET SON IMPL´EMEN- TATION

Les ´etapes typiques dans la construction d’algorithmes et dans leur impl´ementation pratique sont les suivantes:

  1. **Sp´ecification formelle du probleme**. Souvent, le probleme nous est donn´e en prose (franc¸ais, anglais, allemand, ...) et la tˆache est de trouver une sp´ecification exacte. Quel est l’ensemble des inputs possibles, quel est l’ensemble des outputs possibles, et quelle est la d´ependance relationnelle entre les deux?
  2. **S´eparation du probleme en morceaux plus petits et plus g´erables.** Souvent le probleme est trop grand pour ˆetre attaqu´e d’un seul coup. Il doit ˆetre s´epar´e en sous-problemes plus petits, qui doivent ˆetre eux-mˆemes sp´ecifi´es. De plus, un m´echanisme doit ˆetre trouv´e pour “recoller” les solutions des sous-problemes afin d’obtenir une solution du probl`eme original.
  3. Construction d’algorithmes. Pour chaque sous-probleme, un algorithme doit ˆetre con- struit pour le r´esoudre. Souvent en pratique l’une des nombreuses techniques de construc- tion d’algorithmes peut ˆetre utilis´eea cette fin. Cependant, dans certains cas, de nouveaux algorithmes doivent ˆetre constitu´es. La construction doit ˆetre motiv´ee par des contraintes d’efficacit´e, et donc des m´ethodes d’analyse d’algorithmes doivent ˆetre utilis´ees. De plus, tous les algorithmes doivent ˆetre v´erifi´es et prouv´es.
  4. Construction de structures de donn´ees. Les structures de donn´ees sont le lien entre les algorithmes th´eoriques et leur impl´ementation pratique. Elles sont cruciales pour la performance d’un algorithme dans l’impl´ementation.
  5. Impl´ementation. Au bout de la route on trouve l’impl´ementation. Celle-ci se classe dans le domaine du g´enie logiciel, qui ne nous concernera pas dans ce cours.

Induction

1.1 CE QUE C’EST ET `A QUOI C¸ A SERT

L’induction math´ematique est une m´ethode pour prouver des affirmations concernant des ensem- bles d´enombrables. Dans la plupart des cas, cet ensemble sera l’ensemble des nombres naturels N.

Soit A(n) une affirmation pour l’entier n.

Exemple: Si A(n) d´eclare que “n^2 ≥ 2 n”, alors A(3) dit par exemple que “ 9 ≥ 8 ”, ce qui est vrai, donc A(3) est vraie. D’autre part, on peut trivialement v´erifier que A(5) n’est pas vraie. D’autres exemples d’affirmations A(n) sont “n est pair”, ou “n est un produit de nombres premiers”.

Si A(n) est vraie pour tout n ∈ N, alors l’induction math´ematique (aussi appel´ee r´ecurrence ) est souvent une fac¸on ´el´egante de le prouver.

1.2 TECHNIQUES D’INDUCTION

1.2.1 Induction simple

Th´eor`eme 1.1 Une affirmation A(n) est vraie pour tout n ∈ N si et seulement si les deux conditions suivantes sont vraies:

(1) A(1)

(2) Pour tout n ≥ 1 : A(n) =⇒ A(n + 1).

D´efinition. La technique d’ induction simple consiste a montrer que A(n) est vraie pour tout n ∈ N en utilisant le th´eoreme pr´ec´edent. Le point (1) s’appelle la base d’induction et le point (2) le pas d’induction. Dans les preuves, nous marquerons les ´etapes correspondantes par [ Base ] et [ Pas ] respectivement.