Analyse des structures de données et algorithmes en Python (2e édition)
Ce livre est un manuel classique sur les structures de données et les algorithmes utilisant Python. Il couvre le révision des bases de Python, l'analyse d'algorithmes (notation O), les structures de données de base (pile, file, liste), la récursivité, la recherche et le tri, ainsi que les algorithmes sur les arbres et les graphes. Grâce à des listes de code pratiques, il aide les lecteurs à comprendre comment implémenter efficacement divers types abstraits de données en Python.
Aperçu du cours
📚 Résumé du contenu
Ce livre est un manuel classique sur les structures de données et les algorithmes utilisant Python. Il couvre le révision des bases de Python, l'analyse d'algorithmes (notation O grande), les structures de données fondamentales (pile, file, liste), la récursivité, la recherche et le tri, ainsi que les algorithmes sur les arbres et les graphes. Grâce à des listes de code pratiques, il aide les lecteurs à comprendre comment implémenter efficacement divers types abstraits de données en Python.
Seulement en maîtrisant profondément les structures de données et les algorithmes peut-on véritablement maîtriser Python.
Auteur : Bradley Miller (professeur émérite de sciences informatiques à Luther College, États-Unis) et David Ranum (ingénieur logiciel cognitif chez IBM Watson)
Remerciements : Merci à nos collègues Steve Hubbard pour ses nombreux retours sur la première édition et pour les nouveaux contenus fournis pour cette nouvelle version, ainsi qu’à tous les collègues qui ont signalé des erreurs ou donné leurs avis par courriel. Merci également aux serveurs Mary, Bob et autres du café Java John's à Decora pour avoir accepté que nous devenions "auteurs résidents" pendant nos périodes de repos. Un grand merci aussi à toute l'équipe de Franklin, Beedle & Associates (notamment Jim Leisy et Tom Sumner) pour leur collaboration agréable. Enfin, un remerciement particulier à nos deux épouses, Jane Miller et Brenda Ranum, dont l'amour et le soutien ont rendu ce livre possible.
🎯 Objectifs d'apprentissage
- Comprendre le lien entre l'informatique, les algorithmes et la programmation, et maîtriser les concepts de type abstrait de données (TAD) et de masquage d'information.
- Maîtriser les types de données intégrés de Python (listes, tuples, ensembles, dictionnaires) et les structures de contrôle (boucles, branches, gestion des exceptions).
- Maîtriser les fondamentaux de la programmation orientée objet en Python : définition de classes, méthodes constructeurs, surcharge d'opérateurs (comme l'addition de fractions), application de l'algorithme d'Euclide, et distinction entre égalité profonde et égalité superficielle.
- Comparaison de plusieurs approches algorithmiques : expliquer les quatre solutions pour détecter les anagrammes (comptage, tri, force brute, comptage) et leurs complexités temporelles respectives.
- Évaluation quantitative des performances des conteneurs Python : maîtriser les performances en notation O grande des opérations principales sur les listes (List) et les dictionnaires (Dict), et distinguer les différences de performance entre
pop()etpop(i). - Capacité à valider les performances : utiliser le module
timeitpour concevoir des expériences et vérifier la cohérence entre la complexité théorique et les temps d'exécution réels. - Comprendre et distinguer les caractéristiques logiques des structures linéaires (piles, files, files doublement terminées, listes).
- Pouvoir implémenter des piles, files et files doublement terminées personnalisées à l’aide des collections de base de Python (comme les listes).
- Maîtriser l’utilisation des piles dans le traitement d’expressions (conversion infixe → postfixe, évaluation postfixe) et des files dans la simulation de systèmes (simulation d’imprimante).
- Maîtriser les trois principes fondamentaux de la récursivité : identifier précisément et écrire des fonctions récursives comportant un cas de base, une évolution d’état et un appel récursif à soi-même.
Leçons 共 8 课时 · 预计 24.0h
Leçons
Lesson
This lesson introduces the core principles of computer science, focusing on problem-solving through algorithms, procedural abstraction, and Python’s object-oriented nature. Students will learn to manage complexity by leveraging Python’s dynamic variable references, efficient built-in data structures, and robust error-handling techniques to build reliable, scalable software.
本课程深入探讨了算法分析的核心工具——大O记法,通过异序词检测案例展示了从暴力法到计数法的性能优化过程。学习重点在于理解不同操作(如列表索引与pop操作)的复杂度差异,并掌握如何通过空间换时间及选择合适的数据结构来提升程序效率。
This lesson introduces linear data structures and the concept of Abstract Data Types (ADTs), focusing on the stack as a fundamental LIFO (Last-In, First-Out) structure. Students will learn to implement stacks in Python and apply them to complex tasks, including converting infix expressions to postfix notation and evaluating those expressions efficiently.
本课程深入探讨了递归算法的核心原理,重点讲解了递归三原则(基准情况、状态改变、自我调用)以及递归与系统调用栈之间的内在联系。通过进制转换、汉诺塔及动态规划等案例,学生将学习如何将复杂问题拆解为自相似的子问题,并掌握从递归思维向高效动态规划算法的进阶转换。
This lesson explores fundamental search and retrieval algorithms, progressing from $O(n)$ sequential search to the $O(\log n)$ efficiency of binary search and the $O(1)$ potential of hash tables. Students learn to optimize data access through divide-and-conquer strategies, sophisticated hash function design, and collision-handling techniques to build efficient, dictionary-like data structures.
This lesson explores the hierarchical and recursive nature of tree data structures, covering fundamental terminology, implementation methods like nested lists and object-oriented references, and the construction of expression trees. It also introduces essential tree traversal algorithms—preorder, inorder, and postorder—and explains how these recursive patterns are applied to tasks like file system analysis and AVL tree balancing.
This lesson introduces graph theory as a powerful tool for modeling real-world problems by abstracting entities as vertices and relationships as edges. Students will learn to implement graphs using adjacency lists, compare storage efficiency, and master the Breadth-First Search (BFS) algorithm to solve pathfinding and state-space challenges.
This lesson explores the memory efficiency of Python's ArrayList, explaining how amortized analysis ensures $O(1)$ performance for append operations through strategic over-allocation. It also covers the mathematical foundations of RSA encryption, demonstrating how modular exponentiation and divide-and-conquer algorithms optimize complex calculations for secure data processing.