Algoritmi e strutture dati Camil Demetrescu Irene Finocchi

  • Slides: 18
Download presentation
Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ordinamenti lineari (per

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ordinamenti lineari (per dati di input con proprietà particolari) Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Un semplice esempio

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Un semplice esempio • Supponiamo che gli n elementi da ordinare siano tutti appartenenti all’intervallo [1, n] • In quanto tempo possiamo ordinarli? • O(n) • Contraddice il lower bound? • No, perché non è un algoritmo basato su confronti! Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort: fase

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort: 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 nell’array di input X Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort: fase

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort: fase 2 Scorre Y da sinistra verso destra e, se Y[x]=k, scrive in X il valore x per k volte Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort (X,

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort (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] Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort: analisi

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Integer. Sort: analisi • Tempo O(k) per inizializzare Y a 0 • Tempo O(n) per calcolare i valori dei contatori • Tempo O(n+k) per ricostruire X O(n+k) Tempo lineare se k=O(n) Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Bucket. Sort Per

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Bucket. Sort Per ordinare n record con chiavi intere in [1, k] • Esempio: ordinare n record con campi: – nome, cognome, anno di nascita, matricola, … • si potrebbe voler ordinare per matricola o per anno di nascita Input del problema: • n record mantenuti in un array • ogni elemento dell’array è un record con – campo chiave (rispetto al quale ordinare) – altri campi associati alla chiave (informazione satellite) Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Bucket. Sort •

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Bucket. Sort • Basta mantenere un array di liste, anziché di contatori, ed operare come per Integer. Sort • La lista Y[x] conterrà gli elementi con chiave uguale a x • Concatenare poi le liste Tempo O(n+k) come per Integer. Sort Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano esempio Y X

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano esempio Y X 1 chiave info satellite 1 2 3 4 5 5 1 6 8 6 X (ordinato) 1| 2 / chiave info satellite 3 / 1 4 / 2 5 5| 6 6| 7 / 8 3 6| 4 5 1 5 6 6 8 8| Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Bucket. Sort (X,

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Bucket. Sort (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. 7. for i=1 to k do copia ordinatamente in X gli elemeti della lista Y[i] Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Stabilità • Un

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Stabilità • Un algoritmo è stabile se preserva l’ordine iniziale tra elementi con la stessa chiave • domanda: il Bucket. Sort è stabile? • Il Bucket. Sort può essere reso stabile appendendo gli elementi di X in coda alla opportuna lista Y[i] Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Problema 4. 10

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Problema 4. 10 Descrivere un algoritmo che, dati n interi in [1, k], processa la sequenza in modo da poter poi rispondere a interrogazioni del tipo: “quanti interi cadono nell’intervallo [a, b]? ”, per ogni a e b in tempo O(1). L’algoritmo deve richiedere tempo di preprocessamento O(n + k). Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Soluzione Problema 4.

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Soluzione Problema 4. 10 Idea: Costruire in tempo O(n+k) un array Y di dimensione k dove Y[i] è il numero di elementi di X che sono i Costruisci. Oracolo (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. for i=2 to k do Y[i]=Y[i]+Y[i-1] 5. return Y Interroga. Oracolo (Y, k, a, b) 1. if b > k then b=k 2. if a 1 then return Y[b] 3. else return (Y[b]Y[a-1]) Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Radix. Sort •

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Radix. Sort • Cosa fare se il massimo valore k=ω(n), ad esempio se k = (nc)? • Rappresentiamo gli elementi in base b, ed eseguiamo una serie di Bucket. Sort • Partiamo dalla cifra meno significativa verso quella più significativa Per b=10 2397 4368 5924 4368 2397 5924 2397 4368 5924 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Correttezza • Se

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Correttezza • Se x e y hanno una diversa t-esima cifra, la t -esima passata di Bucket. Sort li ordina • Se x e y hanno la stessa t-esima cifra, la proprietà di stabilità del Bucket. Sort li mantiene ordinati correttamente Dopo la t-esima passata di Bucket. Sort, i numeri sono correttamente ordinati rispetto alle t cifre meno significative Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Tempo di esecuzione

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Tempo di esecuzione • O(logb k) passate di bucketsort • Ciascuna passata richiede tempo O(n+b) log 2 k = lognk log 2 n O( (n+b) logb k) log k Se b = (n), si ha O(n logn k) = O n log n Tempo lineare se k=O(nc), c costante Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano esempio • Si

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano esempio • Si supponga di voler ordinare 106 numeri da 32 bit • Come scelgo la base b? • 106 è comepreso fra 219 e 220 • Scegliendo b=216 si ha: – sono sufficienti 2 passate di bucket. Sort – ogni passata richiede tempo lineare Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Riepilogo • Nuove

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Riepilogo • Nuove tecniche: – Divide et impera (Merge. Sort, Quick. Sort) – Randomizzazione (Quick. Sort) – Strutture dati efficienti (Heap. Sort) • Proprietà particolari dei dati in ingresso possono aiutare a progettare algoritmi più efficienti: algoritmi lineari • Alberi di decisione per la dimostrazione di delimitazioni inferiori Copyright © 2004 - The Mc. Graw - Hill Companies, srl