 | |
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 |
mapenzi81 |
Dai..facciamo le cose per bene e facciamo un thread dedicato....
in bocca al lupo a tutti |
lfn |
crepi! cmq credo bisognerà avvisare il prof che lunedì 24 l'ateneo rimarrà chiuso.. ( per la consegna dello stampato )
lfn :cool: |
maynard80 |
ma voi ci avete capito qualcosa? mi sembra abbastanza incasinato (come al solito) |
mapenzi81 |
beh dai...ne ho letti di piu incasinati |
maynard80 |
a pagina 2 ci sono 2 esempi di legami possibili nella colonia, ma quello di destra in teoria non dovrebbe essere regolare secondo i punti 1,2,3:
code:
Supponiamo che la colonia contenga piu di due microorganismi. Allora:
1. L'estremale sinistro deve avere un legame con due
microorganismi distinti (uno dei due puo
essere l'estremale destro).
2. L'estremale destro deve avere un legame con due
microorganismi distinti (uno dei due puo
essere l'estremale sinistro).
3. Sia M un microorganismo qualunque non estremale e sia
P(M) = (x; y). Allora, M ha un
legame con due altri microorganismi Ms e Md tali che, posto
P(Ms) = (xs; ys) e P(Md) =
(xd; yd), deve valere:
xs < x e x < xd
invece nell'esempio di destra ci sono 2 coppie di organismi che hanno solo un legame tra di loro e tra questi il punto b che ha legame solo con il punto a, nonostante b sia estremo destro...
non capisco. |
KiVan |
controlla bene, il punto b ha i seguenti legami: b-->c ; b--->a
a quanto ho capito quello di sinistra segue le regole ma non e' vitale mentre quello di destra segue le regole ed e' vitale perche' l'energia dei legami e' la minore possibile... |
maynard80 |
Originally posted by KiVan
controlla bene, il punto b ha i seguenti legami: b-->c ; b--->a
a quanto ho capito quello di sinistra segue le regole ma non e' vitale mentre quello di destra segue le regole ed e' vitale perche' l'energia dei legami e' la minore possibile...
nel senso che contano i legami verticali e orizzontali? mi sono fatto ingannare dal fatto che non sono marcati e contavo solo quelli obliqui.
ma allora come facciamo a sapere se esistono o meno i legami
g->a , e->d nella figura di sinistra? nel conto non dovrebbero esistere, ma perchè? |
KiVan |
io ho stampato il testo del progetto e i legami orizzontali si vedono benissimo... invece nella versione pdf si fanno fatica a vedere...
cmq e' come un circuito.. per cui i legami in quella di sinistra sono :
f - g - c - a - b - d - e - f (siamo tornati all'inizio)
per quello di destra sono:
f - g - a - b - c - d - e - f (inizio) |
maynard80 |
Originally posted by KiVan
io ho stampato il testo del progetto e i legami orizzontali si vedono benissimo... invece nella versione pdf si fanno fatica a vedere...
cmq e' come un circuito.. per cui i legami in quella di sinistra sono :
f - g - c - a - b - d - e - f (siamo tornati all'inizio)
per quello di destra sono:
f - g - a - b - c - d - e - f (inizio)
interessante, quindi i legami formano un cammino che ha come sorgente e arrivo lo stesso punto. e sono tutti di grandezza uguale.
tutto sta nel trovare il cammino minimo, al solito... |
mapenzi81 |
beh no....non hanno tutti lunghezza uguale....
ma che burdeeello!!! |
maynard80 |
beh se ogni punto è commesso ad altri 2 allora dovrebbe essere una lista di adiacenze dove ogni punto ha 2 adiacenze, no?
a meno che i legami non siano unilaterali. |
maynard80 |
vedo che vi siete messi giu di lena! nessuno posta idee? |
miles |
ho dei dubbi sulle liste di adiacenza perchè ogni punto può avere più vicini e bisogna scegliere le combinazioni che portano ad avere un peso minimo, quindi programmazione dinamica??? |
mapenzi81 |
quindi te vuoi creare una lista per memorizzare i collegamenti tra i vari punti? |
miles |
no un albero binario di ricerca che velocizza la ricerca, gli inserimenti, ecc. |
xeon |
Ciao,
io è tutto il giorno che ci pesto contro la testa.
Alla fine, mi son messo a cercare con google, e penso di aver scoperto perchè è così infame questo progetto.
Trovare il cammino di costo minimo è un problema del "Commesso Viaggiatore", che appartiene alla classe dei problemi NP.
Per questo problema, esistono solo alcune soluzioni, di cui quelle esatte vanno bene solo per problemi fino a circa 50 punti. dopodichè il tempo computazionale diventa proibitivo.
Ho cercato se ci sono implementazioni risolutive già pronte, da poter utilizzare, e qualcosa c'è.
Il problema è che riutilizzarle è un macello.
Sul scriversi da soli un'implementazione risolutiva del problema ci ho pensato, ma non mi sembra una cosa fattibile.
Per informazioni sul Commesso Viaggiatore:
http://it.wikipedia.org/wiki/Proble...sso_viaggiatore
Una pagina con link a software che implementano la soluzione:
http://www.or.deis.unibo.it/research_pages/tspsoft.html
Segnalo tra tutti "Concorde", che è in ANSI C e implementa varie soluzioni possibili del problema, tra cui anche quella esatta, che speravo fosse la più semplice (e quindi di poterla usare...) ma è una mazzata di roba il sorgente...
Molto carina comunque l'interfaccia per windows, dateci un occhio.
Se qualcuno trova qualche strada percorribile per fare questo progetto... |
mapenzi81 |
No xeno non dirmi cosi che sto gia impazzendo di mio.....
Ho provato anche io a pensare come minimizzare la colonia....domani mattina provo a guardare meglio...magari qualche algoritmi sui grafi ci puo venire incontro...
una domanda...gli script sulle strutture dati presenti su algoteam si possono usare tranquillamente? |
xeon |
Beh magari con qualche aggiustamento penso di sì...il problema è capire cosa usare e come usarlo... |
Gehur |
ma il piano esiste o non esiste?? i microorganismi li mettete dentro una struttura?? una lista? insomma serve una struttura dove la cancellazione e l'inserimento siamo facili da eseguire |
Polsy |
Originally posted by xeon
Ciao,
io è tutto il giorno che ci pesto contro la testa.
Alla fine, mi son messo a cercare con google, e penso di aver scoperto perchè è così infame questo progetto.
Trovare il cammino di costo minimo è un problema del "Commesso Viaggiatore", che appartiene alla classe dei problemi NP.
Per questo problema, esistono solo alcune soluzioni, di cui quelle esatte vanno bene solo per problemi fino a circa 50 punti. dopodichè il tempo computazionale diventa proibitivo.
Ho cercato se ci sono implementazioni risolutive già pronte, da poter utilizzare, e qualcosa c'è.
Il problema è che riutilizzarle è un macello.
Sul scriversi da soli un'implementazione risolutiva del problema ci ho pensato, ma non mi sembra una cosa fattibile.
Per informazioni sul Commesso Viaggiatore:
http://it.wikipedia.org/wiki/Proble...sso_viaggiatore
Una pagina con link a software che implementano la soluzione:
http://www.or.deis.unibo.it/research_pages/tspsoft.html
Segnalo tra tutti "Concorde", che è in ANSI C e implementa varie soluzioni possibili del problema, tra cui anche quella esatta, che speravo fosse la più semplice (e quindi di poterla usare...) ma è una mazzata di roba il sorgente...
Molto carina comunque l'interfaccia per windows, dateci un occhio.
Se qualcuno trova qualche strada percorribile per fare questo progetto...
in realtà non è proprio un circuito hamiltoniano perchè hai delle restrizioni in più (il fatto che ogni nodo deve avere un link a destra e uno a sinistra) che immagino facilitino le cose (non danno mai da risolvere degli NP-completi :P)
tra l'altro è dato per scontato che non ci siano 3 punti con la stessa ascissa e che non ci siano 2 punti con l'ascissa minima/massima? perchè se una delle 2 accade è impossibile formare una colonia vitale così com'è definita nelle specifiche |
maynard80 |
Originally posted by Polsy
tra l'altro è dato per scontato che non ci siano 3 punti con la stessa ascissa e che non ci siano 2 punti con l'ascissa minima/massima? perchè se una delle 2 accade è impossibile formare una colonia vitale così com'è definita nelle specifiche
l'ultimo commento non l'ho mica capito.... |
Gehur |
chi mi da delle dritte/idee sulla funzione crea....non so come farla |
mapenzi81 |
dai un occhi ai vecchi progetti che ci sono nell area filez...
io ho creato la struttura dati e lo semplicemente inizializzata....
nn penso serva d piu |
tandrea85 |
io non riesco a capire quanti possibili legami si possono formare tra piu punti.. nell'esempio 1 fa vedere 2 possibili configurazioni, ma ce ne sono altre? |
mapenzi81 |
beh si...ogni punto puo connettersi
a uno quasiasi dei punti cn x minore ed a uno con x maggiore (sempre che questi siano ancora "liberi" ) |
Gehur |
guarderò..hai detto che hai inizializzato la struttra dati,se non pretendo troppo mi puoi dire che tipo di struttura hai utilizzato |
tandrea85 |
Originally posted by tandrea85
io non riesco a capire quanti possibili legami si possono formare tra piu punti.. nell'esempio 1 fa vedere 2 possibili configurazioni, ma ce ne sono altre?
si ma l'esempio fa vedere un circuito chiuso.. se le connetto a caso controllando solo la x posso formare una roba a zig zig ke va su e giu e non riuscendo piu a tornare al punto di partenza |
Polsy |
Originally posted by maynard80
l'ultimo commento non l'ho mica capito....
come non detto, rileggendo mi sono accorta che 2 punti non possono avere la stessa ascissa (anche se è detto un po' tra le righe...)
:) |
xeon |
Originally posted by mapenzi81
dai un occhi ai vecchi progetti che ci sono nell area filez...
io ho creato la struttura dati e lo semplicemente inizializzata....
nn penso serva d piu
Non so ancora di preciso, ma per me si deve studiare quanti cammini hamiltoniani si possono avere con n punti. Se trovo qualcosa vi dico, ma non è importante per me sapere quanti cammini ci sono.
Qualcuno invece ha risolto il rompicapo della funzione colonia() ? ... |
Gehur |
oggi pomeriggio penso alle funzioni crea e inserisci..., per me il problema è come iniziare (almeno per ora) |
xeon |
Eh ok, ma se poi arrivi a implementare colonia() (ma anche genera() eh) e scopri che le strutture dati che hai usato non van bene? |
mapenzi81 |
Originally posted by Polsy
come non detto, rileggendo mi sono accorta che 2 punti non possono avere la stessa ascissa (anche se è detto un po' tra le righe...)
:)
molto tra le righe... :)
quindi struttura dati indicizzata sulla x ?
in questo modo le chiavi sono univoche... |
Polsy |
Originally posted by mapenzi81
molto tra le righe... :)
quindi struttura dati indicizzata sulla x ?
in questo modo le chiavi sono univoche...
visto che poi ti serve ricercare i punti anche per nome puoi indicizzarli sia secondo le coordinate che in base al nome
cioè ti crei una struct per le info riguardanti il singolo punto, poi fai due "meta-strutture" (liste, alberi...) una ordinata secondo le x e una lessicograficamente, ognuna delle quali ha nel singolo nodo il puntatore alla struttura con le info del punto
in questo modo hai 2 criteri di ordinamento senza duplicare informazioni |
mapenzi81 |
Originally posted by Polsy
visto che poi ti serve ricercare i punti anche per nome puoi indicizzarli sia secondo le coordinate che in base al nome
cioè ti crei una struct per le info riguardanti il singolo punto, poi fai due "meta-strutture" (liste, alberi...) una ordinata secondo le x e una lessicograficamente, ognuna delle quali ha nel singolo nodo il puntatore alla struttura con le info del punto
in questo modo hai 2 criteri di ordinamento senza duplicare informazioni
mmmmm
si pero nel singolo nodo avro sicuramente i puntatori della struttura
per ex negli alberi ho up, right e left....
devo duplicare i puntatori che riguardano le strutture all interno del singolo nodo...3 puntatori per l'albero (lista) che ordina per x e 3 puntatori per lo'albero (lista) per l'ordinamento lessicografo...
è corretto? |
Polsy |
Originally posted by mapenzi81
mmmmm
si pero nel singolo nodo avro sicuramente i puntatori della struttura
per ex negli alberi ho up, right e left....
devo duplicare i puntatori che riguardano le strutture all interno del singolo nodo...3 puntatori per l'albero (lista) che ordina per x e 3 puntatori per lo'albero (lista) per l'ordinamento lessicografo...
è corretto?
si nel senso, avrai 3 strutture diverse
esempio:
la struttura punto contiene x, y, nome, link sx e dx
la struttura (lista?) che ordina per coordinate avrà 3 puntatori *prec *succ e *punto
la struttura (albero?) che ordina per nome avrà *left *right e *punto
oppure te ne sbatti dell'efficienza e tieni la struttura ordinata per le x e quando devi cercare un punto per nome scorri tutto l'albero (lista) :P |
maynard80 |
Originally posted by Polsy
la struttura punto contiene x, y, nome, link sx e dx
la struttura (lista?) che ordina per coordinate avrà 3 puntatori *prec *succ e *punto
la struttura (albero?) che ordina per nome avrà *left *right e *punto
mi sa che è il contrario, l'albero per le coordinate e la lista ordinata lessicograficamente. |
mapenzi81 |
Originally posted by Polsy
si nel senso, avrai 3 strutture diverse
esempio:
la struttura punto contiene x, y, nome, link sx e dx
la struttura (lista?) che ordina per coordinate avrà 3 puntatori *prec *succ e *punto
la struttura (albero?) che ordina per nome avrà *left *right e *punto
oppure te ne sbatti dell'efficienza e tieni la struttura ordinata per le x e quando devi cercare un punto per nome scorri tutto l'albero (lista) :P
riflettendoci credo che sia la soluzione ottimale....
mi sa che stasera mi tocchera implementarla :P |
mapenzi81 |
Originally posted by maynard80
mi sa che è il contrario, l'albero per le coordinate e la lista ordinata lessicograficamente.
si..mi sa che è la soluzione migliore...
...mi sta sfuggendo come fare l ordinamento lessicografo....:shock: |
Gehur |
io pensavo di inserire dentro una lista le strutture punto solo che devo pensare come fare la funz colonia....
piuttosto qualcuno mi può spiegare come si calcola l'energia..si insomma io l'ho calcolata e mi son venuti 25 e 20 ma vorrei sapere altri pareri xche mi sembra di aver letto che l'energia non è collegata ai legami tra i punti ma io ho usato proprio i legami tra i punti per calcolarla....(almeno credo!) |
xeon |
Io penso che l'albero ordinato lessicograficamente (basta una strcmp() ) sia ottimale per ricercare nodi, mentre invece per i punti occupati sul piano sia meglio una lista, dato che permette di eseguire inserimenti e cancellazioni in tempo lineare, oltre a poter accedere agli elementi adiacenti di un nodo in tempo unitario (si ricerca prima un microorganismo per nome nell'albero, poi tramite il puntatore al suo punto sul piano occupato si recupera il punto della lista).
Qualcuno ha capito come fare colonia() ????? :( |
Gehur |
sulla lista (inserimento e cancellazione) hai detto quello che avevo pensato..per quanto riguarda la colonia ho notato che sicuramente il l'energia minore è dovuta a un numero di collegamenti/cammini uguale al munero di punti(vabbe cosa ovvia)
piuttosto nessuno mi chiarisce come calcolare l'energia... |
mapenzi81 |
Originally posted by Gehur
sulla lista (inserimento e cancellazione) hai detto quello che avevo pensato..per quanto riguarda la colonia ho notato che sicuramente il l'energia minore è dovuta a un numero di collegamenti/cammini uguale al munero di punti(vabbe cosa ovvia)
piuttosto nessuno mi chiarisce come calcolare l'energia...
beh....l energia tra due punti è la differenza tra le sue coordinate
P1(5,6)->p2(3,4) E= |5-3|+|6-4|=2+2=4
secondo me cè qualche relazione tra i punti per ottimizzare il percorso....il problema è trovarla e dimostrarla |
Gehur |
si ok...ma fammi un esempio con 3 o 4 punti perfavore
hai provato a calcolare l'energia nell esempio ti è venuta 24 e poi 20??
a me è venuta, ho fatto Edi fg + Ecg + Eac ecc... solo che in questo modo si è vincolati dai legami mentre nel testo mi sembra di capire che l'energia vitale dipende solo dalle coordinate e non dai legami... |
mapenzi81 |
Originally posted by Gehur
si ok...ma fammi un esempio con 3 o 4 punti perfavore
hai provato a calcolare l'energia nell esempio ti è venuta 24 e poi 20??
a me è venuta, ho fatto Edi fg + Ecg + Eac ecc... solo che in questo modo si è vincolati dai legami mentre nel testo mi sembra di capire che l'energia vitale dipende solo dalle coordinate e non dai legami...
si mi viene 20 e 24
beh....deve essere legata dai legami..se no qualsiasi coppia che prendi puo andare bene....invece dei prendere le coppie che minimizzano il percorso |
Gehur |
infatti ma all'inizio della pagina numero 2 (subito dopo il punto 4) ce scritto che i legami non centrano (almeno io ho capito cosi)... vabbe per oggi basta |
Polsy |
Originally posted by maynard80
mi sa che è il contrario, l'albero per le coordinate e la lista ordinata lessicograficamente.
si beh in realtà dipende dall'algoritmo che scegli (per quello mettevo i punti di domanda)
per come avevo pensato di implementare la funzione che trova la colonia vitale paradossalmente a me risulta + efficiente una lista, perchè mi serve scandire i punti da sinistra a destra e non mi capiterà di cercare un punto in base al valore della sua ascissa
per l'ordine lessicografico invece credo che l'albero sia la soluzione migliore (soprattutto se lo si rende bilanciato) |
mapenzi81 |
Originally posted by Gehur
infatti ma all'inizio della pagina numero 2 (subito dopo il punto 4) ce scritto che i legami non centrano (almeno io ho capito cosi)... vabbe per oggi basta
io l'ho interpretata come
....ogni volta che modifichi qualche punto...lo inserisci, lo mofichi, lo elimini etc...si parte da zero e si cancellano tutti i collegamenti esistenti (preesistenti) |
Gehur |
si be può essere una giusta interpretazione, visto che per calcolare l'energia bisogna considerare i punti 2 a 2 Egf + Ecg + Eac + Eba + Ebd + Ede + Eef....
domani ci penso meglio |
maynard80 |
ma invece una hash table con chiave i nomi?? e poi una lista di adiacenze per il grafo? (che si crea ogni volta che il grafo è modificato)
una volta che abbiamo la lista di adiacenze ci applichiamo un algo del libro... no? |
mapenzi81 |
Originally posted by maynard80
ma invece una hash table con chiave i nomi?? e poi una lista di adiacenze per il grafo? (che si crea ogni volta che il grafo è modificato)
una volta che abbiamo la lista di adiacenze ci applichiamo un algo del libro... no?
anke....
pero cosi non t viene comodo l'ordinamento per le x
una conferma...
me lo sono sognato o le coordinate sono interi positivi sia x che y? |
maynard80 |
essendo su Z col cavolo che sono positivi. |
mapenzi81 |
hai ragione
cmq non cambia molto..per il calcolo dell energia...
qualcuno è a buon punto cn la creazione della colonia? |
maynard80 |
per il piano chi parlava di liste intendeva lista di adiacenze vero?
qualcuno ha una implementazione base della lista di adiacenze?
code:
struct nodo{
int X,Y;
char *nome;
}
struct listaNodi{
nodo *nodo;
struct listaNodi *next;
struct listaAdiacenze *adj;
}
struct listaAdiacenze{
struct listaNodi *nodo_rappresentato;
struct listaAdiacenze *next;
}
E' una cagata?(tolto eventuali errori di sintassi) non trovo da nessuna parte tale implementazione, ho trovato solo liste semplici e bidirezionali, per le liste di adiacenze si intende una lista con tutti i punti dove in ogni punto c'è un puntatore ad una lista dei nodi adiacenti a quel punto.. quello che non mi torna è se ogni adiacenza deve a sua volta puntare alla lista base oppure no e come gestire le cancellazioni.
per il resto una volta creata tale lista e avendo una struttura che memorizza i punti (albero) si appica un algo di shortest path sul grafo (la lista).
non credete? l'energia è la distanza tra 2 punti e ogni nodo ha al + 2 adiacenze.
in + il fatto che non esistono 2 punti con la stessa ascissa può rivelarsi una semplificazione, ma non so ancora come. |
jonnypee |
ciao a tutti...
volevo fare un piccolo appello. è quasi un anno che mi sto portando dietro quest'esame, sono proprio negato a programmare in C...non è che qualcuno sotto ricompensa può aiutarmi a farlo??? |
lino |
Chi ha utilizzato un albero lessicografico per i nomi dei microorganismi e una lista per le coordinate che algoritmo ha utilizzato per calcolare l'energia di una colonia? |
maynard80 |
io sto usando un albero ordinato lessicograficamente e una lista che tenga dei puntatori all'albero ordinata secondo la sola x (non possono esserci 2 nodi con la stessa x)
per la colonia vitale penso che bisogna usare un'euristica per il prob. del commesso viaggiatore, mentre per il genera il problema che ho è:
se sul segmento (0,0)-(1,2) devo generare un organismo che coordinate ha?? la y è 1 ma la x è 0,5!!! e così nella maggior parte dei casi.. |
KiVan |
a quanto ho capito generi l'organismo se e solo se i valori di x e y dell'organismo probabile sono interi e se non ci sono altri organismi con la stessa x
in pratica per vedere se un organismo ha le coordinate intere ti ricavi l'equazione della retta (o meglio del segmento) passante per i due organismi, ci sostituisci nell'equazione al posto di X tutti i naturali compresi tra gli estremi del segmento e se ottieni delle Y intere hai trovato un organismo probabile...
se non vengono soddisfatte queste due condizioni semplicemente non crei nulla... |
maynard80 |
Originally posted by KiVan
a quanto ho capito generi l'organismo se e solo se i valori di x e y dell'organismo probabile sono interi e se non ci sono altri organismi con la stessa x
in pratica per vedere se un organismo ha le coordinate intere ti ricavi l'equazione della retta (o meglio del segmento) passante per i due organismi, ci sostituisci nell'equazione al posto di X tutti i naturali compresi tra gli estremi del segmento e se ottieni delle Y intere hai trovato un organismo probabile...
se non vengono soddisfatte queste due condizioni semplicemente non crei nulla...
beh il testo di questo prog. mi sembra scritto coi piedi |
logan.x |
Ciao, io invece ho la seguente domanda:
sono ammessi percorsi che si incrociano?
Mi spiego:
ho preso come riferimento i punti del primo esempio del file di input
A(1,5)
C(2,15)
E(3,8)
F(4,2)
B(5,10)
D(6,9)
Provando su carta, io trovo 2 configurazioni di punti che mi danno lo stesso valore minimo (cioe' 40)
Una e'
A -> C -> E -> B -> D -> F -> A
mentre l'altra e'
A -> C -> E -> D -> B -> F -> A
Disegnandole si nota che il segmento ED incrocia BF
E' ammesso tale percorso? |
xeon |
Il percorso, se non viola le 3 condizioni iniziali, è permesso.
Soluzione (penso l'unica) al problema di colonia: provare tutte le configurazioni.
Partendo da un punto, si creano tutti i cammini che non violano le 3 regole.
Quando si crea un ciclo (un nodo con due collegamenti) si calcola l'energia richiesta dal cammino, e se è la minore trovata finora si memorizza il cammino come quello di costo minore. |
maynard80 |
Originally posted by xeon
Il percorso, se non viola le 3 condizioni iniziali, è permesso.
Soluzione (penso l'unica) al problema di colonia: provare tutte le configurazioni.
Partendo da un punto, si creano tutti i cammini che non violano le 3 regole.
Quando si crea un ciclo (un nodo con due collegamenti) si calcola l'energia richiesta dal cammino, e se è la minore trovata finora si memorizza il cammino come quello di costo minore.
se ti calcoli tutti i cammini il tuo sistema avrà complessità esponeniale... |
marcomaria |
Originally posted by Polsy
per l'ordine lessicografico invece credo che l'albero sia la soluzione migliore (soprattutto se lo si rende bilanciato)
stavo pensando ad una tabella hash, dovrebbe essere estremamente performante per ricerca/ins/cancellazione in base al nome che sembra il caso primario;
mentre per coordinate, che e' il caso secondario, usare una semplice lista...ma queste servono per gli algoritmi e forse e' meglio avere un albero bilaciato
ps: per la funzione genera() con il coefficiente angolare del segmento creato si potrebbe definire se si intersecano pti oppure no...boh...riflessioni da tarda sera |
Polsy |
Originally posted by marcomaria
stavo pensando ad una tabella hash, dovrebbe essere estremamente performante per ricerca/ins/cancellazione in base al nome che sembra il caso primario;
ero al primo turno e con goldwurm non si fanno le tabelle hash, quindi non ti saprei dire...
mentre per coordinate, che e' il caso secondario, usare una semplice lista...ma queste servono per gli algoritmi e forse e' meglio avere un albero bilaciato
dipende tutto da che tipo di algoritmo usi, se scandisci i punti sempre da sx a dx (o viceversa) senza cercare una x in particolare ti conviene una lista, mentre se fai una cosa del tipo "voglio i punti compresi tra a e b" ti conviene un albero (magari a intervalli)
ps: per la funzione genera() con il coefficiente angolare del segmento creato si potrebbe definire se si intersecano pti oppure no...boh...riflessioni da tarda sera
+ semplice ;)
fai conto di avere A in (x1,y1) e B in (x2,y2)
se trovi x=|x2-x1| e y=|y2-y1| ti accorgi che A e B non possono generare solo se sono coprimi ;)
se invece trovi i divisori comuni trovi anche i punti in cui possono generare (con un po' di matematica :P in realtà basta l'mcd) |
tandrea85 |
Originally posted by maynard80
se ti calcoli tutti i cammini il tuo sistema avrà complessità esponeniale...
io ho fatto proprio cosi.. anzi il mio è (n-1)! ma con l'input del prof l'algoritmo se la viaggia.. con 6 nodi le permutazioni sono solo 120 da calcolare nel mio caso
mo devo capire come fare genera.. |
miles |
io per genera ho usato l'equazione della retta y=mx+q calcolo m e q in base ai due micro (x1,y1), (x2,y2) poi uso l'equazione e se y è un intero allora posso generare un nuovo micro. avete invece suggerimenti per la colonia vitale perche come l'ho implementata io in alcuni casi non trova la soluzione migliore ad esempio come nell'ultimo C dell'esempio. |
miles |
dimenticavo...........ma perchè l'output dell'ultimo stampa non è ordinato lessicograficamente??????????? |
maynard80 |
dunque se invece di un algo (che per questo prob è sicuramente esponenziale) usiamo un'Euristica è normale che non sempre trovi il cammino migliore ma ci vada vicino.
http://it.wikipedia.org/wiki/Proble...sso_viaggiatore
io la penso così, o siamo veloci ma non sempre esatti o siamo a complessità esagerate, io tendo per la prima. di più non so |
miles |
sì ok ma se non funziona sugli input del prof il progetto non è accettato...........provare per credere.................quindi come c.zzo si implementa sto colonia esisterà una soluzione anche perchè implementare un algoritmo basato sul commesso viaggiatore è un lavoro spaventoso! che palle sto progetto! |
maynard80 |
Originally posted by miles
sì ok ma se non funziona sugli input del prof il progetto non è accettato...........provare per credere.................quindi come c.zzo si implementa sto colonia esisterà una soluzione anche perchè implementare un algoritmo basato sul commesso viaggiatore è un lavoro spaventoso! che palle sto progetto!
esatto, è roba di algoritmiII e cmq uno dei problemi + difficili! |
mapenzi81 |
concordo..... :( |
miles |
invece per quanto riguarda l'output dell'ultimo censimento che non è ordinato lessico.... ho mandato una mail al prof per sentire che mi dice........domani provo a modificare il mio colonia e poi vi faccio sapere.....spero di non riprendere a imprecare visto che sono già tre anni che ho smesso!!!!!!!!!!! |
mapenzi81 |
ma no dai...nn cè bisogno di imprecare...qui cè proprio bisgno di bestemmiare!!!!
cmq al di la di cio.....
nell input del problema cè
m epsilon 0 -10
che nn corrisponde allo standard del problema....
qualcuno ha già chiesto ai prof come il programma deve "ragire" in questo caso? |
miles |
penso che lì sia un errore del prof |
Nosferatu |
miles puoi spiegarmi come si fa a trovare m e q nell'equazione della retta passante per i 2 micro (x1,y1), (x2,y2) ... la matematica non è il mio forte |
marcomaria |
qlc1 ha usato il codice di Algoteam x implementare RB tree?
avrei un dubbio... |
KiVan |
ragazzi sul libro "introduzione agli algoritmi" se guardate il problema alla fine del capitolo 16 noterete che e' praticamente uguale all'algoritmo del progetto...
lo chiama "problema del commesso viaggiatore bitonico e euclideo"
come suggerimento dice: "si effettui una scansione da sinistra verso destra mantenendo le possibilita' ottime per le due parti del cammino"...
qualcuno sa interpretare a modo questo suggerimento? |
Nosferatu |
Qualcuno sa per caso come si fà a concatenare ad una stringa un intero |
tandrea85 |
Originally posted by Nosferatu
Qualcuno sa per caso come si fà a concatenare ad una stringa un intero
code:
int x = ...;
char strtemp[]="";
sprintf(strtemp, "%d",x);
poi usi la strcat per concatenera le 2 stringhe |
maynard80 |
dunque io ho l'albero con i nodi ordinati lessicograficamente e una lista che invece li dovrebbe ordinare in base alla x... ma come faccio ad applicare un algo di ordinamento (rand-quicksort) ad una lista?devo scorrere tutta la lista ricavare l'array poi cancelare la lista ordinare l'array e poi riempirlo??? un delirio, ma se invece inserisco ordinatamente (invece di inserire in testa) ogni volta nel caso peggiore mi scorro la lista... cosa consigliate? |
mapenzi81 |
anke io ho un problema simile....
ogni volta che inserisco un elemento lo posiziono nella sua posizione scorrento la lista....
molto inserion sort... :)
se usi la lista ci impieghi n+nlg2+n ma utilizzi piu memoria....
io sto cercando una 3 soluzione....tipo un quicksort o mergesort sulla lista direttamente giocando un po con i puntatori... |
maynard80 |
mapenzi se trovi la soluzione dammi una dritta! |
mapenzi81 |
se la trovo...volentieri.... |
Nosferatu |
Dopo aver calcolato m e q come faccio a verificare che la y risultante sia un intero (nel metodo genera)? |
tandrea85 |
boh io ho finito.. con l'input del prof ci impiega 0.063sec.. direi abbastanza buono anke se nn ottimo..
ho usato solo 1 lista ordinata lessicograficalmente e un array di appoggio per calcolare il cammino con energia minima.. |
maynard80 |
Originally posted by tandrea85
boh io ho finito.. con l'input del prof ci impiega 0.063sec.. direi abbastanza buono anke se nn ottimo..
ho usato solo 1 lista ordinata lessicograficalmente e un array di appoggio per calcolare il cammino con energia minima..
puoi delucidarci su come hai fatto? |
tandrea85 |
Originally posted by maynard80
puoi delucidarci su come hai fatto?
certo.. ho semplicemente fatto tutte le prove possibili con delle permutazioni.. N nodi -> (N-1)! permutazioni possibili
ho costruito un array con dentro i microorganismi e su quello ho fatto il calcolo di tutte le permutazioni possibili partendo sempre dall'estremale sinistro, scartando i percorsi ke nn verificavano una certa condizione sulla x e ho scoeprto ke mi veniva fuori sempre il percorso corretto.. |
mapenzi81 |
....qualche delucidazione su come si calcola il tempo di esecuzione?? |
tandrea85 |
Originally posted by mapenzi81
....qualche delucidazione su come si calcola il tempo di esecuzione??
#include <time.h>
all'ìnizio del main metti questo
code:
clock_t start,end;
double tempo;
start=clock();
prima di uscire dal programma quindi con la pressione della f metti questo
code:
end=clock();
tempo=((double)(end-start))/CLOCKS_PER_SEC;
printf("execution_time == %f seconds\n", tempo);
ovviamente l'input devi ridirigerlo all'esecutibile se no sta roba nn funge |
sasaciric |
Ragazzi ho provato con 20 punti e ci mette circa 5 minuti e mezzo. Con l'esempio del prof anche a me è immediato. Voi con 20 punti quanto ci mettete??
Grazie.
Ciao.
Sasaciric |
mapenzi81 |
un pokino di meno...
ragazzi ci postiamo alcuni test su grossi numeri e li compariamo cosi evitiamo di controllarli a mano? |
sasaciric |
Cosa intendi per un pochino meno? La metà o più o meno lo stesso tempo?? |
maynard80 |
complessità schifosa evidentemente...calcolare tutte le possibili combinazioni non è certo la buono, anzi è la soluzione peggiore |
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
|
sasaciric |
Caro maynard80 evidentemente l'unico modo per risolvere il problema del commesso viaggiatore è provare tutte le configurazioni possibili (che rispettino i vincoli del progetto e quindi sono meno rispetto a n! del commesso viaggiatore). I metodi euristici non portano mai alla soluzioni ottimale a meno di grandi quantità di punti. Realisticamente i test da fare non sono su centinaia di punti ma su 6/10 come negli esempi del prof. |
tandrea85 |
Originally posted by sasaciric
Caro maynard80 evidentemente l'unico modo per risolvere il problema del commesso viaggiatore è provare tutte le configurazioni possibili (che rispettino i vincoli del progetto e quindi sono meno rispetto a n! del commesso viaggiatore). I metodi euristici non portano mai alla soluzioni ottimale a meno di grandi quantità di punti. Realisticamente i test da fare non sono su centinaia di punti ma su 6/10 come negli esempi del prof.
per la storia dell'n! cmq il programma ne valuta sempre n! ma poi sceglie se è valido o meno.. infatti a me ne risultano per es. 15/720 validi nel primo caso, ma i 720 li valuta cmq tutti
altra cosa: ma l'output del prof è tutto corretto? a me inverte un po di valori per esempio al posto di
b,(5,10) <- d,(7,2) -> fd6,(6,2) scrive fd6,(6,2) <- d,(7,2) -> b,(5,10)
è un problema? |
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 |
|
|
|
|