GLI ALGORITMI
VISIBILE SUL BLOG
[email protected]
INFORMATICA
ANNO SCOLASTICO 2013 / 2014
GABRIELE SCARICA
2°T
INNANZITUTTO COSA E’ UN
ALGORITMO …
• Un algoritmo è un procedimento formale che risolve un
determinato problema attraverso un numero finito di passi. Un
problema risolvibile mediante un algoritmo si dice ”computabile”.
Il termine algoritmo deriva dalla trascrizione latina del nome di un
matematico arabo – medioevale, al-Khwarizmi , che è considerato
uno dei primi autori ad aver fatto riferimento a questo concetto.
• Questo può anche essere considerato un insieme di azioni (o
istruzioni) che, eseguite secondo un ordine prestabilito,
permettono di trovare il risultato cercato sulla base dei dati in
ingresso
QUANTI TIPI DI ALGORITMI CONOSCIAMO E
ANDREMO AD ANALIZZARE ?
INNANZITUTTO VA DETTO CHE SI DIVIDONO IN BASE ALL’ ORDINE CHE SI VUOLE
DARE ALLE INFORMAZIONI
•
•
•
•
•
•
•
Quick sort
Heap sort
Merge sort
Counting sort
Bubble sort
Selection sort
Insertion sort
Quick sort
• Ordina i dati suddividendo il problema in problema più
semplici
In altre parole diciamo che la base del suo funzionamento è
l'utilizzo ricorsivo della procedura “partition” : preso un
elemento da una struttura dati (es. array) si pongono gli
elementi minori a sinistra rispetto a questo e gli elementi
maggiori a destra.
• Il Quicksort, termine che tradotto letteralmente in italiano
indica ordinamento rapido, è un algoritmo di ordinamento che
ha, in generale , prestazioni migliori tra quelli basati su
confronto. È stato ideato da Charles Antony Richard
Hoare nel 1961.
Heap sort
• Algoritmo che inserisce a destra dell’ elenco il valore piu
semplice
• L' heapsort è un algoritmo di ordinamento iterativo ed “inplace” proposto da Williams nel 1964, che si basa su strutture
dati ausiliarie .
• L' heapsort per eseguire l'ordinamento, utilizza una struttura
chiamata heap (dall’ inglese mucchio); un heap è
rappresentabile con un albero binario in cui tutti i nodi
seguono una data proprietà, detta priorità. Esso è completo
almeno fino al penultimo livello dell'albero e ad ogni nodo
corrisponde uno ed un solo elemento.
Merge sort
• Unisce due elenchi già ordinati ai dati per ordinarli in un’unica lista
• Concettualmente, l'algoritmo funziona nel seguente modo:
Se la sequenza da ordinare ha lunghezza 0 oppure 1, è già ordinata.
Altrimenti:
La sequenza viene divisa (divide) in due metà (se la sequenza
contiene un numero dispari di elementi, viene divisa in due
sottosequenze di cui la prima ha un elemento in più della seconda)
Ognuna di queste sottosequenze viene ordinata,
applicando ricorsivamente l'algoritmo(impera)
Le due sottosequenze ordinate vengono fuse (combina). Per fare
questo, si estrae ripetutamente il minimo delle due sottosequenze e
lo si pone nella sequenza in uscita, che risulterà ordinata
• Fu inventato da John von Neumann nel 1945.
Counting sort
• Ordina i dati paragonabili uno alla volta e li confronta con un
valore numerico .
• Il Counting sort è un algoritmo di ordinamento per
valori numerici interi con complessità di tipo lineare.
L'algoritmo si basa sulla conoscenza a priori dell'intervallo in
cui sono compresi i valori da ordinare .
• In questo caso , diversamente
dagli altri si propone un esempio
piu specifico , e non in riferimento
ad un programma .
Nonostante ciò capiamo dalla
descrizione precedente cosa
vogliamo intendere con “counting
sort” …
Bubble sort
• Confronta i dati e mette quello di valore minore a sinistra dell’elenco
• Il suo funzionamento è semplice: ogni coppia di elementi adiacenti
della lista viene comparata e se essi sono nell'ordine sbagliato
vengono invertiti. L'algoritmo scorre poi tutta la lista finché non
vengono più eseguiti scambi, situazione che indica che la lista è
ordinata.
• L'algoritmo deve il suo nome al modo in cui gli elementi vengono
ordinati, con quelli più piccoli che "risalgono" verso le loro posizioni
corrette all'interno della lista . In particolare, alcuni elementi
attraversano la lista velocemente , altri più lentamente: i primi sono
in gergo detti "conigli" e sono gli elementi che vengono spostati
nella stessa direzione in cui scorre l'indice dell'algoritmo, mentre i
secondi sono detti "tartarughe" e sono gli elementi che vengono
spostati in direzione opposta a quella dell'indice.
Selection sort
• Scrive per ordinare pochi elementi , ordina i dati assegnando
un minore tra quelli che rimangono
• L'ordinamento per selezione (selection sort) è un algoritmo di
ordinamento che opera ”in place” ed in modo simile
all'ordinamento per inserzione . L'algoritmo è di tipo non
adattivo, ossia il suo tempo di esecuzione non dipende
dall'input ma dalla dimensione dell'array !
• L'algoritmo seleziona di volta in volta il numero minore nella
sequenza di partenza e lo sposta nella sequenza ordinata; di
fatto la sequenza viene suddivisa in due parti: la sottosequenza
ordinata, che occupa le prime posizioni dell'array, e la
sottosequenza da ordinare, che costituisce la parte restante
dell'array.
Insertion sort
• Ordina i maggiori a destra e i minori alla sinistra
• L'Insertion sort , in italiano ordinamento a inserimento, è
un algoritmo relativamente semplice per ordinare un array .
Possiamo constatare che non è molto diverso dal modo in cui
un essere umano ordina un mazzo di carte.
Esso è un algoritmo in place, cioè ordina l'array senza doverne
creare una copia, risparmiando memoria. Pur essendo molto
meno efficiente di algoritmi più avanzati , può avere alcuni
vantaggi: ad esempio, è semplice da implementare ed è
efficiente per insiemi di partenza che sono quasi ordinati.
Per esempio …
• function insertionSort(array A)
for i ← 1 to length[A] do
value ← A[i]
j ← i-1
while j >= 0 and A[j] > value do
A[j + 1] ← A[j]
j ← j-1
A[j+1] ← value