Tri personnalisé : Ordonner des objets complexes selon une propriété spécifique.
- Identifier la clé de tri dans les dictionnaires
- Utiliser la fonction sorted() avec une lambda
- Spécifier la clé de tri avec key=lambda
- Retourner le tableau trié
Chaque élément est un dictionnaire avec des clés nom, age, ville.
Nous voulons trier selon la clé "age" de chaque dictionnaire.
Utiliser sorted() avec une fonction lambda pour extraire la clé.
Le tri est effectué en utilisant une fonction lambda pour extraire la clé de tri de chaque dictionnaire.
• Clé de tri : Spécifier la propriété utilisée pour ordonner
• Fonction lambda : Extraire la valeur de tri pour chaque élément
• Immutabilité : sorted() crée une nouvelle liste triée
Recherche dichotomique : Algorithme de recherche dans une liste triée avec complexité logarithmique.
La recherche dichotomique ne fonctionne que sur une liste triée.
Variables debut et fin encadrent la zone de recherche.
À chaque itération, on compare l'élément central et ajuste les bornes.
La recherche dichotomique divise la zone de recherche par deux à chaque étape.
• Précondition : La liste doit être triée
• Complexité : O(log n) pour une liste de taille n
• Diviser pour régner : Diviser la zone de recherche par deux
Filtrage : Extraire les éléments d'une structure qui satisfont un critère donné.
Seuil minimal pour être admis (dans cet exemple: note ≥ 10).
Liste de dictionnaires pour stocker les informations des étudiants.
Utiliser une compréhension de liste pour sélectionner les éléments correspondants.
Le filtrage extrait les éléments qui satisfont une condition spécifique.
• Structure adaptée : Utiliser une structure qui permet l'accès aux critères
• Condition claire : Définir une condition de filtrage précise
• Efficacité : Compréhension de liste pour une implémentation concise
Pile (LIFO) : Dernier entré, premier sorti. File (FIFO) : Premier entré, premier sorti.
Pile (LIFO): Le dernier élément ajouté est le premier retiré. File (FIFO): Le premier élément ajouté est le premier retiré.
Empiler/dépiler pour la pile, enfiler/défiler pour la file.
Vérifier si la structure est vide avant de retirer un élément.
Les piles et files sont des structures de données avec des comportements spécifiques pour l'ajout et le retrait d'éléments.
• LIFO/FIFO : Respecter l'ordre d'entrée/sortie des structures
• Opérations atomiques : Empiler/enfiler et dépiler/défiler
• Sécurité : Vérifier l'état avant les opérations de suppression
Complexité : Mesure de l'efficacité d'un algorithme en fonction de la taille des données.
Tri à bulle (O(n²)) vs tri rapide (O(n log n) en moyenne).
Utiliser des données inversées pour tester le pire cas des algorithmes.
Chronométrer chaque algorithme sur les mêmes données.
L'analyse comparative révèle l'impact crucial du choix de l'algorithme sur les performances.
• Complexité théorique : Comparer les ordres de grandeur des algorithmes
• Tests pratiques : Mesurer les temps d'exécution réels
• Conditions équitables : Utiliser les mêmes données pour chaque test
- Recherche rapide : Dictionnaire (hash table) + recherche en O(1)
- Tri : Liste + tri rapide ou fusion (O(n log n))
- Parcours : Arbre + parcours en profondeur ou largeur
- Historique : Pile (LIFO) pour annuler/refaire des actions
- Liste : Accès indexé, insertion/suppression au milieu coûteuse
- Dictionnaire : Accès par clé en O(1), non ordonné (Python 3.7+)
- Ensemble : Éléments uniques, recherche rapide
- Arbre binaire : Recherche, insertion, suppression en O(log n) si équilibré
- Identifier les opérations les plus fréquentes dans votre algorithme
- Choisir la structure qui optimise ces opérations
- Considérer la complexité en temps et en espace
- Tester avec des données réalistes pour valider le choix
- Prendre en compte la lisibilité et la maintenance du code