Algoritmo InsertionSort

Slides:



Advertisements
Presentazioni simili
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Advertisements

Uso avanzato di C.
Unità G3 Algoritmi notevoli. Ordinamento Un insieme di dati {a0, a1, a2, …, an} si dice ordinato in ordine crescente se a0 a1 a2 a3 … an I dati sono generalmente.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
APPUNTI SUL LINGUAGGIO C
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Heap binari e HeapSort.
Lalgoritmo MergeSort Applica la strategia del divide et impera Divide: suddivide la sequenza di n elementi data in due sottosequenze di n/2 elementi Impera:
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Algoritmo SelectSort Invariante di ciclo: ad ogni passo
Heap Ordinamento e code di priorità Ugo de Liguoro.
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 07/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Lo strano mondo degli algoritmi di ordinamento Algoritmi.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Sesta giornata Risolvere efficientemente un problema in P: Il problema dell’ordinamento: Insertion.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Statistiche d'ordine Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Divide et Impera Quicksort Mergesort Charles Antony Richard Hoare
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Sulla complessità Lezione n°2
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Divide et Impera Quicksort Mergesort
Algoritmi e Strutture Dati
iterazione o ricorsione nel pensare per OGGETTI
Algoritmi e Strutture Dati
Ordinamento in tempo lineare
Ricorsione 16/01/2019 package.
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Astrazione e Concretizzazione
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
esercizi alberi binari
Automi e stringhe Lezione n°24 Prof.ssa Rossella Petreschi
APPUNTI SUL LINGUAGGIO C
L’algoritmo MergeSort
* 07/16/96 Sez. 2: Ordinamento La consultazione di banche dati è sempre più cruciale in tutte le applicazioni dell’Informatica. Se vogliamo consultare.
Corso di Informatica 2 a.a. 2003/04 Lezione 2
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
MergeSort Usa la tecnica del divide et impera:
concetti ed applicazioni
Algoritmi e Strutture Dati
Process synchronization
Ricerca 01/08/2019 package.
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Algoritmi di ordinamento
Corso di Fondamenti di Informatica
Transcript della presentazione:

Algoritmo InsertionSort Per ordinare un vettore di n elementi ordiniamo il vettore dei primi n-1 elementi inseriamo l’ultimo elemento nella posizione giusta Base della ricorsione: ordinare un vettore di n = 1 elemento Passo ricorsivo: isolare l’ultimo elemento a del vettore ordinare un sottovettore di n-1 elementi inserire l’elemento a nel sottovettore ordinato Non ha chiamata ricorsiva terminale, ma si riesce lo stesso a non usare esplicitamente la pila, perche’ è il vettore stesso che fa da pila. Print_rev richiedeva una pila, per metterci gli oggetti uno dopo l’altro, dal primo all’ultimo e poi processarli in ordine inverso. Nell nostro caso, dovremmo mettere uno dopo l’altro gli elementi da A[n] ad A[2] e poi processarli in ordine inverso. Di qui il ciclo con j che va da 2 a n.

InsertionSort (A,s,d) If (s < d) then {esegui InsertionSort sui primi n-1 elementi} InsertionSort (A,s,d-1); {aggiungi l’ultimo elemento nella posizione corretta} AddSorted (A[d],A,s,d-1);

La chiamata ricorsiva non è terminale! Per eliminare la ricorsione, occorre una pila esplicita InsertionSort (n,A[1,…,n]) stack = s_create() For j = d downto s+1 do {poni via via i dati sulla pila} stack = s_push(stack,A[j]) For j = s+1 to d do x = s_top(stack) {estrai via via i dati dalla pila} AddSorted(x,A,s,j-1) {operazione terminale} stack = s_pop(stack) s_destroy(stack) Far notare che si puo’ usare A come pila, e quindi non crearla, non distruggerla e non riempirla

Ma si può usare la parte finale del vettore come una pila InsertionSort (n,A[1,…,n]) stack = s_create() For j = d downto s+1 do {poni via via i dati sulla pila} stack = s_push(stack,A[j]) For j = s+1 to d do x = s_top(stack) {estrai via via i dati dalla pila}; AddSorted(x,A,s,j-1) {operazione terminale} stack = s_pop(stack) s_destroy(stack) A[j];

Algoritmo SelectSort Per ordinare un vettore di n elementi estraiamo fisicamente l’elemento massimo ordiniamo il vettore residuo accodiamo l’elemento estratto al vettore ordinato Base della ricorsione: ordinare un vettore di n = 1 elemento Passo ricorsivo: estrarre fisicamente l’elemento massimo da un vettore non ordinato scorrere tutti gli elementi, determinando il massimo estrarre l’elemento massimo e ricompattare il vettore

Versione ricorsiva SelectSort (A,s,d) If (s < d) then x = ExtractMax(A,s,d) SelectSort (A,s,d-1) Append(x,A,d)

Versione iterativa La chiamata ricorsiva è terminale Ma applichiamo comunque la soluzione con pila ausiliaria SelectSort (A,s,d) stack = s_create() For j = d downto s+1 do {poni via via i dati sulla pila} x = ExtractMax(A,s,j) stack = s_push(stack,x) For j = s+1 to d do x = s_top(stack) {estrai via via i dati dalla pila} Append(x,A,s,j-1) {operazione terminale} stack = s_pop(stack) s_destroy(stack)

Implementazione efficiente Anche qui si può usare la parte finale del vettore come una pila SelectSort (A,s,d) stack = s_create() For j = d downto s+1 do {poni via via i dati sulla pila} x = ExtractMax(A,s,j) stack = s_push(stack,x) For j = s+1 to d do x = s_top(stack) {estrai via via i dati dalla pila} Append(x,A,s,j-1) {operazione terminale} stack = s_pop(stack) s_destroy(stack) SelectSort(n,A) For j = d downto s+1 do {estrai il massimo e mettilo in coda} j_ max = FindMax(A,s,j) Scambia(A[j_max],A[j]);

SelectSort j_max j 1 n disordinati ordinati Scandisce la sequenza dall’ultimo elemento al primo Ad ogni iterazione (ExtractMax) cerca l’elemento massimo A[j_max] nella sottosequenza corrente A[1,…,j] scambia l’ultimo elemento con quello massimo (facendo uscire l’elemento massimo dalla sequenza e ricompattandola) j_max j 1 n disordinati ordinati Complessità O(n2) in ogni caso (anche in quello migliore)