![]() |
Pages (2): [1] 2 » Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Algoritmi e strutture dati (http://www.dsy.it/forum/forumdisplay.php?forumid=207)
-- [Progetto] L'ape bottinatrice (http://www.dsy.it/forum/showthread.php?threadid=21329)
[Progetto: L'ape bottinatrice]
E' online ... speriamo bene ...
mhmmm non sembra facile...
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Confidiamo nel Gran Visir Indice del Cormen ... qualche idea verra'
eheheh
ridiamo per non piangere...
Pero' il lato positivo e' che l'ho finito di leggere ...
ma no
Non non è poi così difficile, è sulla stessa scia dei progetti Oleodotti, ma mooooooolto più semplice, quindi mi sa che si ancdrà a pescare da lì...
Non l'ho guardato oleodotti per cui... ma si dai mo ci si pensa un attimo ... il problema e' sempre l'impatto 
anche a me non sembra difficile, considerato che si deve implementare solo Viaggio, quindi l'algoritmo ha solo l'obiettivo di trovare un cammino massimo fra i fiori... vediamo e speriamo in bene, in bocca al lupo a tutti guagliò!!!
P.
Ma insomma .. secondo me e' determinare i campi in modo ottimizzato...
Tutte le volte che considero un prato devo controllare nel caso peggiore l'intersezione con tutti gli altri... purtroppo non mi viene in mente nulla di piu' intelligente...
altra cosa che non ho capito dal testo, cosa vuol dire che solo due prati possono sovrapporsi?
Tre prati perche' non possono?
cioe' e' permessa la sequenza di inserimento:
ret1-ret2-ret3
ma non e' permessa la sovrapposizione ret1 ret3 perche' se inserisco poi ret2 interseca 2 prati?
Boh...
piu' che altro il testo dice
Due prati possono sovrapporsi, anche solo parzialmente. Se un punto appartiene A DUE O PIU' prati, il valore....
E' qui che non capisco... Se sono due all'inizio e poi dopo due o piu'...
Io ho capito che infiniti prati possono sovrapporsi..... però li consideri a due a due, forse in quel senso dice "Due prati possono sovrapporsi"...
Effettivamente non è chiaro...
dunque, per quanto riguarda la struttura dei prati non so ancora cosa utilizzare, è chiaro che sovraposti o meno no ci interessa molto (quando inserisci un prato se nessuno dei fiori gia esiste non è sovrapposto a nessuno e incremento la variabile globale di 1, se è sovrapposto qualche fiore il numero di campi non aumenta e il peso di quel fiore è sommato a quello gia esistente in quel punto)
il cammino è sempre lungo come la differenza Y1-Y0, da ogni fiore ci si sposta al + in tre altri fiori ui verticale, questo mi induce a pensare che tutti i cammini possibili siano un albero ternario e quello migliore sia quello con la foglia + pesante.
voi che dite?
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
2padri ???
si ma se usi un albero kon 3 rami, un fiore può essere ripetuto in + nodi , giusto ? kome fai a inserire un fiore ke è raggiungibile da 2 fiori, ke ha cioè 2 padri ? ...kosì dicendo diventerebbe un grafo !! o mi sbaglio ???
ma visto ke è simile al progetto OLEODOTTI, xkè nessuno dall'animo gentile non lo posta nell'area filez ??
ma visto ke è simile al progetto OLEODOTTI, xkè nessuno dall'animo gentile non lo posta nell'area filez ??
ma voi a ke strutture avete pensato ??? io ho pensato di usare delle liste per ogni campo in cui ci inserisco i fiori kon i valori aggiornati se 2 prati si sovrappongono!
dei prati me ne frego visto ke nn m servono da nessuna parte ?? voi ke dite ???
Originally posted by desrob
ma voi a ke strutture avete pensato ??? io ho pensato di usare delle liste per ogni campo in cui ci inserisco i fiori kon i valori aggiornati se 2 prati si sovrappongono!
dei prati me ne frego visto ke nn m servono da nessuna parte ?? voi ke dite ???
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
o delle tabelle hash? l'RB Albero perchè non ti convince?
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
ma xkè liste di liste quando si può fare solo una semplice lista koncatenata! le tabelle hash e gli alberi RB li eliminio a priori visto ke sono troppo incasinati , se vuoi avete altre idee potete postarle visto ke le mie scarseggiano !! tnx
più che altro come ordini la lista e soprattutto poi la devi sempre scorrere tutta.... a livello di ottimizzazione fa un po pena.... certo anche io sono abbastanza imbranato, ma se ci riesco a fare qualcosa di buono meglio. Meglio non scartare a priori una soluzione perchè "incasinata", è vero che è + dura da implementare, ma è sicuramente + efficiente
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
l'importante è ke il programma funzioni, poi se funziona bene è meglio ! ma scegliere gli alberi RB è un suicidio, fattelo dire ..poi puoi fare quello ke vuoi !!!!
Un Inserimento in O(1) per una lista e' minore di un inserimento in un RB O(lgn), ma una ricerca in un RB O(lgn) e' minore che in una lista O(n^2)... di conseguenza dipende da cosa ci si deve fare...
Gli RB alberi implementati (senza accessori
) vengono sulle 500 righe di codice (commenti abbondanti inclusi).
Senza operazione di JoinRB.
Io escluderei cmq le tabelle hash, tries & company.
Rimangono in gioco:
- LISTE
- ALBERI
Cmq sono dell'idea che l'implementazione piu' difficile da ottimizzare e' quella della determinazione dei campi. Troppo dispendiosa... Secondo me si puo' fare di meglio di O(n^2).
Voi cosa avete pensato per determinare i campi?
A questo giro ci sono anch'io.Anch'io avevo pensato a delle liste di puntatori oppure tabelle hash,ma dagli altri progetti tutti hanno sempre usato liste o alberi e questo non mi sembra troppo diverso.
ma perche' avevate pensato alle tabelle hash?
Ok, dopo aver letto tutti i vostri commenti, ora mi posso concedere la lettura del testo 
Spero che la notte fonda mi aiuti nella comprensione.
Alea iacta est!
__________________
Livio
** Pone seram, cohibe, sed quis custodiet ipsos custodes? Cauta est et ab illis incipit uxor. **
www
Con un albero RB come pensate di calcolare il cammino massimo?
Per cosa vorresti calcolare il cammino massimo? Quello di peso massimo?
Anch'io son daccordo che l'rb per quello non ve bene.
Originally posted by drakend
Con un albero RB come pensate di calcolare il cammino massimo?
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Ma secondo voi, per quanto riguarda la funzione di inserimento nuovo piano (function "i"), va fatto il controllo sul fatto che il piano che sto inserendo ed il file che vado ad utilizzare considerano lo stesso numero di punti=fiori?
..oppure considero non possibile il caso errato?
Originally posted by Frigging
Per cosa vorresti calcolare il cammino massimo? Quello di peso massimo?
Anch'io son daccordo che l'rb per quello non ve bene.
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Originally posted by maynard80
beh invece dovrebbe essere possibile applicare un algoritmo di calcolo del cammino PESATO indipendentemente dalla struttura dati utilizzata, per questo la lista è una cacchiata con la sua complessità n^2 contro l'albero con complessità log(n).
Originally posted by Frigging
Se usi un albero rb come fai a mantenere la proprieta' di connessione tra un pto(x0,y0)e un punto(x1,y0) ad esempio?
Se usi l'rb che criterio di ordinamento di key vai a usare? E soprattutto si puo' muovere in 3 direzioni e non solo due .. di conseguenza l'albero binario non lo vedo giusto...
che ne pensi?
Meglio un albero normale...
Per quello chiedevo a cosa serviva l'rb se e' per il peso allora non va bene secondo me...
Mah adesso cmq ci penso un po su... se si puo' usare anche per la determinazione del cammino di peso massimo.
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Originally posted by maynard80
non capisco, la struttura dati è indipendente da queste cose, i nodi sono ordinati in base alla chiave (x,y) se un nodo non esiste non esiste il rispettivo fiore.
quando scorri l'albero per trovare il cammino sarà li e solo li che tra i parametri del cammino dici che sono permessi alcuni spostamenti (3 spostamenti) e memorizzi il percorso in una struttura di supporto dove andrà a finire solo il cammino prescelto.
ogni ricerca sarà sempre + veloce che in una lista ed esaminerà ricorsivamente i percorsi possibili restituendo quello migliore.
non deve in alcun modo interessare che il grafo sia costruito in base ai percorsi possibili, ma che sia efficiente.
premetto che non ho ancora avuto molto tempo da dedicarci ma ora,d'accordo con maynard, proverò con un semplice albero.Non so se può essere superfluo ribadirlo(per alcuni posts) ma il piano esiste in funzione delle strutture dati che contengono i fiori e i campi,di per sè non è un problema implementare il piano in sè.
Originally posted by Jaco
premetto che non ho ancora avuto molto tempo da dedicarci ma ora,d'accordo con maynard, proverò con un semplice albero.Non so se può essere superfluo ribadirlo(per alcuni posts) ma il piano esiste in funzione delle strutture dati che contengono i fiori e i campi,di per sè non è un problema implementare il piano in sè.
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Originally posted by maynard80
non capisco, la struttura dati è indipendente da queste cose, i nodi sono ordinati in base alla chiave (x,y) se un nodo non esiste non esiste il rispettivo fiore.
quando scorri l'albero per trovare il cammino sarà li e solo li che tra i parametri del cammino dici che sono permessi alcuni spostamenti (3 spostamenti) e memorizzi il percorso in una struttura di supporto dove andrà a finire solo il cammino prescelto.
... Rieditato il post... avevo dimenticato i che si poteva solo muovere in alto
Originally posted by drakend
Cioè tu vuoi far una specie di "albero di adiacenza"? Cioè un albero, rb o meno che sia, in cui in ogni nodo memorizzi una lista di puntatori agli elementi raggiungibili a partire da quel nodo?
Se è così ci avevo pensato pure io, però tieni conto di alcune cose:
1) devi farti un albero per ogni campo, a meno di stratagemmi particolari, e mettertelo in una lista.
2) gli algoritmi che calcolano i cammini massimi necessitano comunque di liste di adiacenza come input, per cui devi calcolarti le liste di adiacenza dalla struttura che usi ogni volta...
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Originally posted by Frigging
Non possiamo usare, secondo me, gli algoritmi noti per il calcolo del cammino di peso massimo, in quanto prendendo in considerazione di utilizzare l'algoritmo di Floyd-Warshall che e' l'unico che prende in considerazione pesi negativi, non e' assicurata cmq la corettezza dell'algoritmo nel caso in cui esistano circuiti negativi.
Cmq secondo me questo progetto non e' poi cosi' facile implementarlo con una decente complessita'.
Originally posted by drakend
Capitolo 25.4 DAG-Shortest-Path, dal momento che il grafo formato dai vari fiori è orientato ed aciclico (si sale sempre verso l'alto). Alla fine del paragrafo c'è peraltro indicato il modo di calcolare i cammini critici: ah ovviamente supporta i pesi negativi, dal momento che sono presenti nel relativo esempio.
A prescindere dall'applicazione e quindi dal contesto dell'attuale progetto..
Che differenza c'è a livello pratico tra una lista ordinata e un RBAlbero?
E' solo una questione di efficienza. Se la lista è ordinata sia l'inserimento sia la ricerca nel caso peggiore hanno complessità O(n) mentre per l'RBAlbero è O(lg n).
E su input grandi non è poco.. la ricerca tra 10^9 elementi in un RBAlbero avviene nel caso peggiore in 30 passaggi contro i 10^9 della lista...
Tralaltro l'albero può essere (visto) usato allo stesso modo di una lista tramite le funzioni successivo() e precedente().
A chi ha scritto come ordinare i punti con due coordinate direi che si può fare in base all'ascissa, e a parità di ascissa in base all'ordinata.
__________________
"What the Caterpillar calls the end of the World,
the Master calls a Butterfly"
(Il manuale del messia, Illusioni, Richard Bach)
Originally posted by Shimoda
A chi ha scritto come ordinare i punti con due coordinate direi che si può fare in base all'ascissa, e a parità di ascissa in base all'ordinata.
Originally posted by Shimoda
A prescindere dall'applicazione e quindi dal contesto dell'attuale progetto..

__________________
"What the Caterpillar calls the end of the World,
the Master calls a Butterfly"
(Il manuale del messia, Illusioni, Richard Bach)
Originally posted by Shimoda
Era solo un esempio su come gestire le 2 coordinate![]()
a rigor di logica gli alberi binari sono efficaci come gli RB Alberi ed efficienti uguali, gli alberi RB sono bilanciati, ma i B Alberi sono molto + facili da implementare.
(questo me lo ha fatto notare Shimoda)
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Originally posted by maynard80
a rigor di logica gli alberi binari sono efficaci come gli RB Alberi ed efficienti uguali, gli alberi RB sono bilanciati, ma i B Alberi sono molto + facili da implementare.
(questo me lo ha fatto notare Shimoda)
Originally posted by drakend
Beh sai ci sono gli algoritmi già pronti di AlgoTeam: puoi benissimo basarti su quelli e personalizzare.![]()
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Dopo aver creato la struttura fiore e un'altra tipo lista che lo contenga sto cercando di implementare una tabella hash tipo a matrice con due array,cioè con una funzione hash che mi detetermini la locazione in base a x e y.in caso di collisione inserisco in testa nella lista.
..qualcuno mi dice che ne pensa?thx
visto che la struttura dati è indipendente dalla creazione successiva della lista di adiacenza ho pensato ad una struttura che non rifletta necessariamente l'ordinamento dei prati e veloce per la ricerca e l'inserimento...
Ragazzi... AiutooO!! Qualcuno mi puo' dare una dritta?? ..ci sto davvero impazzendo! Non riesco a trovare l'idea giusta per la gestione di questo progetto, il problema principale è proprio sulla gestione dei punti (fiori). Come faccio a gestire le sovrapposizioni? ..ragiono sui piani? ..ragiono sui campi? Oppure tengo sempre solo conto dei singoli punti? Un fiore lo distingo per la sua coordinata cartesiana e per la sua appartenenza ad un prato oppure ad un campo? Trovo troppe variabili nei casi che si possono presentare...
Se qualcuno mi gira la dritta che puo' sbloccare questo dilemma gli saro' sempre grato!! ;oP
Originally posted by drakend
Qualcuno conosce un programma per disegnare RB alberi?!?

__________________
"What the Caterpillar calls the end of the World,
the Master calls a Butterfly"
(Il manuale del messia, Illusioni, Richard Bach)
ciao a tutti come procedono i lavori? io ora stao cercando di capire come calcolare i campi presenti nel piano! Non ho molte idee anche perchè non mi sembra semplicissimo considerato il fatto che poi nella funzione elimina si dovra cancellare dal piano il campocompleto contenente il fiore dato in input!
Voi come fate?
Originally posted by mitnik
ciao a tutti come procedono i lavori? io ora stao cercando di capire come calcolare i campi presenti nel piano! Non ho molte idee anche perchè non mi sembra semplicissimo considerato il fatto che poi nella funzione elimina si dovra cancellare dal piano il campocompleto contenente il fiore dato in input!
Voi come fate?
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
..un viaggio della nostra cara Ape è possibile se eseguito tra i due fiori (X0, Y0 ed X1, Y1) i quali dovrebbero essere dello stesso campo, giusto? Ma potrebbero essere validi anche viaggi su campi diversi?
MMmmhh...
Direi che il viaggio è possibile anche se esistono entrambi i punti..
Certo.. Certo! ;oP
Originally posted by Paolo74GRS
MMmmhh...
Direi che il viaggio è possibile anche se esistono entrambi i punti..
Certo.. Certo! ;oP
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Io non condivido invece che il viaggio deve essere fatto solo nello stesso campo. Puo' essere che due prati siano adiacenti, e quindi non si sovrappongono. L'ape puo' saltare quindi su campi diversi a patto che siano adiacenti, ovvero che l'equazione delle coordinate del progetto siano ancora verificata.
Almeno io ho capito cosi'...
Originally posted by Frigging
Io non condivido invece che il viaggio deve essere fatto solo nello stesso campo. Puo' essere che due prati siano adiacenti, e quindi non si sovrappongono. L'ape puo' saltare quindi su campi diversi a patto che siano adiacenti, ovvero che l'equazione delle coordinate del progetto siano ancora verificata.
Almeno io ho capito cosi'...
ma un campo è formato da uno o più prati se questi hanno in comune almeno un punto! Quindi per formare un campo non è necessario che due prati si sovrappongano ma possono anche essere adiacenti; si conseguenza viaggi da un prato all'altro sono possibile perchè appartenenti allo stesso campo; per contro invece viaggi tra campi diversi non sono possibili!
Per quanto riguarda la formazione dei campi sono giunto alla conclusione (forse sbagliata) che ad ogni insderimento di un nuovo prato devo ricalcolare e "riformare" la struttura contenente i campi! Giusto secondo voi?
Originally posted by mitnik
ma un campo è formato da uno o più prati se questi hanno in comune almeno un punto! Quindi per formare un campo non è necessario che due prati si sovrappongano ma possono anche essere adiacenti; si conseguenza viaggi da un prato all'altro sono possibile perchè appartenenti allo stesso campo; per contro invece viaggi tra campi diversi non sono possibili!
Per quanto riguarda la formazione dei campi sono giunto alla conclusione (forse sbagliata) che ad ogni insderimento di un nuovo prato devo ricalcolare e "riformare" la struttura contenente i campi! Giusto secondo voi?
Originally posted by Frigging
Due prati adiacenti non formano un campo. Un campo e' formato solamente da due o piu' prati che si sovrappongono.
Leggo nel testo:
Due prati A e B sono connessi se esiste una sequenza P1 , . . . , Pn di prati tale che A = P1 , B = Pn e per
ogni i ∈ {1, . . . , n − 1}, Pi ∩ Pi+1 = 0
Originally posted by Frigging
Due prati adiacenti non formano un campo. Un campo e' formato solamente da due o piu' prati che si sovrappongono.
Leggo nel testo:
Due prati A e B sono connessi se esiste una sequenza P1 , . . . , Pn di prati tale che A = P1 , B = Pn e per
ogni i ∈ {1, . . . , n − 1}, Pi ∩ Pi+1 = 0
Originally posted by drakend
Non è un = 0 sai? Nel file pdf c'è scritto che pi intersecato a pi+1 deve essere diverso dall'insieme vuoto, non che deve essere uguale...
che funzioni usate per dare il file in input alla funzione inserisci?
Originally posted by drakend
Non è un = 0 sai? Nel file pdf c'è scritto che pi intersecato a pi+1 deve essere diverso dall'insieme vuoto, non che deve essere uguale...
Ma se ho R(0,0,5,5) R2(6,0,7,5) non sono un campo ma cmq l'ape puo' fare un viaggio. No?
Sbaglio qualcosa?
Io ho chiesto a fiorentini qualche giorno fa riguardo al problema fra viaggi tra due campi diversi... ed è possibile! non capisco cosa insista mitnik...
due prati sono connessi se hanno almeno un punto in comune (o sono connessi attraverso un altro prato ma con la stessa regola del punto in comune)... se quindi due prati sono adiacenti non sono connessi (e formano due campi) ma io posso lo stesso fare un viaggio! basta che le coordinate me lo consentano!!
io sono ancora in alto mare nel pensare come farlo: invece di un albero pensavo al grafo su cui posso usare un algoritmo che trova cammini minimi (noi troviamo il max)-il problema è la rappresentazione del grafo!!!- infatti bisogna mappare le coordinate come vertici in array! adesso cercherò una soluzione a questo ma come procedimento mi sembra il migliore, perchè mantengo i nodi del grafo collegati in base alla vera connettività, cioè se c'è il link c'è anche la possibilità di un viaggio secondo le specifiche...
voi che ne pensate? c'è qualcuno che usa i grafi???
Paolo
Io volevo solo avere chiare le idee su quando si ha un campo e se utilizzate una struttura apposta per i campi che aggiornate o meglio deve essere rifatta ad ogni inserimento di un prato perche per esempio io inserisco il prato 0 0 2 2 poi il prato 2 3 4 5 ho due campi nel piano. Poi inserisco il prato 2 2 3 3 e tutti vanno accorpati in un unico campo!
ok allora
- se 2 fiori sono dello stesso campo viaggio --> ok
- se 2 fiori sono di 2 campi adiacenti viaggio --> ok
- se 2 fiori appartengono a 2 campi non adiacenti viaggio --> no
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
qui c'è il codice degli alberiRB, vorrei modificarlo per avere la possibilità di gestirlo con una coppia di chiavi (ascissa e ordinata) e non una sola
la struttura principale per capirci è
code:
typedef int key; typedef enum { red, black } color; struct rbnode { key v; color c; struct rbnode *left, *right, *up; }; typedef struct rbnode rbnode; typedef struct { rbnode *root, *nil; } rbtree;
__________________
IL MIGLIOR TELEFILM TRA I MIGLIORI.... VOTA!!
Io sono ancora indeciso su che fare.... a quanto pare tutti usano strutture più o meno efficienti per memorizzare tutto e velocizzare ricerca e inserimento, ma poi è un casino tirare fuori tutti i cammini e valutare il più pesante...
io avrei fatto un grafo che permetteva di trovare facilmente i cammini (semplicemente perchè gli algoritmi ci sono già) ma per implementarlo è un casino! principlamente non riesco a mappare le coordinate dei fiori negli indici degli array per trovare i vertici!!! help please!
P.
una domanda! se un prato si sovrappone per qualche punto ad un altro i valori dei fiori cambiano prendendo quelli del prato inserito per ultimo?
Originally posted by mitnik
una domanda! se un prato si sovrappone per qualche punto ad un altro i valori dei fiori cambiano prendendo quelli del prato inserito per ultimo?
ah è vero non ci avevo pensato! grazie
C'e' un errata corrige del progetto. Semplicemente un valore errato nei file txt.
Originally posted by maynard80
ok allora
- se 2 fiori sono dello stesso campo viaggio --> ok
- se 2 fiori sono di 2 campi adiacenti viaggio --> ok
- se 2 fiori appartengono a 2 campi non adiacenti viaggio --> no
Quali valori si potrebbero assegnare a dei campi di tipo int per un nodo sentinella(NIL) ???
..non mi viene in mente nulla, anche perchè il piano cartesiano già prevede le coordinate di tipo int negativo, oppure no ??? 
Originally posted by Paolo74GRS
Quali valori si potrebbero assegnare a dei campi di tipo int per un nodo sentinella(NIL) ???
..non mi viene in mente nulla, anche perchè il piano cartesiano già prevede le coordinate di tipo int negativo, oppure no ???![]()
Usa NULL e basta...
..la necessità di utilizzare la sentinella è per la gestione degli alberi RB, ho scelto quella come struttura, mi sbaglio? 
Se usi l'RB e' necessaria la sentinella in quanto devi rappresentare le foglie NIL come nere, altrimenti non rispetteresti una delle proprieta' del red-black tree.
Originally posted by Frigging
Se usi l'RB e' necessaria la sentinella in quanto devi rappresentare le foglie NIL come nere, altrimenti non rispetteresti una delle proprieta' del red-black tree.
quindi nessuno ha fatto come me... lo deduco dal deserto di risposte! cmq anche io userò un albero e mi sbatto ricorsivamente a cercare i cammini, alla fine forse è mejo...
domanda: vi sbattete tutti a fare gli RB? perchè se si riuscisse a mettere bene le chiavi in un albero binario secondo me può venire lo stesso bilanciato e quindi rimanere O(lgn)... cmq la domanda vera è come disporreste le chiavi? in base all'ordinata e in caso di parità in base all'ascissa o a caso e si spera nel bilanciamento?
Siccome il nodo NIL mi sembra OK come soluzione mi chiedo che valori potrei dare alle variabili di tipo int X e Y.. per esempio..
io ho seri problemi con ste' chiavi... sto usando RB... io cerco di inserire a nel sottoalbero a sx se l'ascissa è minore e nel sottoalbero dx se è maggiore, se l'ascissa è uguale allora vado a sx se l'ordinata è minore e a dx se è maggiore...
così però non mi va!!! help...please...
Originally posted by drakend
Non è vero che è essenziale usare queste sentinelle. Infatti il libro dice, a pagina 255, che:
"Per semplificare nel codice sorgente la gestione dei casi limite si usa la sentinella invece del valore NIL."
La sentinella semplifica la gestione dei casi limite nella funzione di cancellazione, perché fa scomparire alcune condizioni dai vari if, tutto qua. Infatti io ho preso l'implementazione degli alberi RB dal algoteam e l'ho adattata togliendo le sentinelle e usando il valore NULL perché mi risulta più semplice la comprensione.
PS Ovviamente genero alberi RB rispettosi delle quattro proprietà...
Qualcuno si esprimerebbe su questo?:
Visto che per la determinazione dei cammini devo comunque usare una lista di adiacenza ho pensato di usare direttamente una lista(ogni elemento è un vertice del grafo)con connesse delle altre liste di adiacenza.In questo modo avrei un'unica struttura per contenere i dati(piuttosto che un albero o altro) e per interrogarli..certo che la complessità è n,ed è un pò tanto....ma sto progetto è un casino.Thanks
cristiano: ciao anche io volevo usare un grafo, ma quando mi sono trovato di fronte alla necessità di usare liste per memorizzare i vertici da cui partono le adiacenze ho desistito... cmq la complessità è n per l'uso di liste, ma se poi ci applichi algoritmi efficienti magari sono migliori di quelli che cercano punto per punto i fiori per eseguire i cammini ricorsivamente su strutture più efficienti della tua...
io cmq uso un RB ormai... non so, mi torna voglia di grafoooo!
Quindi pensi di usare un RB per la complessità lg n contro quella n della lista?Oppure perchè la rappresentazione di grafi è un casino?(infatti sto cercando in rete del codice da personalizzare perchè da solo è un macello).
Mi pare che l'unico vantaggio che ne avrei sarebbe la quantità minore di mem. poichè uso la lista di aiacenza sia per contenere i dati che per costruire cammini.Con un'altra struttura dovrei cercare e inserire lì ma devo cmq creare una lista di adiacenza.....confusione alla n!!!
Cmq grazie.
si anche io mi sono "rassegnato" agli alberi... perchè un grafo lo sceglievo perchè mi dava la topologia del piano ed era facile trovare i cammini... ma che sbattimento implementarlo senza array...
Se qualcuno ha un'idea per i campi... la posti please... io per adesso sto cercando di vedere se posso calcolarli mettendo un campo apposito in ogni fiore che ne da l'appartenenza ad un determinato campo, assegnando il valore da un contatore di campi che viene incrementato. Il problema di questo approccio è quando inserisco un prato che UNISCE DUE CAMPI DISTINTI (come appunto capita per i primi tre prati dell'esempio di input del testo!!)
sarebbe un problema di connettività, quindi potrebbe essere risolto con un algoritmo union-find.... adesso spulcio il Cormen
Ho l'impressione che l'algoritmo per la ricerca dei cammini minimi da una singola sorgente di Dijkstra sia perfettamente adattabile al nostro scopo con poche piccole modifiche..
__________________
"What the Caterpillar calls the end of the World,
the Master calls a Butterfly"
(Il manuale del messia, Illusioni, Richard Bach)
cmq Per i grafi sto usando delle liste,non array.riguardo il problema dell'appartenenza ad un campo ho letto qualcosa cap. 22 del cormen,dove un elemento dell'insieme è "eletto" rappresentante e si fa riferimento a quello...per l'implementazione per ora BHO!.
Shimoda quindi tu hai usato un grafo??
Originally posted by eskimo
Shimoda quindi tu hai usato un grafo??

__________________
"What the Caterpillar calls the end of the World,
the Master calls a Butterfly"
(Il manuale del messia, Illusioni, Richard Bach)
io per i campi ho pensato ad un controllo sul perimetro del prato, mi spiego meglio...controllo se ogni punto del piano su ogni lato adiacente al prato contiene un fiore, se nn ho fiori adiacenti x nessun lato incremento la variabile campo,se ce li ho su un lato non la incremento, se ce li ho su 2 la decremento(caso che si presenta nell'esempio del prof)in quanto 2 lati occupati vul dire avere unito 2 campi "distanti" tra loro, si può contemplere infine un caso limite di tutti i lati occupati che vuol dire prati sovrapposti dove come nel caso di un lato occupato la variabile campo rimane
invariata...io l'ho buttata giù così...può andar bene?si accettano consigli e ovviamente critiche ![]()
Io non ho partecipato alle varie discussioni sul forum, ma per implementare le strutture ho usato alberi binari, ogni nodo è un punto con le sue belle coordinate e indicatore di campo, quindi per le varie intersezioni e adiacenze controllo semplicemente la presenza dei punti, i PRATI non li considero perchè non mi servono a nulla. Ho testato il prog. con gli input e funzia tutto, ma qualcuno ha altri input e output per testare?
Ah dimenticavo, vi sonsiglio vivamente di testare il vostro progetto con GCC sotto Linux , una versione recente , tipo la fedora 4 (che usa Fiorentini), eviterete spiacevoli sorprese !!!!
Originally posted by Ziotony.f4f
Ah dimenticavo, vi sonsiglio vivamente di testare il vostro progetto con GCC sotto Linux , una versione recente , tipo la fedora 4 (che usa Fiorentini), eviterete spiacevoli sorprese !!!!
Si, certo, io infatti mi rivolgevo alle persone che hanno usato compilatori sotto windows, visto che puo´ essere che in uno dei tanti processi non venga assegnato un valore NULL a un puntatore, sotto WIN , a questo verra´ automaticamente assegnato il valore NULL, mentre sotto LINUX, NOO. quindi c´é un seg. fault . Se il programma gira sotto WIN non e´ detto che vada con LINUX, ma e´ vero l´ inverso !! Questo almeno e´ cio´ che mi e´ capitato col progetto di Luglio !!
Originally posted by Ziotony.f4f
Si, certo, io infatti mi rivolgevo alle persone che hanno usato compilatori sotto windows, visto che puo´ essere che in uno dei tanti processi non venga assegnato un valore NULL a un puntatore, sotto WIN , a questo verra´ automaticamente assegnato il valore NULL, mentre sotto LINUX, NOO. quindi c´é un seg. fault . Se il programma gira sotto WIN non e´ detto che vada con LINUX, ma e´ vero l´ inverso !! Questo almeno e´ cio´ che mi e´ capitato col progetto di Luglio !!
..qualcuno mi sa dare una dritta su come gestire linput del "filename.txt" ???
Sto perdendo un sacco di tempo per gestire questa stringa in input come una sequanza di char, etc.. etc... 
Mi sapete dare una dritta per uscire da questo loop? 
DAI UN OCCHIO ALL'AREA FILEZ , SPERO DI ESSERE STATO UTILE A TUTTI QUELLI CHE HANNO QUESTO PROBLEMA !!!
..ah dimenticavo per l'input del nome io ho usato %s , un' array di caratteri di lunghezza 20, spero basti !!!!
Ok.. proverò a dare un'occhiata nella sezione FileZ.. Grazie 1000!
Quindi con il %s di scanf() riesci a caricare direttamente la stringa in un array?
Ziotony scusami non ho capito molto come fai a non considerare i prati...
Dici che basta aggiungere ad ogni fiore un puntatore al suo campo ? E i campi come li memorizzi ? Grazie mille !
Una questione relativa all'input..
..quando vado ad inserire il nuovo piano devo effettuare dei controlli per quanto riguarda il match tra numero elementi numerici nel file ed il numero di punti/fiori del piano da inserire?

Secondo quello che interpreto dal testo dovrei ritenere l'input valido, ma non so se questo caso va considerato..
Inoltre mi domando se i 2 punti in ingresso per definire il piano sono sempre nell'ordine angolo basso sx, angolo alto dx, oppure devo gestire l'input? 
Grazie in anticipo a tutti! 
Grazie Ziotony.. Ottimo post sull'arg[v] file..
Many Thanks! 
Originally posted by Paolo74GRS
Una questione relativa all'input..
..quando vado ad inserire il nuovo piano devo effettuare dei controlli per quanto riguarda il match tra numero elementi numerici nel file ed il numero di punti/fiori del piano da inserire?
Secondo quello che interpreto dal testo dovrei ritenere l'input valido, ma non so se questo caso va considerato..
Inoltre mi domando se i 2 punti in ingresso per definire il piano sono sempre nell'ordine angolo basso sx, angolo alto dx, oppure devo gestire l'input?
Grazie in anticipo a tutti!
Grazie Ziotony.. Ottimo post sull'arg[v] file..
Many Thanks!![]()
Per testare il prog. ho scritto una mail a Fiorentini per chiedergli se mi manda degli INPUT-OUTPUT, altrimenti dovremmo ingegnarci da soli, io ho provato con i test dei 2 esempi del testo, cioe' quello gia' fatto alla fine e quello del disegno. Spero risponda...
P.S. Per la questione dei prati, secondo me non serve a nulla mantenere i dati che individuano il prato stesso, tanto poi devo lavorare solo sui campi, vedi comandi elimina e campi . Io considero i miei campi come punti , messi tutti insieme in un albero, per distinguere campi diversi, ha aggiunto il campo CAMPO al nodo dell' albero.
ZioTony proviamo a fare degli esempi noi, e confrontare poi il nostro output.
che dici?
Va benone, hai gia' qualche input preparato, con i relativi files di testo?? Io preparo qualcosa e poi posto i miei nell'area filez... anche con i relativi miei OUTPUT
Ora come ora sto ordinando il codice... perche' ho cambiato carattere del testo ed ha sballato le tabulazioni ... uff che sbatti... appena finisco questo lavoraccio posto i files.
Piu che altro sono su percorsi molto grandi che non posso controllare a mano.
Tipo
i -1000 -1000 1000 1000
v 500 -1000 500 1000
cose del genere.
Cmq finisco di ordinare il codice e vedo di postarli.
Riguardo la corretteza dell'input...quando abbiamo delle coordinate negative queste sono sempre tutte negative o dobbiamo aspettarci qualcosa tipo (-4,0,2,8,nomefile)?se e' così sarebbe un caso in più ed è un casino.Thankz.
...e poi..giusto per mal comune mezzo gaudio:ma qualcuno è già arrivato all'algoritmo per det. i cammini?io sono ancora sulla costruzione dei prati da input...non mi passsa più!
dubbio:quando inserisco il prato con il file di testo, quindi calcolo
il viaggio,il programma deve uscire dall'esecuzione oppure mi deve
permettere di continuare l'inserimento nella stessa esecuzione???
la pazzia oramai....
Ho scritto questo programmino stupidissimo per generare casualmente il valore dei fiori in base alle coordinate del prato.
Magari a qualcuno puo' interessare.
code:
#include <stdio.h> #include <stdlib.h> /* Passare come parametri le coordinate del prato x0 y0 x1 y1 e un numero che fara' da resto per restringere il range dei numeri generati casualmente. */ int main(int argc, char *argv[]) { int i; int x0, y0, x1, y1, mod, n; if(argc == 6) { srandomdev(); srand48(random()); x0 = atoi(argv[1]); y0 = atoi(argv[2]); x1 = atoi(argv[3]); y1 = atoi(argv[4]); mod = atoi(argv[5]); n = (x1 - x0 + 1) * (y1 - y0 + 1); for (i = 1; i <= n; i++) printf(" %d", (mrand48())%(mod)); } else printf("Syntax is: x0 y0 x1 y1 mod"); printf("\n"); return 0; }
Ciao come trattate i valori negativi? ok che gli interi li prevedono ma a me capita che la funzione fgetc() mi restituisca prima il - come carattere e poi il numero.... io li metto tutti in un array e quando vado a stampare il contenuto dell'array mi stampa prima il - e poi il numero!!!
dove sbaglio?
Non funziona perche' prende un carattere.
Usa:
code:
int fscanf(FILE * restrict stream, const char * restrict format, ...);
ah ok... devo usare la fscanf e digli di usare %d come formato!!!
thx...
un'altra cosa: chi di voi ha pensato di fare la funzione VIAGGIO in mod o che operi ricorsivamente? perchè ho dei problemi... come andate avanti nella ricorsione? incrementando il punto di partenza fino alla fine o il punto finale fino alla fine? (spero di essermi spiegato, punto di partenza o punto finale sono i due parametri di viaggio(xstart,ystart,xend,yend))
Se qualcuno vuole fare dei test mi faccia sapere che ci si organizza....
Originally posted by Frigging
Ho scritto questo programmino stupidissimo per generare casualmente il valore dei fiori in base alle coordinate del prato.
Magari a qualcuno puo' interessare.
code:
cc8Gbaaa.o(.text+0x6a):generatore.c: undefined reference to `srandomdev' cc8Gbaaa.o(.text+0x6f):generatore.c: undefined reference to `random' cc8Gbaaa.o(.text+0x77):generatore.c: undefined reference to 'srand48' cc8Gbaaa.o(.text+0x106):generatore.c: undefined reference to ìmrand48'
Hai incluso stdlib.h, le definizioni di quelle funzioni sono li.
Io compilato sotto unix, uso mac per la precisione.
nessuno che ha usato un metodo ricorsivo per i cammini?
Dubbio: ma una volta che si costruisce un viaggio di qualita' massimo non e' richiesto di cambiare il contenuto dei fiori? Vero?
Cioe' io ho pensato: se l'ape esegue il viaggio se lo mangia ilnettare e il fiore ne rimane senza di conseguenza si azzera il suo valore....
Ho riletto il testo e non specifica nulla... sara' solo una paranoia... ma preferisco una vostra conferma 
Originally posted by Frigging
Dubbio: ma una volta che si costruisce un viaggio di qualita' massimo non e' richiesto di cambiare il contenuto dei fiori? Vero?
Cioe' io ho pensato: se l'ape esegue il viaggio se lo mangia ilnettare e il fiore ne rimane senza di conseguenza si azzera il suo valore....
Ho riletto il testo e non specifica nulla... sara' solo una paranoia... ma preferisco una vostra conferma![]()
Qualcuno ha dei test da fare? oppure indicare qualche caso particolare per testare il progetto?
Scusate insisto di nuovo: qualcuno ha qualche dritta per l'algoritmo che calcola i cammini? se fatto in modo ricorsivo meglio, altrimenti altre idee??
thx P.
ahahah oramai sono bruciato!!!
Si io ho dei testa da fare te li allego.
scusatem ma avete ottimizzato al massimo? o anche un algoritmo
non superottimizzato potrebbe andare bene?
qualche commento sui test?
ragazzi non capisco un paio di cose:
code:
nel progetto dice:"valore intero v(x; y) (eventualmente negativo) che rappresenta la qualitò del nettare del fiore stesso estraibile dall'ape (un valore negativo denota nettare di scarsa qualità e quindi tendenzialmente trascurabile)."
code:
Un campo C e un insieme C massimale di prati connessi, vale a dire: Per ogni coppia di prati A;B 2 C, A e connesso con B. Per ogni A 2 C e ogni prato P del piano tale che P 62 C, A non connesso con P.
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
io ho tenuto nel fiore l'informazione prato, e poi ragionavo su delle liste di campi, che a loro volta avevano attaccate liste di prati. Gli oggetti delle liste sono molto semplici, hanno solo numeri per identificare il prato o il campo.
Praticamente ragiono su quelle strutture poi con algoritmi union-find, che scattano ad ogni fiore inserito se questo coincide con un altro fiore.
Originally posted by maynard80
ragazzi non capisco un paio di cose:
code:
nel progetto dice:"valore intero v(x; y) (eventualmente negativo) che rappresenta la qualitò del nettare del fiore stesso estraibile dall'ape (un valore negativo denota nettare di scarsa qualità e quindi tendenzialmente trascurabile)."
code:
Un campo C e un insieme C massimale di prati connessi, vale a dire: Per ogni coppia di prati A;B 2 C, A e connesso con B. Per ogni A 2 C e ogni prato P del piano tale che P 62 C, A non connesso con P.
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Per quanto riguarda il primo quesito la risposta e' che il peso va memorizzato anche se negativo, da nessuna parte c'e' scritto di considerarlo 0.
Mentre se due prati sono adiacenti non appartengono allo stesso campo ma possono essere considerati cmq per un viaggio.
Rileggendo mi fa ridere il non determinismo della frase "tendenzialmente trascurabile".
quel "tendenzialmente trascurabile" potrebbe aprire la strada ad altre interpretazioni è troppo ambiguo.
__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !
Originally posted by maynard80
quel "tendenzialmente trascurabile" potrebbe aprire la strada ad altre interpretazioni è troppo ambiguo.
__________________
"What the Caterpillar calls the end of the World,
the Master calls a Butterfly"
(Il manuale del messia, Illusioni, Richard Bach)
come lo usi il test? e che valori dovrebbe dare?
Io ho allegato un file tar ad uno dei miei post precedenti, che contiene i file dei prati un file di input e il mio file di output in modo tale che poi possiamo confrontarlo.
esempio:
cat input | ./nome_programma > tuo_output
Potrebbe volerci un po per l'elaborazione in quanto sono presenti file molto grossi in quanto c'e' ad esempio un rettangolo di -1000 -1000 1000 1000
si ma io non riesco ad aprire il tuo file di test!
o meglio apro il file .tar ma non contiene nulla. Potresti rimetterlo?
provo a cambiare formato.
grazie
ok adesso vedo i file! ora provo i test e poi ti faccio sapere
Originally posted by Frigging
ahahah oramai sono bruciato!!!
Si io ho dei testa da fare te li allego.
Si sono sicuro, e funziona. Infatti il file da 12 mb fa test per vedere se il prog funzica con dimensioni cosi' grandi.
Dovrebbe essere il prato -1000 -1000 1000 1000
Cmq se l'algoritmo per il cammino o per la costruzione del grafo, ora non so come li hai fatti, e' lento ci vuole un po priam che termini.
Un conto e' bloccarsi e crashare un conto e' essere lento.
Al massimo commenta la riga di quel prato e provalo, poi dopo lo aggiungi e vai in pausa pranzo 
Originally posted by Frigging
Io ho allegato un file tar ad uno dei miei post precedenti, che contiene i file dei prati un file di input e il mio file di output in modo tale che poi possiamo confrontarlo.
esempio:
cat input | ./nome_programma > tuo_output
Potrebbe volerci un po per l'elaborazione in quanto sono presenti file molto grossi in quanto c'e' ad esempio un rettangolo di -1000 -1000 1000 1000
Ma io ho un piccolo piccolo I-book... 1.2ghz
quanto dipende dall'algo... se esponenziale neanche tra decenni... se e' lineare tempo di lanciare l'eseguibile

..qualcuno saprebbe indicarmi dove posso trovare il codice per cancellare un intero albero RB? ..intendo fare il free di tutti i nodi dell'albero, non riesco a farlo con una semplice visita ricorsiva, è possibile?

Originally posted by Frigging
Ma io ho un piccolo piccolo I-book... 1.2ghz
quanto dipende dall'algo... se esponenziale neanche tra decenni... se e' lineare tempo di lanciare l'eseguibile
ma mi spiegate a cosa cavolo servono gli alberi RB in questo progetto?
Io a calcolare tutto con quel file di input impiego sul minuto.
Personalmente uso gli RB alberi come struttura che momorizza i punti la quale ha una buona efficienza in fase di ricerca..
compilo normalmente e quando eseguo inserisco per
esempio: "i 2 3 4 5 (tuo file)" e calcolo viaggio?
Originally posted by Frigging
Io a calcolare tutto con quel file di input impiego sul minuto.
Mah, non penso che utilizzi file cosi' grandi. L'importante e' che funzioni e non crashi.
Bhe dai se abbiamo gli stessi output son proprio contento.
Quando ci mette il tuo per calcolare?
---
Risposta al post precedente:
puoi passare l'input cosi'
cat input | ./nome_tuo_prog > output
---
Se sei da windows, chi va di mano va sano e va lontano 
cmq si devi fare i x0 y0 x1 y1 nomefile
| All times are GMT. The time now is 09:39. | Pages (2): [1] 2 » Show all 262 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.