 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[progetto] Microcolture Clicca QUI per vedere il messaggio nel forum |
tandrea85 |
Originally posted by sasaciric
il trucco sta nel valutare il percorso se è valido non alla fine, ma durante la sua creazione. Se sto aggiungendo un punto che viola le condizioni, non costruisco tutto il cammino per vedere alla fine se è valido o meno ma mi blocco prima. così ne valuto molti meno e ottimizzo il tutto!
inoltre, anche valutando alla fine se è valido o meno, non sarebbe n! ma (n-1)! perchè quando tu scegli di partire da un elemento, non devi simulare di partire da tutti gli altri elementi perchè creeresti percorsi uguali. Es a 1,1 b 2,2 c 3,3
il percorso 1,1 2,2 3,3 1,1 è uguale a 2,2 3,3 1,1 2,2 quindi non serve testarlo 2 volte
allora io faccio cosi:
1- memorizzo le (n-1)! permutazioni
2- valuto ogni permutazione se è valida o meno
3- se è valida calcola la lunghezza del percorso, se no nn fa nulla e passa alla prox |
sasaciric |
sul punto 2 potresti ottimizzare ( invece di valutare se è giusto alla fine) : quando aggiungi un nuovo elemento dovresti controllare se viola le regole, così non stai a calcolartelo tutto (anche non valido) per scartarlo alla fine
pensa se hai 10 punti e il terzo che hai aggiunto al cammino viola le regole, eviti di calcolarti tutte le permutazioni dei sette punti restanti |
marcomaria |
Originally posted by sasaciric
l'unico modo per risolvere il problema del commesso viaggiatore è provare tutte le configurazioni possibili
si, attenzione che questo non e' TSP ma ci sono i vincoli che lo portano ad essere "problema del commesso viaggiatore bitonico e euclideo" (vedi qualche post precedente) risolvibile in O(n^2) |
mapenzi81 |
Originally posted by tandrea85
il mio con 20 punti l'ho fatto partire 10min fa e sta ancora andando :|
mi ha allocato 2gb di memoria e il processo per ora ne occupa 20mb e sta salendo!!
speriamo che testi il programma con al max 10 - 12 punti se no addio
quelli che ci hanno messo 5min o meno che algoritmo avete usato?
provate con questo input
code:
c
i -9 2 a
i -8 2 b
i -7 2 c
i -6 2 d
i -5 2 e
i -4 2 f
i -3 2 g
i -2 2 h
i -1 2 i
i -9 -2 l
i -8 -2 m
i -7 -2 n
i -6 -2 o
i -5 -2 p
i -4 -2 q
i -3 -2 r
i -2 -2 s
i -1 -2 t
i -10 1 u
i 0 0 v
s
C
il mio ci mette 0.015 ma a volta sbaglia....
com'è il vostro output?
24:
a,(-9,2) <- u,(-10,1) -> v,(0,0)
u,(-10,1) <- a,(-9,2) -> b,(-8,2)
a,(-9,2) <- b,(-8,2) -> c,(-7,2)
b,(-8,2) <- c,(-7,2) -> d,(-6,2)
c,(-7,2) <- d,(-6,2) -> e,(-5,2)
d,(-6,2) <- e,(-5,2) -> f,(-4,2)
e,(-5,2) <- f,(-4,2) -> g,(-3,2)
f,(-4,2) <- g,(-3,2) -> h,(-2,2)
g,(-3,2) <- h,(-2,2) -> i,(-1,2)
h,(-2,2) <- i,(-1,2) -> v,(0,0)
u,(-10,1) <- v,(0,0) -> i,(-1,2) |
mapenzi81 |
anche la relazione è da consegnare domenica? |
tandrea85 |
Originally posted by mapenzi81
il mio ci mette 0.015 ma a volta sbaglia....
com'è il vostro output?
24:
a,(-9,2) <- u,(-10,1) -> v,(0,0)
u,(-10,1) <- a,(-9,2) -> b,(-8,2)
a,(-9,2) <- b,(-8,2) -> c,(-7,2)
b,(-8,2) <- c,(-7,2) -> d,(-6,2)
c,(-7,2) <- d,(-6,2) -> e,(-5,2)
d,(-6,2) <- e,(-5,2) -> f,(-4,2)
e,(-5,2) <- f,(-4,2) -> g,(-3,2)
f,(-4,2) <- g,(-3,2) -> h,(-2,2)
g,(-3,2) <- h,(-2,2) -> i,(-1,2)
h,(-2,2) <- i,(-1,2) -> v,(0,0)
u,(-10,1) <- v,(0,0) -> i,(-1,2)
a me quest'output me lo da senza i punti da l a t.. e me lo esegue in 3 sec.. con l'output da 20 punti invece il processo sotto linux mi viene killato, occupa troppe risorse. |
karlost |
Ciao a tutti!
Sono riuscito a completare la funz. colonia() senza usare tecniche di grafi o TSP particolari, ho usato la geometria e una funz. del libro del Sedgewick Algoritmi in C che parla dei cammini chiusi semplici.
Il mio problema e' che i tempi di calcolo sono decenti, adesso non so se lo scopo del progetto fosse stato di usare qualche tecnica di grafi per la colonia...? o paura che la soluz. non sia quella che si aspetta il prof.
Di strutture ho usato 2 RB tree per memorizzare la Colonia(con chiave arctg ..trovate tutto sul libro del sedgewik) e i microorganismi (con chiave ascissa) e un BST per i microorganismo ordinati per nome
Per la funz. genera() devo cercare ancora un metodo, qlcuno l'ha gia' fatto e gentilmente puo darmi suggerimenti..?
In bocca al lupo a tutti.. |
mapenzi81 |
karlost se guardi qualche post insietro trovi tutto....
cmq
calcoli la funzione della retta e per ogni x compresa tra i due punti guardi se la y corrispondente è un intero...
:)
è normale che printf sotto linux aggiunga un carattere ^M ?? |
karlost |
Grazie 1000^n ....
^M a volte dipende dal terminale che usi, alcune shell tipo ksh o bash quando non sono in grado d'interpretare un tasto o una seq. di tasti ti restituiscono dei caratteri stranni.
O anche quando usi editor di testo non standard e poi tenti di aprire il file con un editor standard tipo VI alcuni caratteri che non è in grado d'interpretare te li rappresenta con ^M. |
Corrado M. |
nessuno di voi ha usato l'algoritmo Approx-TSP-Tour che viene spiegato in uno dei paragrafi del capitolo ALGORITMI APPROSSIMATI sul nostro libro?
io stavo implementando quello, poi leggendo qui mi sono venuti forti dubbi. |
mapenzi81 |
no...anche io ho optato per una soluzione geometrica...
risolto il ^M
modificando la funzione read_word ora funziona...
la cosa simpatica è che sotto Win.....
sto incominciando a capire il perchè sotto Win le applicazioni sono alquanto instabili... |
maynard80 |
panico, scusate!
fino ad ora ho provato sempre le funzioni senza l'input da tastiera, ho finito ,ma proprio adessoc he devo prendere input da tastiera ho un problema!
la mia funzione
code:
searchtree *insert(searchtree *p, char *nome, int x, int y)
inserisce nell'albero puntato da p gli elementi x, y ed il nome.
ho sempre inserito nome tramite un puntatore ad una variabile dichiarata:
code: char *nome="pincopallino"
e funziona
ma ora che prendo la variabile da
code: scanf("%d,%d,%s",&x,&y,&nome)
ad ogni inserimento tutti i nodi hanno l'ultimo nome inserito (puntano alla stessa variabile) ma non posso dichiarare in antcipo le variabili per ogni nodo in quanto non ne conosco il numero....
come avete fatto????! scusate so che è una cazzata, ma sono in panico!
PS: se qualcuno ha msn mi contatti |
mapenzi81 |
qualcuno ha voglia di fare un confronto su un test su 500 - 600 punti? |
maynard80 |
Originally posted by mapenzi81
qualcuno ha voglia di fare un confronto su un test su 500 - 600 punti?
mapenzi sei un grande! grazie.
PS sto pomeriggio faccio volentieri il test dei 600 punti. |
tandrea85 |
Originally posted by mapenzi81
qualcuno ha voglia di fare un confronto su un test su 500 - 600 punti?
pazzo :D io se supero gli 11 punti non va piu una bega :shock: |
mapenzi81 |
azzzzzzzzzzzzzzzz |
darkAntAreS |
Originally posted by mapenzi81
qualcuno ha voglia di fare un confronto su un test su 500 - 600 punti?
guarda, se mi dici come fare a dare un input di 500-600 punti senza scriverli tutti magari:D
cmq, se ti basta, il mio l'ho testato su 150 punti (circa), per la sola funzione colonia() (tempo O(n^2)), e il tempo è 0,024 secondi |
maynard80 |
ragazzi ma nella mail dobbiamo consegnare solo il codice giusto? la relazione entro domani in busta, vero? |
darkAntAreS |
codice sorgente E relazione...in più gli devi stampare la relazione e portargliela entro domani |
mapenzi81 |
domani il dipartimento è chiuso...la parte cartacea la si porta il 26 |
tandrea85 |
Consegna entro domenica 23 aprile (compresa)
Poiché il giorno 24 aprile il dipartimento è chiuso, è possibile consegnare la documentazione cartacea il giorno 26 aprile.
|
maynard80 |
code: 1. Inviare il codice del progetto per posta elettronica all'indirizzo fiorenti@dsi.unimi.it. La e-mail
deve avere come subject \Progetto di Cognome Nome", il le sorgente deve essere allegato alla
e-mail e deve chiamarsi cognome.c. Ad esempio, lo studente Mario Bianchi deve inviare una e-mail
avente cme subject Progetto di Bianchi Mario e allegare il le bianchi.c contenente il codice.
Nella e-mail e possibile segnalare le proprie preferenze per l'orale, come specicato sotto.
Nel caso il progetto sia suddiviso in piu le, va allegato un le cognome.zip (oppure cognome.tar),
contenente i le sorgente. In questo caso, i le devono rispettate le usuali convenzioni (ad esempio,
i le con susso .h devono contenere solo denizioni, i le con susso .c non vanno inclusi in altri
le).
2. Consegnare una copia stampata del codice e una sintetica relazione del progetto svolto. La relazione
deve illustrare e motivare le strutture dati e i principali algoritmi utilizzati, analizzandone anche
la complessita (il commento alle singole funzioni del programma va fatto all'interno del codice del
programma). Tale materiale va consegnata al dr. Fiorentini entro luned 24 aprile (compreso),
lasciandolo eventualmente nella sua casella postale presso il dipartimento in via Comelico (di anco
alla portineria). La relazione e il codice devono riportare il proprio nome, cognome e matricola.
mi pare che per mail bisognava mandare solo il codice, io ho fatto così. |
darkAntAreS |
le consegne di fiorentini e aguzzoli sono diverse, aguzzoli dice espressamente che vuole per mail anche la relazione, il tutto in un unico file .zip che deve avere la denominazione cognome.zip |
xeon |
Quindi si poteva risolvere in O(n^2)? Siete sicuri che dia sempre la soluzione migliore l'algoritmo bitonico euclideo? |
mapenzi81 |
io ho fatto una cappellata...me ne sono accorto ora....
funziona quasi sempre in n^2 o anche meno....
ma nn è attendibile...aimè |
karlost |
Ank'io ho lo stesso problema, mi sono accorto adesso che con alcuni input il mio prog. va in segmentation fault... azzz...
Cmq qualcuno sà il peso che il prog. ha nel voto finale.. ? |
mapenzi81 |
2 - 4 punti....ho letto su qualche post vecchio...
mi domando se ci ammette all'orale anche con il prog che nn funziona a dovere |
tandrea85 |
ma la relazione scritta dove bisogna dargliela? in via comelico nelle cassette della posta all'ingresso? |
darkAntAreS |
Originally posted by xeon
Quindi si poteva risolvere in O(n^2)? Siete sicuri che dia sempre la soluzione migliore l'algoritmo bitonico euclideo?
si per entrambe le domande |
maynard80 |
ma mi dite dove si trova questa soluzione sul libro?? |
darkAntAreS |
non c'è la soluzione, il libro dà come come compito questo algoritmo e indica anche un piccolo suggerimento...cmq è verso la fine del capitolo sulla programmazione dinamica
edit: ho postato nell'area filez il mio progetto, lì se vuoi c'è una possibile implementazione secondo i suggerimenti del libro e altre pillole trovate qua e là in rete |
maynard80 |
darkAntAreS sei un grande, il tuo progetto è fatto davvero bene, l'ho provato con un input di circa 500, il tuo ci mette 5 secondi, il mio 120!
ma tu sei con fiorentini o goldrake? |
darkAntAreS |
sono con goldwurm...cmq 120 secondi al posto che 5 non cambia molto, almeno per quanto riguarda Aguzzoli conta più che altro "l'originalità" del progetto e se capisce che non hai messo lì il primo algoritmo che ti è venuto in mente ma ci hai pensato...
per Fiorentini/Torelli non so, ma nn penso cambi molto |
maynard80 |
Originally posted by darkAntAreS
sono con goldwurm...cmq 120 secondi al posto che 5 non cambia molto, almeno per quanto riguarda Aguzzoli conta più che altro "l'originalità" del progetto e se capisce che non hai messo lì il primo algoritmo che ti è venuto in mente ma ci hai pensato...
per Fiorentini/Torelli non so, ma nn penso cambi molto
ma solitamente per Fiorentini la cosa che conta di più (visto che è il corso di algoritmi e strutture dati) è il tempo di esecuzione, visto che per ogni problema il numero delle soluzioni migliori è sempre limitato |
paolinux |
Ragazzi (Dott.House), qualcuno può postare nell'area filez l'input da 500 o giù di lì .. tanto per vedere come viaggia il mio? l'ho testato solo con pochi organismi e anche se ormai l'ho gia consegnato volevo avere un'idea del tempo di esecuzione ... |
maynard80 |
ragazzi, in teoria dopodomani iniziano gli orali, ma non si sa ancora nulla, oggi abbiamo consegnato le relazioni, ma non le ha ancora prese, e il track di lettura della mail contenente il codice non mi è arrivata (quindi in teoria non l'ha letta)
boh! |
tandrea85 |
novità? ho mandato un email anke al torelli per sapere se posso sostenere l'appello perke mi sono dimenticato di registrarmi sul sifa, ma nessuna risposta manco da lui.. |
maynard80 |
bene a me Fiorentini ha risposto:
code:
Non capisco perche' abbia scelto di usare un algoritmo approssimato!
Prima di fare una tale scelta, non in linea con quanto richiesto,
avrebbe dovuto discuterne con me.
Il progetto non e' accettato e la invito a passare dutante l'orario di
ricevimento per discuterne
saluti
ma funzionava correttamente! bene, domani è il mio compleanno e sono nella crisi più nera... |
karlost |
:? Ho ricevuto una mail di Fiorentini comunicandomi che non riesce a testare il mio prog. perchè gli dà segmetation fault? ma il prog. prima di mandarlo l'ho testato con diversi input e non succedeva qto.
QUalcuno ha idea se per caso può dipendere dalla versione del gcc o del sistemaoperativo sul quale sta facendo i test.
Il mio prog. l'ho compilato con gcc4 e ho usato Ubuntu su un p4 32bit..
Che parto sto esame...:shock: |
maynard80 |
Originally posted by maynard80
bene a me Fiorentini ha risposto:
code:
Non capisco perche' abbia scelto di usare un algoritmo approssimato!
Prima di fare una tale scelta, non in linea con quanto richiesto,
avrebbe dovuto discuterne con me.
Il progetto non e' accettato e la invito a passare dutante l'orario di
ricevimento per discuterne
saluti
ma funzionava correttamente! bene, domani è il mio compleanno e sono nella crisi più nera...
ancora non capisco perchè mi ha annullato il progetto, ho usato un approccio simile all'euristica costruttiva per il commesso viaggiatore denominata "nearest neighbor"
http://it.wikipedia.org/wiki/Proble...sso_viaggiatore
e funziona tranquillamente.
il prof dice che non in linea con quanto richiesto, ma che vuol dire?? |
darkAntAreS |
il problema non è quello del commesso viaggiatore, è "simile" a quello del commesso viaggiatore...quello del progetto si può calcolare in tempo O(n^2), mentre quello del commesso viaggiatore è NP-difficile..
ora non so che algoritmo hai utilizzato, ma utilizzando una euristica produci un risultato che non sempre è ottimale, quindi in generale non trovi la soluzione richiesta... |
maynard80 |
Originally posted by darkAntAreS
il problema non è quello del commesso viaggiatore, è "simile" a quello del commesso viaggiatore...quello del progetto si può calcolare in tempo O(n^2), mentre quello del commesso viaggiatore è NP-difficile..
ora non so che algoritmo hai utilizzato, ma utilizzando una euristica produci un risultato che non sempre è ottimale, quindi in generale non trovi la soluzione richiesta...
beh ora che è finita, mi spiegate questa soluzione ottima in n^2 ?
PS: la mia euristica trovava la soluzione giusta ed in n^2. |
darkAntAreS |
Originally posted by maynard80
PS: la mia euristica trovava la soluzione giusta ed in n^2. [/B]
non lo metto in dubbio, ma solo per il fatto che è un'euristica, in generale non produce una soluzione ottima...magari l'ha prodotta per ogni prova che hai fatto e la produrrà per tante altre prove, ma ce ne saranno sempre tante altre per cui non potrà farlo
per la soluzione, non ce n'è una sola...se vuoi io ne ho implementata una, il codice è nell'area filez e insieme trovi la relazione con una breve spiegazione...quella è però UNA possibile implementazione, a me il prof. ne ha fatta vedere un'altra con un codice un po' più pulito, sempre con tempo O(n^2) (che però non ho ben capito, mi sono limitato ad annuire con una faccia convinta :D )...al max se vuoi chiarimenti sul mio codice posso darteli, per il resto posso solo ipotizzare ;) |
maynard80 |
Originally posted by darkAntAreS
non lo metto in dubbio, ma solo per il fatto che è un'euristica, in generale non produce una soluzione ottima...magari l'ha prodotta per ogni prova che hai fatto e la produrrà per tante altre prove, ma ce ne saranno sempre tante altre per cui non potrà farlo
per la soluzione, non ce n'è una sola...se vuoi io ne ho implementata una, il codice è nell'area filez e insieme trovi la relazione con una breve spiegazione...quella è però UNA possibile implementazione, a me il prof. ne ha fatta vedere un'altra con un codice un po' più pulito, sempre con tempo O(n^2) (che però non ho ben capito, mi sono limitato ad annuire con una faccia convinta :D )...al max se vuoi chiarimenti sul mio codice posso darteli, per il resto posso solo ipotizzare ;)
nel senso che ti ha mostrato una soluzione a colloquio prima della consegna? |
darkAntAreS |
nel senso che giovedì 27 sono andato lì per alcuni chiarimenti e tanto che c'ero abbiamo parlato del progetto e mi ha mostrato una soluzione partendo dalla mia e ripulendo il codice |
mapenzi81 |
Orale torelli...
Curiosita chiede anche gli algoritmi sui grafi e anche l unione di insieme disgiunti? |
Simeon |
Originally posted by mapenzi81
Orale torelli...
Curiosita chiede anche gli algoritmi sui grafi e anche l unione di insieme disgiunti?
Gli algoritmi dei grafi non dovrebbe, l'unione di insiemi disgiunti invece ho sentito chiedergliela. |
senai |
Originally posted by maynard80
ancora non capisco perchè mi ha annullato il progetto, ho usato un approccio simile all'euristica costruttiva per il commesso viaggiatore denominata "nearest neighbor"
http://it.wikipedia.org/wiki/Proble...sso_viaggiatore
e funziona tranquillamente.
il prof dice che non in linea con quanto richiesto, ma che vuol dire??
hahahahah |
maynard80 |
Originally posted by senai
hahahahah
cosa ti fa tanto ridere? |
|
|
|
|