Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Algoritmi Capitolo 1, Appunti di Algoritmi E Strutture Di Dati

Introduzione a Pseudocodice,Valutazione efficienza di un algoritmo e ricerca binaria

Tipologia: Appunti

2023/2024

Caricato il 01/11/2024

vittorio-ingrassia-1
vittorio-ingrassia-1 🇮🇹

5 documenti

1 / 6

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
ALGORITMI
Un PROBLEMA COMPUTAZIONALE è una
RELAZIONE che associa ad ogni elemento del dominio di INPUT un
elemento del dominio di OUTPUT (rappresenta una classe di problemi
concreti/istanze).
Dato un problema computazionale un ALGORITMO è una
SEQUENZA FINITA di PASSI ELEMENTARI e NON AMBIGUI
che ci consente di individuare, per ogni istanza del problema, una
SOLUZIONE (se esiste) o di certificarne l’INESISTENZA (se non
esiste).
NB. L’ISTANZA è un caso particolare del problema
computazionale
Quindi il primo step è ottenere una formulazione chiara e non ambigua
del problema.
Esempio1: Date le altezze di un gruppo di persone, individuare le altezze delle
persone alte è ambiguo perché non so la definizione di persona alta
Esempio2: Date le altezze in metri di un gruppo di 100 persone, restituire le
altezze delle persone che sono alte. Le persone sono alte se la loro
altezza è maggiore di 1,70 m adesso non più ambigui
Le descrizioni in linguaggio naturale sono imprecise e spesso ambigue
Tali descrizioni non rendono agevole il confronto tra soluzioni diverse e
non è semplice stabilire la correttezza dell’algoritmo
Cosa ci serve?
1. Linguaggio più formale di quello naturale
(PSEUDOCODICE)
2. definizione del concetto di “migliore
(VALUTAZIONE EFFICIENZA ALGORITMO)
3. definizione del concetto di correttezza
(VALUTAZIONE CORRETTEZZA ALGORITMO)
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Algoritmi Capitolo 1 e più Appunti in PDF di Algoritmi E Strutture Di Dati solo su Docsity!

ALGORITMI

Un PROBLEMA COMPUTAZIONALE è una

RELAZIONE che associa ad ogni elemento del dominio di INPUT un elemento del dominio di OUTPUT (rappresenta una classe di problemi concreti/istanze).

Dato un problema computazionale un ALGORITMO è una

SEQUENZA FINITA di PASSI ELEMENTARI e NON AMBIGUI che ci consente di individuare, per ogni istanza del problema, una SOLUZIONE (se esiste) o di certificarne l’ INESISTENZA (se non esiste). NB. L’ISTANZA è un caso particolare del problema computazionale Quindi il primo step è ottenere una formulazione chiara e non ambigua del problema. Esempio1: Date le altezze di un gruppo di persone, individuare le altezze delle persone alte  è ambiguo perché non so la definizione di persona alta Esempio2: Date le altezze in metri di un gruppo di 100 persone, restituire le altezze delle persone che sono alte. Le persone sono alte se la loro altezza è maggiore di 1,70 m  adesso non più ambigui Le descrizioni in linguaggio naturale sono imprecise e spesso ambigue Tali descrizioni non rendono agevole il confronto tra soluzioni diverse e non è semplice stabilire la correttezza dell’algoritmo Cosa ci serve?

  1. Linguaggio più formale di quello naturale (PSEUDOCODICE)
  2. definizione del concetto di “ migliore ” (VALUTAZIONE EFFICIENZA ALGORITMO)
  3. definizione del concetto di correttezza (VALUTAZIONE CORRETTEZZA ALGORITMO)

PSEUDOCODICE

 Linguaggio FORMALE e NON AMBIGUO che richiama i linguaggi di programmazione (sganciandosi però dai dettagli implementativi come dichiarazioni di variabili che differiscono da un linguaggio a un altro)

 Ci permette di scegliere il LIVELLO DI DETTAGLIO con cui

descriviamo il nostro algoritmo. Esempio:se l’algoritmo richiede di ordinare gli elementi di un insieme S ma l’ordinamento non è il cuore dell’algoritmo stesso possiamo scrivere S = sort(S) omettendo i dettagli relativi al modo in cui ordiniamo gli elementi di S ESEMPI 1 2 3 4 5 6

RICERCA BINARIA

Devo cercare un elemento all’interno dell’insieme S. Posso utilizzare questo Algoritmo: 2.A Ma io posso ricercare l’elemento attraverso un algoritmo più efficiente, ovvero quello della RICERCA BINARIA:

Sia S = [s1, s2… sn] una sequenza di dati ORDINATI e DISTINTI.

Eseguire una ricerca della posizione di un dato v in S consiste nel restituire l’indice i tale che 1 ≤ i ≤ n se v è presente nella posizione i , 0 se v non è presente in S.  Se non ho elementi in S da controllare restituisci 0  Altrimenti, analizza elemento centrale (con indice m) CASO 1. S[m] = v, trovato CASO 2. v<S[m], cerco a sinistra di m CASO 3. v>S[m], cerco a destra 2.B 2.AB

VALUTAZIONE CORRETTEZZA ALGORITMO

La CORRETTEZZA è la CAPACITÀ dell’algoritmo di risolvere il problema in modo corretto. Per valutare la correttezza ci serviamo del concetto di INVARIANTE che è una CONDIZIONE VERA in un certo punto del programma.

  • INVARIANTE DI CICLO: condizione vera all’inizio dell’iterazione di un ciclo
  • INVARIANTE DI CLASSE: condizione vera al termine dell’esecuzione di un metodo di una classe

INVARIANTE DI CICLO

Usato per dimostrare la correttezza di un ALGORITMO ITERATIVO. Distinguiamo 3 fasi:

  • Inizializzazione (caso base): condizione vera alla prima iterazione
  • Conservazione (passo induttivo): se la condizione è vera all’inizio dell’iterazione, rimane vera al suo termine
  • Conclusione: quando il ciclo termina, l’invariante rappresenta la correttezza dell’algoritmo