Analisi delle strutture dati e degli algoritmi con Python (edizione 2)
Questo libro è un classico testo che illustra strutture dati e algoritmi utilizzando Python. Copre il ripasso delle basi di Python, l'analisi degli algoritmi (notazione O grande), le strutture dati fondamentali (pila, coda, lista), la ricorsione, la ricerca e il ordinamento, gli algoritmi sui alberi e sui grafi. Attraverso liste di codice pratiche, aiuta gli utenti a comprendere come implementare in modo efficiente vari tipi astratti di dati tramite Python.
Panoramica del corso
Riepilogo del contenuto
Questo libro è un classico testo sull'implementazione di strutture dati e algoritmi in Python. Copre il ripasso delle basi di Python, l'analisi degli algoritmi (notazione O grande), le strutture dati fondamentali (stack, code, liste), la ricorsione, la ricerca e il ordinamento, gli algoritmi sugli alberi e sui grafi. Attraverso elenchi di codice pratici, aiuta i lettori a comprendere come implementare in modo efficiente diverse astrazioni di tipi di dati tramite Python.
Solo chi padroneggia profondamente strutture dati ed algoritmi può veramente dominare Python.
Autore: Bradley Miller (Professore Emerito di Scienze dell'Informazione all'Università di Luther, USA), David Ranum (Ingegnere di software cognitivo presso IBM Watson)
Ringraziamenti: Grazie ai colleghi Steve Hubbard per i numerosi feedback forniti per la prima edizione e per i nuovi materiali aggiunti nella nuova versione, nonché a tutti coloro che hanno segnalato errori e offerto suggerimenti via email. Ringraziamo anche Mary, Bob e altri dipendenti del caffè Java John's a Decora City, che ci hanno permesso di diventare "autori residenti" durante le nostre vacanze. Inoltre, grazie a tutti i membri di Franklin, Beedle & Associates (in particolare Jim Leisy e Tom Sumner) per la piacevole collaborazione. Infine, ringraziamo specialmente le nostre mogli, Jane Miller e Brenda Ranum, per il loro amore e sostegno che hanno reso possibile la realizzazione di questo libro.
Obiettivi di apprendimento
- Comprendere il rapporto tra scienza dell'informazione, algoritmi e programmazione, e padroneggiare i concetti di tipo di dato astratto (ADT) e nascosta informazione.
- Utilizzare con sicurezza i tipi di dati integrati di Python (liste, tuple, insiemi, dizionari) e le strutture di controllo (cicli, condizioni, gestione eccezioni).
- Padronanza dei concetti fondamentali della programmazione orientata agli oggetti in Python: definizione di classi, metodi costruttori, sovraccarico di operatori (ad esempio addizione di frazioni), applicazione dell'algoritmo euclideo e distinzione tra uguaglianza profonda e superficiale.
- Confronto tra diverse soluzioni algoritmiche: essere in grado di spiegare quattro approcci per rilevare parole anagrammatiche (conteggio, ordinamento, forza bruta, conteggio caratteri) e i rispettivi tempi di complessità.
- Misurazione della performance dei container in Python: conoscere l'efficienza asintotica (O grande) delle operazioni principali su liste e dizionari in Python, e distinguere le differenze prestazionali tra
pop()epop(i). - Capacità di validare le prestazioni: saper utilizzare il modulo
timeitper progettare esperimenti che verifichino la coerenza tra complessità teorica e tempo di esecuzione reale. - Comprendere e distinguere le caratteristiche logiche delle strutture dati lineari (stack, code, deque, liste).
- Essere in grado di implementare stack, code e deque personalizzati usando i tipi di dati basilari di Python (come le liste).
- Padronanza delle applicazioni dello stack nel trattamento di espressioni (conversione da notazione infix a postfix, valutazione di espressioni postfix) e delle code nella simulazione di sistemi (simulazione di stampante).
- Padronanza dei tre principi fondamentali della ricorsione: identificare correttamente e scrivere funzioni ricorsive che includano un caso base, una progressione verso lo stato base e una chiamata ricorsiva.