Buongiorno, sto preparando in questo periodo l'esame di algoritmi. Non avendo potuto seguire a causa di alcuni problemi di salute mi trovo in una situazione particolare. Ho una buona preparazione a livello teorico fra appunti di alcuni colleghi e compagni ma non ho alcuna dispensa a livello di esame scritto. Allego una traccia d'esame nello spoiler.
La parte scritta deve essere fatta interamente in Java, vi vorrei chiedere se potreste indirizzarmi sulle parti da studiare e se avete qualche dispensa ve ne sarei grato. Ho allegato l'esame solo per potervi far capire una traccia d'esame.
Un’agenzia governativa sanitaria vuole realizzare un sistema che permetta di studiare la possibile diffusione di una malattia contagiosa in un insieme di persone sotto osservazione. Il contagio può avvenire solo in presenza di contatti diretti tra le persone e, per via dell’incubazione, anche persone apparentemente sane possono contagiare altre persone. Le persone sono individuate univocamente dal loro codice fiscale, e sono caratterizzate da nome, cognome, età, genere, anamnesi. L’anamnesi di una persona è una lista di patologie che si sono presentate nel passato nella storia di questa. Il sistema deve rappresentare i contatti diretti che sono avvenuti tra le persone distinguendo se vi è stato un unico contatto, molteplici contatti o nessuno.
Si rappresenti la situazione sopra descritta, supposta a regime (il candidato non si deve occupare quindi dell’inizializzazione). Il candidato deve, inoltre, implementare i seguenti metodi e valutarne la complessità computazionale:
1) metodo m1 (inserisci contatto), che riceve due persone e incrementa di uno il numero di contatti diretti avvenuti tra queste persone.
2) metodo m2 (possibile contagio), che riceve due persone A e B e restituisce vero se è possibile che, anche per via indiretta e cioè attraverso altre persone, è possibile che B sia stata contagiata da A (supposta affetta dalla malattia).
3) metodo m3 (contatti diretti) che riceve una persona A e il nome di una patologia P e restituisce la lista delle persone che hanno avuto contatti diretti con A e che hanno P nella loro anamnesi.
4) metodo m4 (max_contatti_multipli) che riceve due persone A e B e restituisce una sequenza di persone che costituiscono un percorso di contatti diretti tra A e B che massimizzi i contatti molteplici. Per esempio, se tra A e B esistono solo due percorsi, il primo costituito da <A,C,B> il secondo da <A,D,B>, e si suppone che tra A e C, tra C e B e tra D e B ci sia stato un unico contatto, mentre tra A e D ci sono stati molteplici contatti, allora il metodo dovrebbe restituire il percorso <A,D,B> che include 1 contatto multiplo mentre il percorso <A,C,B> non ne include alcuno.
Si rappresenti la situazione sopra descritta, supposta a regime (il candidato non si deve occupare quindi dell’inizializzazione). Il candidato deve, inoltre, implementare i seguenti metodi e valutarne la complessità computazionale:
1) metodo m1 (inserisci contatto), che riceve due persone e incrementa di uno il numero di contatti diretti avvenuti tra queste persone.
2) metodo m2 (possibile contagio), che riceve due persone A e B e restituisce vero se è possibile che, anche per via indiretta e cioè attraverso altre persone, è possibile che B sia stata contagiata da A (supposta affetta dalla malattia).
3) metodo m3 (contatti diretti) che riceve una persona A e il nome di una patologia P e restituisce la lista delle persone che hanno avuto contatti diretti con A e che hanno P nella loro anamnesi.
4) metodo m4 (max_contatti_multipli) che riceve due persone A e B e restituisce una sequenza di persone che costituiscono un percorso di contatti diretti tra A e B che massimizzi i contatti molteplici. Per esempio, se tra A e B esistono solo due percorsi, il primo costituito da <A,C,B> il secondo da <A,D,B>, e si suppone che tra A e C, tra C e B e tra D e B ci sia stato un unico contatto, mentre tra A e D ci sono stati molteplici contatti, allora il metodo dovrebbe restituire il percorso <A,D,B> che include 1 contatto multiplo mentre il percorso <A,C,B> non ne include alcuno.
La parte scritta deve essere fatta interamente in Java, vi vorrei chiedere se potreste indirizzarmi sulle parti da studiare e se avete qualche dispensa ve ne sarei grato. Ho allegato l'esame solo per potervi far capire una traccia d'esame.