.dsy:it. Pages (18): « First ... « 6 7 8 9 [10] 11 12 13 14 » ... Last »
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)
-- [ALGORITMI]Progetto Zoom (http://www.dsy.it/forum/showthread.php?threadid=13146)


Posted by skorpius on 28-09-2004 15:28:

numeri naturali

raga, gestite in qualche modo il massimo dei numeri rappresentabili? Cioè se l'utente inserisce un bel
i 2^34 2^48 che cosa deve succedere?
Io credo che nelle supposizioni di correttezza dei comandi si intenda anche che non viene inserito alcun numero non rappresentabile, quindi non ho fatto nulla in proposito, ma secondo voi è una interpretazione corretta?


Posted by Eruyomë on 28-09-2004 16:54:

ciao eskimo forse potresti fare un'altra lista dove ci metti quelle già controllate e chiami ricorsivamente una funzione (per esempio una specie di area) sulle cordinate di tutti i punti possibili adiacenti.
A me funziona, constatando o meno il fatto di avere già visitato o meno una cella attraverso la lista supplementare non va in loop.

__________________
Io sono la fata verde. Sono la rovina e il rimpianto, la vergogna e il disonore. Io sono la morte, io sono l'assenzio...


Posted by contezer0 on 28-09-2004 17:29:

Originally posted by eskimo
Ciao, non credo di essere l'unico ad aver usato liste semplici per ordinare 1celle e kcelle... qualche idea su come scoprire un cammino?? non avendo liste di adiacenza come fare?? posso controllare


chi ti impedisce di usare liste di adiacenza?
non e' impossibile usare due strutture distinte (una per memorizzare le celle inserite e una per lavorarci su...) per i blocchi, l'area e il peso, una lista di adiacenza e' l'ideale, visto che il tempo e' lineare (in questo caso si puo' dire che e' lineare perche' il massimo grado del grafo delle celle e' 8)


Posted by mitnik on 28-09-2004 17:29:

Io , eskimo ho fatto cosi: Verifico che la k-cella sia occupata, se si la metto in una lista semplice di supporto;: poi controllo una ad una le 8 celle che la circondano, ognuna di esse che è occupata la metto nella lista (in coda). Una volta controllate le 8 celle della prima k-cella della lista di supporo passo alla seconda k-cella di tale lista e così per tutte quelle inserite. Alla fine conto quante k-celle ho nella lista di supporto e mi danno l'area. Fino ad ora ha funzionato.

Ora devo implementare la funzione blocchi. Consigli?


Posted by contezer0 on 28-09-2004 17:30:

ue' allora ma fiorentini preferisce un programma corto con strutture un po' ridondanti, o delle strutture perfette ma con un casino di funzioni vagamente simili?


Posted by contezer0 on 28-09-2004 17:33:

Originally posted by mitnik
Io , eskimo ho fatto cosi: Verifico che la k-cella sia occupata, se si la metto in una lista semplice di supporto;: poi controllo una ad una le 8 celle che la circondano, ognuna di esse che è occupata la metto nella lista (in coda). Una volta controllate le 8 celle della prima k-cella della lista di supporo passo alla seconda k-cella di tale lista e così per tutte quelle inserite. Alla fine conto quante k-celle ho nella lista di supporto e mi danno l'area. Fino ad ora ha funzionato.

Ora devo implementare la funzione blocchi. Consigli?


ma devi usare un flag che ti indica se sei gia' passato ...altrimenti non ti va in loop?

la funzione blocchi e' praticamente uguale! prendi una cella, fai la visita e colori quelle connesse, poi scorri nella struttura principale finche' non ne trovi una non visitata, incrementi il contatore e fai la visita, e cosi' via fino in fondo


Posted by eskimo on 28-09-2004 18:34:

grazie per i consigli... alla fine stamattina mi sono scervellato e ho tirato fuori una funzione schifezza (tanto lo sono tutte, devo avere un progetto con complessità infinita! :) ) praticamente ho aggiunto una flag nella lista di kcelle che viene usata dalle mie funzioni area e peso... è una specie di attraversamento in ampiezza senza liste di adiacenza:
flag 0 = cella mai visitata flag = 1 cella scoperta ma non visitata flag = 2 cella visitata.
a partire dalla cella che inserisco come argomenti nella funzione controllo i suoi vicini e li metto a 1 oltre ad inserirli in una lista tipo stack, poi metto a 2 la suddetta cella, poi a uno ad uno dallo stack faccio la stessa cosa...
alla fine dovrebbe funzicare
speriamo!
grazie mille per i consigli!!! :) :)


