• Non ci sono risultati.

Algoritmi 2 (A.A. 2005/2006) Esercitazione 2

N/A
N/A
Protected

Academic year: 2021

Condividi "Algoritmi 2 (A.A. 2005/2006) Esercitazione 2"

Copied!
2
0
0

Testo completo

(1)

Algoritmi 2 (A.A. 2005/2006) Esercitazione 2

Irene Finocchi

§

April 21, 2006

1 Mediano di due array ordinati

Siano X ed Y due array ordinati, ciascuno di n elementi. Progettare un algoritmo basato sulla tecnica del divide et impera per trovare il mediano dei 2n elementi in tempo O(log n).

Osserviamo che il mediano di X ed Y `e l’elemento che occuperebbe la posizione n se i 2n elementi fossero tutti ordinati: avrebbe pertanto n elementi pi`u grandi ed n − 1 elementi pi`u piccoli. Siano mx e my i mediani di X e Y , rispettivamente: entrambi possono essere ottenuti in tempo O(1), essendo X e Y ordinati. Siano X1 la met`a inferiore di X (escluso mx), e X2 la met`a superiore di X (escluso mx). Definiamo analogamente Y1 e Y2.

L’algoritmo confronta mx con my ed effettua una opportuna chiamata ricorsiva. Se mx < my, restituisce il mediano di:

• X2 e Y1∪ {my}, se n `e pari;

• X2∪ {mx} e Y1∪ {my}, se n `e dispari;

Si pu`o dimostrare per contraddizione che il mediano di X e Y non pu`o appartenere alle porzioni di array “scartate” tramite un semplice conteggio di elementi. Infatti:

• Sia n pari. Se il mediano fosse in X1∪ {mx}, avrebbe n/2 + 1 + n/2 = n + 1 elementi pi`u grandi. Se il mediano fosse in Y2, avrebbe n/2 + n/2 = n elementi pi`u piccoli.

• Sia n dispari. Se il mediano fosse in X1, avrebbe 1 + (n − 1)/2 + 1 + (n − 1)/2 = n + 1 elementi pi`u grandi. Se il mediano fosse in Y2, avrebbe 1 + (n − 1)/2 + 1 + (n − 1)/2 = n + 1 elementi pi`u piccoli.

§Dipartimento di Informatica, Universit`a degli Studi di Roma “La Sapienza”, Via Salaria 113, 00198 Rome, Italy. E-mail: {finocchi}@di.uniroma1.it.

1

(2)

Il caso mx > my`e completamente simmetrico. Se infine mx = my, allora quello `e il mediano cercato e l’algoritmo pu`o terminare.

Ad ogni passo, la dimensione degli array su cui si effettua la chiamata ricorsiva viene (approssimativamente) dimezzata spendendo tempo costante, da cui la relazione di ricor- renza che descrive il tempo di esecuzione dell’algoritmo `e T (n) = T (n/2) + O(1). La soluzione `e T (n) = Θ(log n), come segue facilmente dal Teorema Master.

2 Punto fisso

Data una sequenza ordinata di n interi distinti, sia positivi che negativi, a1 < a2 < . . . < an, un punto fisso `e un indice i tale che ai = i. Progettare un algoritmo che risolve il problema della ricerca di un punto fisso in tempo O(log n).

E sufficiente simulare la ricerca binaria, distinguendo i seguenti tre casi:`

• Se an/2 = n/2 restituisci true

• Se an/2 < n/2 prosegui a destra, ovvero sugli elementi an/2+1. . . an. Poich´e gli ele- menti sono tutti distinti, an/2−1≤ an/2− 1 < n/2 − 1. Proseguendo in questo modo, si pu`o dimostrare facilmente che ai < i per ogni i < n/2.

• Se an/2 > n/2 prosegui a sinistra, ovvero sugli elementi a1. . . an/2−1. Poich´e gli elementi sono tutti distinti, an/2+1 ≥ an/2 + 1 > n/2 + 1. Proseguendo in questo modo, si pu`o dimostrare facilmente che ai > i per ogni i > n/2.

3 Moltiplicazione di interi di grandezza arbitraria

L’esercizio `e svolto nel paragrafo 10.1 del libro “Algoritmi e Strutture Dati”, autori: Deme- trescu, Finocchi e Italiano, casa editrice: McGraw-Hill.

2

Riferimenti

Documenti correlati

• Problemi polinomiali non deterministici = problemi risolvibili in tempo polinomiale da un algoritmo non deterministico, ma per i quali non è ancora stata trovata una.

• Problemi polinomiali non deterministici = problemi risolvibili in tempo polinomiale da un algoritmo non deterministico, ma per i quali non è ancora stata trovata una.

Scrivere la funzione ricorsiva printGreaterKeys(u, a) che, data la radice u di un BST, un valore a di chiave, stampa in ordine tutte le chiavi dell’albero maggiori della chiave

È evidente come possa essere facilmente realizzata una soluzione algoritmicamente molto più elegante: listareverse2.pas: in questo caso l’inserimento invece che avvenire in coda

Utilizzando le pile, si scrivano tre procedure Pascal iterative di complessità ottima per effettuare, rispettivamente, le visite anticipata, differita e simmetrica di un albero

Si progettino un algoritmo euristico di tipo greedy ed uno di ricerca locale per risolvere il problema della BISEZIONE in forma di ottimizzazione: “Dato un grafo non orientato G =

Si scriva una procedura Pascal, basata sulla ricerca binaria, per individuare in tempo O(log n) l’unico intero dell’intervallo 1..n+1 che non compare in V.... Si scriva

Sapendo che l’ammontare totale del bottino M `e divisibile per tre, descrivere un algoritmo che verifichi se `e possibile spartire gli n oggetti in parti di ugual valore e, in