Recherche linéaire : Algorithme qui examine chaque élément d'une structure séquentiellement.
Objectif : Trouver un élément spécifique ou déterminer s'il est présent.
- Initialiser un compteur d'itération à 0
- Parcourir le tableau de gauche à droite
- Comparer chaque élément avec la cible
- Retourner l'indice si trouvé, continuer sinon
- Retourner -1 si la fin du tableau est atteinte sans succès
Tableau T = [4, 2, 7, 1, 9, 3] - Taille n = 6
Cible x = 7 - Indice initial i = 0
T[0] = 4 - Comparaison : 4 == 7 ? Non
Passer à l'élément suivant
T[1] = 2 - Comparaison : 2 == 7 ? Non
Passer à l'élément suivant
T[2] = 7 - Comparaison : 7 == 7 ? Oui
Élément trouvé ! Retourner l'indice 2
| Itération | Indice | Élément | Comparaison | Terminé |
|---|---|---|---|---|
| 1 | 0 | 4 | 4≠7 | false |
| 2 | 1 | 2 | 2≠7 | false |
| 3 | 2 | 7 | 7=7 ✓ | true |
L'élément 7 est trouvé à l'indice 2 dans le tableau [4, 2, 7, 1, 9, 3].
• Recherche linéaire : Parcours séquentiel de la structure
• Arrêt anticipé : S'arrête dès que l'élément est trouvé
• Valeur de retour : Indice si trouvé, -1 sinon
Recherche dans chaînes : Extension de la recherche linéaire aux tableaux de chaînes.
Comparaison : Utilisation de l'égalité de chaînes pour la correspondance.
Tableau Noms = ["Alice", "Bob", "Charlie", "David"] - 4 éléments
Cible x = "Charlie"
Noms[0] = "Alice" - Comparaison : "Alice" == "Charlie" ? Non
Noms[1] = "Bob" - Comparaison : "Bob" == "Charlie" ? Non
Noms[2] = "Charlie" - Comparaison : "Charlie" == "Charlie" ? Oui
Élément trouvé ! Retourner l'indice 2
| Itération | Indice | Nom | Comparaison |
|---|---|---|---|
| 1 | 0 | "Alice" | "Alice"≠"Charlie" |
| 2 | 1 | "Bob" | "Bob"≠"Charlie" |
| 3 | 2 | "Charlie" | "Charlie"="Charlie" ✓ |
"Charlie" est trouvé à l'indice 2 dans le tableau ["Alice", "Bob", "Charlie", "David"].
• Chaînes de caractères : Comparaison exacte avec l'opérateur ==
• Sensibilité : La comparaison est sensible à la casse
• Performance : La complexité reste O(n) indépendamment du type
Recherche par critère : Trouver le premier élément satisfaisant une condition.
Predicate : Fonction booléenne qui teste la condition sur chaque élément.
Nous cherchons le premier élément strictement supérieur à 5
Fonction prédicat : f(x) = x > 5
T[0] = 4 - Test : 4 > 5 ? Non
Passer à l'élément suivant
T[1] = 2 - Test : 2 > 5 ? Non
Passer à l'élément suivant
T[2] = 7 - Test : 7 > 5 ? Oui
Élément trouvé ! Retourner l'indice 2
| Itération | Indice | Élément | Critère (x>5) | Terminé |
|---|---|---|---|---|
| 1 | 0 | 4 | false | false |
| 2 | 1 | 2 | false | false |
| 3 | 2 | 7 | true ✓ | true |
Le premier élément supérieur à 5 est 7, à l'indice 2.
• Critère personnalisé : Utilisation d'une fonction prédicat
• Arrêt anticipé : S'arrête au premier élément satisfaisant le critère
• Flexibilité : Adaptation à divers types de conditions
Complexité algorithmique : Mesure de la performance en fonction de la taille des données.
Notation O : Bornes supérieures asymptotiques des ressources nécessaires.
Élément cible à la position 0
1 seule comparaison → Complexité O(1)
Élément cible au milieu du tableau en moyenne
n/2 comparaisons en moyenne → Complexité O(n)
Élément cible à la dernière position ou absent
n comparaisons dans le pire cas → Complexité O(n)
Quel que soit le cas, la complexité est proportionnelle à n
Donc la complexité de la recherche linéaire est O(n)
| Scénario | Comparaisons | Complexité |
|---|---|---|
| Meilleur cas | 1 | O(1) |
| Cas moyen | n/2 | O(n) |
| Pire cas | n | O(n) |
La complexité de la recherche linéaire est O(n) dans le pire des cas.
• Complexité : Analyser le nombre d'opérations en fonction de la taille
• Pire cas : Important pour garantir une performance minimale
• Comparaison : O(n) est acceptable pour de petites structures
Application concrète : Utilisation de la recherche linéaire sur des données du monde réel.
Contexte : Recherche de produits, d'employés, de données scientifiques.
Magasin avec une liste de produits disponibles
Nous voulons vérifier si "Orange" est en stock
Liste produits = ["Pomme", "Banane", "Orange", "Pêche"]
Recherche de "Orange" → Trouvé à l'indice 2
Orange est disponible en stock (position 2)
Temps de recherche : 3 comparaisons (rapide pour une petite liste)
Pour 4 produits : maximum 4 comparaisons
La recherche linéaire est appropriée pour cette taille
| Position | Produit | Recherche "Orange" | Stock |
|---|---|---|---|
| 0 | Pomme | Non | Disponible |
| 1 | Banane | Non | Disponible |
| 2 | Orange | Oui ✓ | Disponible |
| 3 | Pêche | Non | Disponible |
"Orange" est en stock à la position 2 dans la liste des produits.
• Application : La recherche linéaire est utile pour des données réelles
• Performance : Adaptée aux petites structures de données
• Utilité : Validation de présence dans une collection
- Version simple : Recherche d'égalité exacte
- Version générique : Avec fonction prédicat pour critères personnalisés
- Version avec compteur : Suivi du nombre de comparaisons
- Optimisation : Vérifier si le tableau est vide avant de commencer
- La complexité de la recherche linéaire est O(n) dans le pire des cas
- Elle fonctionne sur des structures non triées
- Elle s'arrête dès que l'élément est trouvé
- Elle est simple à implémenter mais inefficace pour de grandes données
- • La recherche linéaire est le moyen le plus simple de trouver un élément dans une structure
- • Elle a une complexité linéaire O(n), ce qui la rend inefficace pour les grandes données
- • Elle fonctionne sur des tableaux non triés, contrairement à la recherche dichotomique
- • Elle s'arrête dès que l'élément est trouvé, ce qui optimise les cas favorables
- • Elle est souvent utilisée pour des petites collections ou comme sous-routine dans d'autres algorithmes