Posted by contezer0 on 29-09-2004 01:50:

Originally posted by eskimo
grazie per i consigli... alla fine stamattina mi sono scervellato e ho tirato fuori una funzione schifezza (tanto lo sono tutte, devo avere un progetto con complessità infinita! :) ) praticamente ho aggiunto una flag nella lista di kcelle che viene usata dalle mie funzioni area e peso... è una specie di attraversamento in ampiezza senza liste di adiacenza:
flag 0 = cella mai visitata flag = 1 cella scoperta ma non visitata flag = 2 cella visitata.
a partire dalla cella che inserisco come argomenti nella funzione controllo i suoi vicini e li metto a 1 oltre ad inserirli in una lista tipo stack, poi metto a 2 la suddetta cella, poi a uno ad uno dallo stack faccio la stessa cosa...
alla fine dovrebbe funzicare
speriamo!
grazie mille per i consigli!!! :) :)


mah...e se usi solo 1 e 0? non funziona lo stesso?
tanto ti serve solo per non "tornare indietro" ...cioe' prendi la cella che metti come argomento...la poni a 1, metti tutti i suoi vicini a 1 e li poni nello stack, fai la pop(), ti da una cella...metti anche tutti i vicini di questa (che non siano gia' a 1) nello stack, altra pop(), eccetera ovviamente incrementando un contatore ogni volta che colori una cella.
non e' piu' una visita in ampiezza...ma del resto la visita in ampiezza serve per il cammino minimo...a noi non interessa!
anzi direi che si tratta di una visita in profondita'!


Posted by contezer0 on 29-09-2004 02:03:

correggetemi se ho appena detto una cavolata pero'!
mi rendo conto che devo ripassare parecchio la teoria!

qualcuno ha gia' fatto dei test? ad esempio...se faccio x inserimenti e ci metto un tempo t, e con 10x inserimenti il mio programma ci mette 10t, vuol dire che la complessita' in tempo della funzione inserimento e' logaritmica, giusto?
questo perche' se invece fosse un inserimento in una lista ordinata, e ogni volta beccassi il caso peggiore, all'n-esimo inserimento dovrei fare n-1 confronti...che sommati agli n-2 dell'inserimento appena precedente e cosi' via...sarebbe la sommatoria di n...e quindi O(n^2).
invece se il tempo cresce linearmente vuol dire che faccio un quadrato di un logaritmo in base 2...mi sa che non c'e' scampo e non si riesce a fare meglio di cosi'...almeno a me non vengono in mente altri metodi...qualche consiglio?

il caso medio dell'inserimento in una lista ordinata e' sempre n quadro?


Posted by sirio on 29-09-2004 07:28:

