Esercitazioni varie - Home di homes.di.unimi.it

Esercizi
Marco Anisetti
Labirinto
• Dato un labirinto generico senza alcuna restrizione, scrive un
algoritmo per percorrerlo trovando l’uscita.
• Mano sinistra o destra funziona se non ho incastri ciclici
• Ricorsione prevede di tentare ogni strada per ogni alternative ritornando
sempre sui propri passi smontando le scelte che non danno vantaggio
• Variante del così detto metodo di Ore che esplora a profondità successive.
• Permette anche di trovare la via più breve
• Algoritmo di Tremaux. Procede a caso, lascia briciole dove sei passato, non
passare mai più di 2 volte sullo stesso tratto. Privilegia gli inesplorati. Tende a
coprire tutto il labirinto 2 volte.
Esercizi
• Valutare la profilazione dell’algoritmo di Euclide nella esecuzione di
MCD(132,42)
• L'algoritmo A gira nel caso peggiore in un tempo pari a klogn, mentre
l'algoritmo B gira nel caso peggiore in un tempo pari a nlogk, cosa
possiamo affermare sui due algoritmi? Se B girasse nel caso peggiore
in un tempo pari a nk cosa si potrebbe dire?
• L'algoritmo A gira nel caso peggiore in un tempo pari a n2, mentre
l'algoritmo B gira nel caso peggiore in un tempo pari a 1000n, cosa
possiamo affermare sui due algoritmi? Se B girasse nel caso peggiore
in un tempo pari a logn cosa si potrebbe dire?
Problema dei secchi generalizzato
• E’ possibile generalizzare il problema dei secchi considerando un
secchio di capacità x e uno di capacità y, chiedendo di ottenere una
capacità z<x+y?
• Che assunzioni si debbono fare?
Eliminazione dei doppi non consecutivi
• Considerate il problema di eliminare doppi anche non consecutive
• Considerate di ricevere una cifra alla volta e di stamparla se non è mai
stata letta nel passato oppure non stamparla.
• Dare la soluzione più efficiente possibile usando solo tipi semplici e
istruzioni matematiche.
Esercizi
• Dire cosa fa il seguente programma
1: Leggi(a);
2: Leggi(b);
3: if (a<b) then goto 7
4: c:=a;
5: a:=b;
6: b:=c;
7: end;
• Calcolare in minimo comune multiplo tra 2 numeri a e b utilizzando i goto
• Scrivere un programma che riceva in ingresso un numero positivo N e determini il
massimo intero K tale che la somma dei primi K interi sia minore o uguale a N. Esempio,
se N=20 allora K risulta 5, infatti 1 + 2 + 3 + 4 + 5 = 15 mentre 1 + 2 + 3 + 4 + 5 + 6 = 21
• Data l’equazione ax+b=0 con a e b presi come input, scrivere il programma che calcola il
valore di x che risolve l’equazione, se esiste.