Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGioconda De stefano Modificato 11 anni fa
1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Ordinamenti lineari (per dati di input con proprietà particolari)
2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 2 Un semplice esempio Supponiamo che gli n elementi da ordinare siano tutti appartenenti allintervallo [1,n] In quanto tempo possiamo ordinarli? O(n) Contraddice il lower bound? No, perché non è un algoritmo basato su confronti!
3
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 3 IntegerSort: fase 1 Per ordinare n interi con valori in [1,k] Mantiene un array Y di k contatori tale che Y[x] = numero di volte che il valore x compare nellarray di input X
4
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 4 IntegerSort: fase 2 Scorre Y da sinistra verso destra e, se Y[x]=k, scrive in X il valore x per k volte
5
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 5 IntegerSort (X, k) 1. Sia Y un array di dimensione k 2. for i=1 to k do Y[i]=0 3. for i=1 to n do incrementa Y[X[i]] 4. j=1 5. for i=1 to k do 6. while (Y[i] > 0) do 7. X[j]=i 8. incrementa j 9. decrementa Y[i]
6
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 6 Tempo O(k) per inizializzare Y a 0 Tempo O(n) per calcolare i valori dei contatori Tempo O(n+k) per ricostruire X IntegerSort: analisi O(n+k) Tempo lineare se k=O(n)
7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 7 BucketSort Per ordinare n record con chiavi intere in [1,k] Basta mantenere un array di liste, anziché di contatori, ed operare come per IntegerSort La lista Y[x] conterrà gli elementi con chiave uguale a x Concatenare poi le liste Tempo O(n+k) come per IntegerSort
8
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 8 BucketSort (X, k) 1. Sia Y un array di dimensione k 2. for i=1 to k do Y[i]=lista vuota 3. for i=1 to n do 4. if (chiave(X[i]) [1,k] ) then errore 5. else appendi il record X[i] alla lista Y[chiave(X[i])] 6. for i=1 to k do 7. copia ordinatamente in X gli elemeti della lista Y[i]
9
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 9 Un algoritmo è stabile se preserva lordine iniziale tra elementi con la stessa chiave domanda: il BucketSort è stabile? Il BucketSort può essere reso stabile appendendo gli elementi di X in coda alla opportuna lista Y[i] Stabilità
10
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 10 Cosa fare se il massimo valore k=ω(n), ad esempio se k = (n c )? Rappresentiamo gli elementi in base b, ed eseguiamo una serie di BucketSort Partiamo dalla cifra meno significativa verso quella più significativa RadixSort 2397 4368 5924 2397 4368 5924 4368 2397 4368 2397 5924 2397 4368 5924 Per b=10
11
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 11 Se x e y hanno una diversa t-esima cifra, la t-esima passata di BucketSort li ordina Se x e y hanno la stessa t-esima cifra, la proprietà di stabilità del BucketSort li mantiene ordinati correttamente Correttezza Dopo la t-esima passata di BucketSort, i numeri sono correttamente ordinati rispetto alle t cifre meno significative
12
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 12 O(log b k) passate di bucketsort Ciascuna passata richiede tempo O(n+b) Tempo di esecuzione O( (n+b) log b k) Se b = (n), si ha O(n log n k) = O n log k log n Tempo lineare se k=O(n c ), c costante
13
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 13 Nuove tecniche: –Divide et impera (MergeSort, QuickSort) –Randomizzazione (QuickSort) –Strutture dati efficienti (HeapSort) Proprietà particolari dei dati in ingresso possono aiutare a progettare algoritmi più efficienti: algoritmi lineari Alberi di decisione per la dimostrazione di delimitazioni inferiori Riepilogo
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.