Originally posted by contezer0
allora...in breve...ho usato 3 alberi, adesso sto decidendo se ottimizzare implementandoli effettivamente tutti diversi (in pratica uno per le 1 celle, uno per le k celle anche se non hanno abbastanza "peso" , e uno per le k celle effettive.
su ognuno di questi in effetti ho bisogno di cose diverse, ma dover riscrivere il cancella(), l'inserisci(), l'inserisci_pesato() e il sistema_adiacenze() per ognuno mi triplicherebbe la lunghezza del codice...

se qualcuno ha seguito il corso mi puo' dire se fiorentini preferisce un codice corto e leggibile a scapito di alcune variabili non utilizzate, oppure una maggiore ottimizzazione a scapito di leggibilita' e dimensione del sorgente?

comunque...sull'albero delle k celle effettive ovviamente eseguo le varie funzioni di numero blocchi, area e peso.

la funza blocchi e' una semplice visita in profondita' ripetuta, in realta' la ricorsione va fatta con due funzioni e non con una sola per poter tener conto delle celle non ancora colorate nelle visite successive.


Ciao, visto che hai finito e che come me hai usato degli alberi mi spieghi come faccio a visitare tutti i nodi di un albero?
In pratica devo valutare il peso del nodo quando cambiano p e q.
Ho scritto questo codice ma non va:

void valutaPeso(nodo *n)
{
if (n->peso >= parR)
// operazioni per inserire nel blocco
}


void cambiaBlocco(nodo *n, valutaPeso(nodo *))
{
cambiaBlocco(n->left, valutaPeso);
cambiaBlocco(n->root, valutaPeso);
cambiaBlocco(n->right, valutaPeso);

}


Grazie


Posted by maynard80 on 29-09-2004 12:30:

sono un coglione...ho fatto la matrice come lista di liste.....e mi hanno spiegato solo ora che e' una cazzata...bene...... :(

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by aghito on 29-09-2004 14:53:

ho analizzato un po' la situazione per blocchi()..
dunque l'idea di eskimo mi sembra corretta anche se serve solo 0 e 1 come detto da contezer0.

senza usare lo stack invece si può settare una variabile visita nella kcella dove 0 non visitata,1 visitata 2 visitata e analizzata..
poi si procede nello stesso modo di prima..cioè
prendi la kcella e metti var kblocco della kcella a 1 e variabile visita a 2.prendi i vicini e metti kblocco 1 e visita a 1.poi procedi prendendo elemento con kblocco 1 e visita !=2 e ripeti..

quale sarà la migliore?

__________________
alessandro colombini


Posted by contezer0 on 29-09-2004 17:36:

Originally posted by sirio
Ciao, visto che hai finito e che come me hai usato degli alberi mi spieghi come faccio a visitare tutti i nodi di un albero?
In pratica devo valutare il peso del nodo quando cambiano p e q.
Ho scritto questo codice ma non va:

void valutaPeso(nodo *n)
{
if (n->peso >= parR)
// operazioni per inserire nel blocco
}


void cambiaBlocco(nodo *n, valutaPeso(nodo *))
{
cambiaBlocco(n->left, valutaPeso);
cambiaBlocco(n->root, valutaPeso);
cambiaBlocco(n->right, valutaPeso);

}


Grazie


la funzione cambiaBlocco mi pare sia definita in modo un po' sbagliato....se devi passare un puntatore a funzione non devi mettere (in questo caso):

void cambiaBlocco(nodo *n, void*(funzione)(nodo *))

ma non sono sicurissimo pero'! okkio quando si lavora coi puntatori a funzione!!


Posted by pincopallino on 29-09-2004 20:00:

bah, con oggi io dovrei aver finito....quantomeno l'input che c'è nelle specifiche mi ritorna esattamente lo stesso output.....salvo sorprese dovrei aver fatto tutto come si deve =D

ora mi rimane solo da alcolare i tempi.....credo che la complessità del mio progetto sia altissima dato che ho usato solo una lista di adiacenza non ordinata

:D

l'importante è che non dia problemi....
speriam bene

__________________
"Che ne sai di un ragazzo che ti amava
che parlava e niente sapeva
eppur quel che diceva chissà perchè‚ chissà adesso è verità."


Posted by aghito on 29-09-2004 22:55:

chi ha degli input da provare?

__________________
alessandro colombini


All times are GMT. The time now is 16:34. Pages (18): « First ... « 6 7 8 9 [10] 11 12 13 14 » ... Last »
Show all 257 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.