Vai al contenuto

Indice completo

Algoritmi di base

  1. Rappresentazione dei numeri
    • 1.1 Rappresentazione dei numeri naturali
    • 1.2 Rappresentazione dei numeri interi
    • 1.3 Rappresentazione dei numeri reali
  2. Pseudocodice
    • 2.1 Introduzione allo pseudocodice
    • 2.2 Variabili e assegnamenti
    • 2.3 Operazioni di base
    • 2.4 Costrutti di base
    • 2.5 Array
    • 2.6 Funzioni
    • 2.7 Insiemi
    • 2.8 Convenzioni di stile
  3. Algoritmi di ordinamento
    • 3.1 Il problema dell'ordinamento
    • 3.2 Insertion Sort
    • 3.3 Exchange Sort
    • 3.4 Selection Sort
    • 3.5 Confronto dei tre algoritmi
  4. Ricerca lineare e binaria
    • 4.1 Il problema della ricerca
    • 4.2 Ricerca lineare
    • 4.3 Ricerca binaria
  5. Algoritmi numerici
    • 5.1 Cambio di base
    • 5.2 Test di primalità
    • 5.3 Crivello di Eratostene
    • 5.4 Massimo comun divisore

Linguaggi di programmazione

  1. Introduzione a C++
    • 6.1 Caratteristiche principali del linguaggio di programmazione
    • 6.2 Variabili e tipi di dato
    • 6.3 Flusso di ingresso e uscita
    • 6.4 Operatori
    • 6.5 Istruzioni condizionali
    • 6.6 Cicli
    • 6.7 Array
    • 6.8 La funzione main e le funzioni definite dall'utente
    • 6.9 Un algoritmo completo: il valore massimo in un array
    • 6.10 Operatori bit a bit
  2. Introduzione a Python
    • 7.1 Caratteristiche principali del linguaggio di programmazione
    • 7.2 Variabili e tipi di dato
    • 7.3 Ingresso e uscita
    • 7.4 Operatori
    • 7.5 Istruzioni condizionali
    • 7.6 Cicli
    • 7.7 Liste
    • 7.8 Funzioni
    • 7.9 Un algoritmo completo: il valore massimo in un array
    • 7.10 Operatori bit a bit
    • 7.11 Python e C++ a confronto
  3. Introduzione a Java
    • 8.1 Caratteristiche principali del linguaggio di programmazione
    • 8.2 Variabili e tipi di dato
    • 8.3 Ingresso e uscita
    • 8.4 Operatori
    • 8.5 Istruzioni condizionali
    • 8.6 Cicli
    • 8.7 Array
    • 8.8 Metodi (funzioni)
    • 8.9 Un algoritmo completo: il valore massimo in un array
    • 8.10 Operatori bit a bit
    • 8.11 Java, C++ e Python a confronto

Notazione e crescita asintotica

  1. Notazione asintotica
    • 9.1 Notazioni \(\Theta\), \(\bigO\) e \(\Omega\)
    • 9.2 Notazioni \(o\) e \(\omega\)
    • 9.3 Limiti e notazioni asintotiche
    • 9.4 Proprietà relazionali delle notazioni asintotiche
    • 9.5 Notazione asintotica nell'analisi degli algoritmi
  2. Crescita asintotica
    • 10.1 Famiglie di funzioni crescenti di variabile naturale
    • 10.2 La gerarchia degli infiniti
    • 10.3 Confronto fra ordini di crescita

Analisi degli algoritmi

  1. Dimensione dell'input
    • 11.1 Dimensione dell'input
    • 11.2 Notazione asintotica: un richiamo
    • 11.3 Istanza di input costituita da un numero naturale
    • 11.4 Istanza di input costituita da due numeri naturali
    • 11.5 Istanza di input costituita da un array di numeri naturali
    • 11.6 Dimensione dell'input e numero di passi
  2. Tempo di esecuzione
    • 12.1 Tempo di esecuzione di un algoritmo
    • 12.2 Ricerca del massimo
    • 12.3 Insertion sort
    • 12.4 Cambio di base
    • 12.5 Test di primalità
    • 12.6 Riepilogo
  3. Correttezza
    • 13.1 Correttezza di un algoritmo
    • 13.2 Correttezza di Find Maximum
    • 13.3 Correttezza di Insertion Sort
    • 13.4 Correttezza di Binary Search
    • 13.5 Correttezza dell'algoritmo di Euclide
    • 13.6 Correttezza degli algoritmi ricorsivi

Ricorsione

  1. Ricorsione
    • 14.1 Algoritmi ricorsivi
    • 14.2 Albero delle chiamate ricorsive e call stack
    • 14.3 Correttezza degli algoritmi ricorsivi
    • 14.4 Fattoriale
    • 14.5 Numeri di Fibonacci
    • 14.6 Massimo comun divisore
    • 14.7 Elevamento a potenza veloce
    • 14.8 Torri di Hanoi
    • 14.9 Riepilogo
  2. Equazioni di ricorrenza
    • 15.1 Equazioni di ricorrenza
    • 15.2 Il metodo di espansione
    • 15.3 Il metodo di sostituzione
    • 15.4 Il metodo dell'albero di ricorsione
    • 15.5 Verso il Master theorem
    • 15.6 Riepilogo: quale metodo quando
  3. Il Master theorem
    • 16.1 Ricorrenze in forma standard
    • 16.2 Il Master theorem
    • 16.3 Applicare il Master theorem
    • 16.4 Quando il Master theorem non si applica
    • 16.5 Dimostrazione del Master theorem
    • 16.6 Riepilogo
  4. Algoritmi ricorsivi
    • 17.1 La somma degli elementi di un array
    • 17.2 Merge Sort
    • 17.3 Ricerca binaria ricorsiva
    • 17.4 Il problema del sotto-array di somma massima
    • 17.5 Riepilogo
  5. Algoritmi ricorsivi e iterativi a confronto
    • 18.1 Ricorsione e iterazione
    • 18.2 Confronto in sintesi
    • 18.3 Il divide et impera dà il guadagno, non la ricorsione in sé
    • 18.4 Quando i sottoproblemi si sovrappongono
    • 18.5 Spazio
    • 18.7 Esperimento
    • 18.8 Linee guida