I probema Laboratorio di Agoritmi e Strutture Dati Docente: V. Lonati Progetto Percorsi vaido per gi appei di giugno e ugio 2016 Obiettivo de progetto è o studio di percorsi tra punti de piano. I piano è definito da insieme dei punti x, y tai che x e y sono numeri interi; ad ogni punto P è associato un vaore, denotato con V ap. Tramite afabeto {N, E, S, W } si definiscono degi spostamenti. P = x, y spostandosi in direzione d {N, E, S, W } se: P = x, y + 1 per d = N spostamento verso Nord; P = x + 1, y per d = E spostamento verso Est; P = x, y 1 per d = S spostamento verso Sud; P = x 1, y per d = W spostamento verso Ovest. Da punto P si raggiunge i punto Un percorso P è una sequenza di punti P 0,..., P n tai che se P k = x k, y k i k-esimo punto dea sequenza con 0 k < n aora P k+1 è i punto ottenuto da P k spostandosi in una dee quattro direzioni possibii. Una mappa M è descritta da nome, origine e specifica. - I nome di M è una stringa di unghezza arbitraria costruita su afabeto A dei caratteri afanumerici. - La specifica di M è una stringa finita di unghezza arbiraria costruita su afabeto {N, E, S, W }, che permette di determinare i punti costituenti i percorso. - L origine di M è un punto de piano che denota i punto di partenza de percorso descritto daa mappa. Scriviamo M = w, α, P per specificare che a mappa M ha nome w, specifica α e origine P. Supponiamo che a specifica α di M sia a stringa s 1 s 2... s n ; i percorso di M, denotato con πm, è a sequenza di punti P 0,..., P n tai che: - P 0 coincide con origine P di M. - Sia P k = x k, y k i k-esimo punto dea sequenza con 0 k < n. Aora P k+1 è i punto ottenuto da P k spostandosi in direzione s k+1. Chiamiamo P n a destinazione dea mappa M. Si noti che, dato un percorso σ = P 0,..., P n, a specifica α che produce a sequenza σ a partire da origine P 0 è univocamente determinata. 1
Data una stringa β finita su afabeto {N, E, S, W }, diciamo che una mappa M = w, α, P ha direzione β se β è un prefisso di α ossia, α = β γ, dove a stringa γ può essere vuota. I vaore V am di una mappa M è dato da vaore dea destinazione di M. La riduzione di una mappa consiste ne eiminare da suo percorso i cici. Un cico sempice di origine P è una sequenza di punti δ = P, P 1..., P m, P m+1 tae che P = P m+1 e, per ogni 1 k m, P P k. L operazione di riduzione di una sequenza di punti σ = P 0,..., P n avviene eiminando tutti i cici sempici in σ secondo a seguente procedura: Sia P i punto di indice minimo tae che P è origine di un cico sempice δ; a sequenza σ può essere scritta come a concatenazione dee sequenze σ 1 δ σ 2, dove σ 1 e σ 2 sono univocamente determinate e possono essere vuote. L eiminazione di δ da σ produce a sequenza σ = σ 1 P σ 2. La procedura va riappicata fino aa eiminazione di tutti i cici sempici; si noti che a sequenza finae è univocamente determinata. La riduzione di una mappa M = w, α, P è data daa mappa M r = w, α r, P avente stesso nome e origine di M e tae che πm r è a riduzione di πm. Si osservi che a riduzione M r di una mappa M può produrre una specifica descritta daa stringa vuota. In ta caso πm r è costituito da un soo punto. Esempio Sia M = mappa1, EEENNW W SSSEENNEE, 1, 2 una mappa. I percorso πm è a sequenza di punti 1, 2, 2, 2, 3, 2, 4, 2, 4, 3, 4, 4, 3, 4, 2, 4, 2, 3, 2, 2, 2, 1, 3, 1, 4, 1, 4, 2, 4, 3, 5, 3, 6, 3. Ne percorso πm sono presenti tre cici sempici, a cui origine è nei punti P 1 = 2, 2, P 3 = 4, 2, P 4 = 4, 3. Secondo e specifiche de processo di riduzione, i cico da eiminare è queo a cui origine è in P 1. L eiminazione di questo cico produce a sequenza: 1, 2, 2, 2, 2, 1, 3, 1, 4, 1, 4, 2, 4, 3, 5, 3, 6, 3. 2
Quest utima sequenza non contiene cici, per cui i processo di riduzione termina. La riduzione M r di M è a mappa M r = mappa1, ESEENNEE, 1, 2. Si richiede di progettare una struttura dati efficiente che permetta di eseguire e operazioni seguenti si tenga presente che a minima porzione rettangoare di piano contenente tutti i percorsi specificati da mappe può essere moto grande rispetto a numero di mappe presenti ne piano, quindi non è sicuramente efficiente rappresentare i piano mediante una matrice. - crea n Crea un nuovo piano, eiminando tutte e mappe e ponendo i vaore di tutti i punti uguae a n. - vaore x, y, n Pone i vaore de punto x, y uguae a n. - mappa w, x, y, α Introduce a mappa w, α, x, y. Se esiste una mappa M di nome w, M viene eiminata. - direzione β Stampa i nomi di tutte e mappe di direzione β. Ogni nome va stampato su una nuova riga. L ordine in cui i nomi vengono stampati non è rievante. - riduci w Sostituisce a mappa di nome w con a sua riduzione. Se non esiste acuna mappa di nome w non esegue acuna operazione. - usa β Considera tutte e mappe di direzione β e ne eimina una quaunque fra quee di vaore massimo, ponendo i vaore dea sua destinazione uguae a 0. - stampa w Stampa su una nuova inea origine e a specifica dea mappa di nome w secondo i formato specificato nea prossima sezione. Se non esiste acuna mappa di nome w non esegue acuna operazione. - ista Stampa tutti e mappe esistenti secondo i formato specificato nea prossima sezione. Si noti che e operazioni richieste sono iberamente impementabii; in particoare, non vanno necessariamente intese come prototipi di funzioni. Specifiche di progettazione Si deve progettare un programma che sia in grado di gestire i dati reativi ai percorsi specificati da mappe. Non devono essere presenti vincoi su numero di punti e di spostamenti, se non quei determinati da tipo di dato intero. La progettazione deve prevedere a sceta dee strutture dati da usare per rappresentare i dati e gi agoritmi da appicare per poter eseguire in maniera efficiente e operazioni descritte sopra. Non basta imitarsi a riferimenti generici ae tecniche agoritmiche utiizzate es: operazione X si risove con 3
un agoritmo greedy ma è necessario dettagiare e procedure da utiizzare, tramite pseudocodice o direttamente in inguaggio C, eventuamente facendo riferimento aa etteratura sugi agoritmi citati. In particoare si richiede di anaizzare, in funzione dee scete di progettazione fatte, quae risuta essere i costo dee diverse operazioni richieste daa specifica. Si richiede inotre di fornire una rassegna esauriente di esempi che potrebbero essere usati per testare i programma e che mettono in evidenza particoari caratteristiche de suo funzionamento non soo casi tipici di input, ma anche casi imite e/o situazioni patoogiche, oppure input che evidenzino a differenza di prestazioni tra e souzioni progettuai scete e atre più sempicistiche. Non si richiede un impementazione competa de progetto; è necessario però fornire ossatura de programma eventuamente suddiviso su più fie contenente in particoare: e definizioni dei tipi fondamentai, i prototipi dee funzioni che reaizzano e operazioni specificate nea traccia, e tutte e porzioni di codice utii ad iustrarne i oro funzionamento e uso. Facotativamente, è possibie consegnare un impementazione competa e funzionante de progetto o di acune sue parti. In questo caso, si deve fare riferimento ae specifiche di impementazione descritte nea sezione successiva. Specifiche di impementazione I programma deve eggere dao standard input stdin una sequenza di inee separate da \n, ciascuna dee quai corrisponde a una inea dea prima coonna dea Tabea 1, dove x, y e n sono interi, w è una stringa non vuota su afabeto A e α è una stringa non vuota su afabeto {N, E, S, W }. I vari eementi sua inea sono separati da uno o più spazi. Quando una inea è etta, viene eseguita operazione associata; e operazioni di stampa sono effettuate suo standard output stdout, e ogni operazione deve iniziare su una nuova inea. Linea di input c n Operazione crea n v x y n vaore x, y, n m w x y α mappa w, x, y, α d α r w u α s w direzione α riduci w usa α stampa w ista f Termina esecuzione de programma Tabea 1: Specifiche de programma 4
Note 1. Non devono essere presenti vincoi sua dimensione de piano, su numero di percorsi e mappe, sue unghezze dei percorsi se non quei determinati da tipo di dato intero. Non si richiede anzi si sconsigia uso di grafica, se non per test personai: in modo particoare, non si usi conio.h e neppure crscr. 2. Per sempicità si suppone che input sia sempre conforme ae specifiche di Tabea 1, per cui non è necessario controare a correttezza de input. Per eggere input si usino e funzioni standard ANSI C getchar e/o scanf. 3. Sia w, α, P una mappa, dove P = x, y e α = s 1... s k. L output di s w va visuaizzato ne seguente formato: w x y s1...sk 4. Siano M 1 = w 1, α 1, P 1,..., M n = w n, α n, P n tutte e mappe esistenti ne piano. L output de comando è M1... Mn Esempio dove ciascuna mappa va stampata secondo i formato de punto precedente. L ordine in cui e mappe vengono eencate non è rievante. Si supponga che e inee di input siano: c 10 v 2 3 25 v 3 4 20 v 4 5 40 m prima 1 0 NWWSEENESSWNNNEN m seconda 2 1 NNEEEESSWWNNNEEESSWWWWNN m m d NNE u NNE m seconda2 2 1 NNEEEESSWWNNNEEESSWWWWNN r prima r seconda2 d NNE u NNE 5
s terza r terza s terza c 100 m mappa1-10 2 EEENNWWSEENWWSEEEE m mappa2-2 2 EEEENWSSEENNWWWWSW m mappa3 3 5 EENEEENNWWSSSEEESSWWNNNEE m mappa4 3-4 ENNEESSWWSSESWNENNWN d W d EEEE d EEE v -5 3 50 v 9 6 70 v 4-3 90 r mappa1 s mappa1 r mappa2 s mappa2 r mappa3 s mappa3 r mappa4 s mappa4 u E f L output prodotto da programma deve essere: prima 1 0 NWWSEENESSWNNNEN seconda 2 1 NNEEEESSWWNNNEEESSWWWWNN prima 1 0 NWWSEENESSWNNNEN seconda 2 1 NNEEEESSWWNNNEEESSWWWWNN seconda terza prima 1 0 NNEN seconda2 2 1 NNEN prima terza seconda2 6
seconda2 2 1 NNEN terza 1 2 terza 1 2 seconda2 2 1 NNEN mappa2 mappa1 mappa2 mappa1-10 2 EEENEE mappa2-2 2 mappa3 3 5 EENESENEE mappa4 3-4 EN mappa1-10 2 EEENEE mappa2-2 2 mappa3 3 5 EENESENEE Modaità di consegna La presente traccia è vaida per gi appei di giugno e ugio 2016. La reazione non meno di 3, non più di 10 pagine in formato pdf va consegnata entro i giorno 8 ugio 2016 tramite i sistema di upoad de Dipartimento, a ur https://upoad.di.unimi.it/?id=1270 Agoritmi e strutture dati - Progetto ugio 2016. Per cooro che intendono sostenere a prova orae ne appeo di giugno, a scadenza è anticipata a 24 giugno 2016 e a reazione deve essere consegnata a ur https://upoad.di.unimi.it/?id=1269 Agoritmi e strutture dati - Progetto giugno 2016. La reazione e gi atri fie aggiuntivi fie sorgenti C, esempi di input, ecc devono essere contenuti in un unico archivio.zip. In generae non è prevista una discussione orae dei progetti, ma in acuni casi potranno essere richiesti dei chiarimenti via mai o da vivo previa convocazione a autore dea reazione. La reaizzazione de progetto è una prova d esame da svogersi individuamente. I progetti giudicati frutto di copiatura saranno estromessi d ufficio daa vautazione. La versione aggiornata de progetto è pubbicata in.pdf su sito: http://onati.di.unimi.it/ago/. Si consigia di consutare periodicamente questo sito per eventuai correzioni e/o precisazioni reative a testo de progetto. Per ogni uteriore chiarimento potete chiedere un appuntamento scrivendo una mai a indirizzo onati@di.unimi.it. 7