.dsy:it. 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)
-- [ALGORITMI]Progetto Zoom (http://www.dsy.it/forum/showthread.php?threadid=13146)


Posted by Skilotto83 on 14-09-2004 15:33:

[ALGORITMI]Progetto Zoom

Apro il thread per il progetto...visto ke mi cimentero' nel farlo...
Se nn sbaglio è piuttosto semplice rispetto a quelli passati...e sikuramente piu' semplice di Banchetto di Luglio...
Voi avete idee??
Consigli??
Insomma...rimbokkiamoci le manike...

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by ghily on 14-09-2004 16:16:

Lo provo anche io in questo appello. In effetto quello di luglio era parecchio difficile.Ora lo stampo e mi metto a ragionarci un po'.
In bocca al lupo a tutti

Chao
Roby


Posted by karlost on 14-09-2004 17:34:

Help Zoom

Potremo aiutarci mutamente sulle cose più importanti, strutture dati da utilizzare e valutazione e costi delle prestazioni che seconde me è la parte più difficile.
Buon lavoro a tutti!


Posted by aghito on 14-09-2004 18:31:

si sicuramente aiutarsi va benissimo...
la cosa positiva è che il testo è molto chiaro su cosa si deve fare...
la parte difficile è l'implementazione..direi che sarebbe utile che ciascuno dica che stutture dati usare e perchè...ora me lo studio un po'...forza raga un po' d'impegno e lo passiamo sicuro!!

__________________
alessandro colombini


Posted by maynard80 on 14-09-2004 18:56:

dunque sicuramente la matrice va fatta con una lista di adiacenze (come in tutti i passati progetti) io non so ancora bene implementare una lista....... chi mi illumina?

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by Skilotto83 on 14-09-2004 19:31:

Ma quando dice che nn è efficente implementare ilò piano kome una matrice intende dire kome un array bidimensionale??
A me sembrerebbe la kosa piu' logika..ma in effetti poi perderebbe senso il progetto...

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by maynard80 on 14-09-2004 19:56:

beh probabilmete scorrere un array bidimensionale NxN sarebbe "costoso" in termini di efficenza

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by aghito on 14-09-2004 22:59:

si penso che come matrice si riferisca ad array bidimensionali perchè in quel caso bisogna porre un indice finito e lui non vuole vincoli di questo tipo.

ho un dubbio: dice che il parametro di riempimento è p/q con 0<p<=q poi però la funzione crea(p,q,k) imposta il parametro al valore minimo tra p/q e q/p..non è una contraddizione con quello detto prima?
infatti nell'esempio c'è c(25,3,5) e quindi p > q.
quindi una cella è occupata se ha almeno (3/25)*5*5=3 1-celle occupate ,giusto?

__________________
alessandro colombini


Posted by pincopallino on 15-09-2004 09:05:

Originally posted by aghito
ho un dubbio: dice che il parametro di riempimento è p/q con 0<p<=q poi però la funzione crea(p,q,k) imposta il parametro al valore minimo tra p/q e q/p..non è una contraddizione con quello detto prima?
infatti nell'esempio c'è c(25,3,5) e quindi p > q.

su questo hai ragione, effettivamente è una contraddizione, cavolino...

quindi una cella è occupata se ha almeno (3/25)*5*5=3 1-celle occupate ,giusto?

Questo mi sembra giusto, sempre che io non abbia sbagliato a capire il tutto

__________________
"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 sirio on 15-09-2004 09:14:

Originally posted by aghito
si penso che come matrice si riferisca ad array bidimensionali perchè in quel caso bisogna porre un indice finito e lui non vuole vincoli di questo tipo.

ho un dubbio: dice che il parametro di riempimento è p/q con 0<p<=q poi però la funzione crea(p,q,k) imposta il parametro al valore minimo tra p/q e q/p..non è una contraddizione con quello detto prima?
infatti nell'esempio c'è c(25,3,5) e quindi p > q.
quindi una cella è occupata se ha almeno (3/25)*5*5=3 1-celle occupate ,giusto?


Anch'io concordo con la tua osservazione, come ci comportiamo?


Posted by Skilotto83 on 15-09-2004 09:16:

Diciamo ke il progetto l'ho kapito..mi manka di kapire da dove iniziare...
:-D

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


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

allora siamo in 2! :-D

__________________
alessandro colombini


Posted by Polo on 15-09-2004 10:18:

La matrice di adiacenza la usereste per vedere quali blocchi sono connessi fra loro??
Perchè io implementerei tutto con un albero di ricerca.


Posted by aghito on 15-09-2004 10:35:

ho chiesto al prof riguardo il mio dubbio ecco la risposta:

> ho un dubbio: nel testo si dice che il parametro di riempimento è p/q
> con 0<p<=q poi però la funzione crea(p,q,k) imposta il parametro al
> valore minimo tra p/q e q/p..non è una contraddizione con quello detto
> prima?
> infatti nell'esempio c'è c(25,3,5) e quindi p > q.
>

p e q, k in crea(p,q,k) sono nomi arbitrari di parametri
(se le crea confusione, sostituisca crea(p,q,k) con crea(a,b,c) e
modifichi in modo coerente la specifica).

Poiche' qui non si richiede p<q, perche' l'operazione abbia senso
occorre prendere il minimo tra p/q e q/p.

Quindi in

c(25,3,5)

il parametro di riempimento e' 3/25 (non 25/3)

> in ogni caso il numero di 1 celle occupate per far si che la cella
> 3-cella sia occupata è (3/25)*5*5=3 ,giusto?
>

Si


questione risolta!

__________________
alessandro colombini


Posted by fraile on 15-09-2004 10:44:

Unhappy

Ke ne dite di una tabella hash!!??


Posted by aghito on 15-09-2004 10:49:

domanda apparentemente stupida

l'input può essere rediretto tipo a < in.txt?
in tale file devo scrivere

c 25 3 5
i 2 2
i 3 1
a 1 0
p 2 1
b
e 5 0
r 25 8
R 4
f

oppure

c 25 3 5 \n
i 2 2 \n
i 3 1 \n
a 1 0 \n
p 2 1 \n
b \n
e 5 0 \n
r 25 8 \n
R 4 \n
f \n

cioè l'andare a capo viene riconosciuto automaticamente o devo dire quando trovi \n fermati e fai operazioni della linea?

__________________
alessandro colombini


Posted by Polo on 15-09-2004 11:05:

se scrivi

qualcosa \n
qualcosaltro.

è come se mettessi 2 a capo ,sono due modi diversi per scriverlo.
quindi nel file di input scrivi normale nel codice per dividere un comando dall'altro dovrai riconoscere \n.


(era questo che chiedevi?)


Posted by aghito on 15-09-2004 11:28:

si era questo.
ma per riconoscere \n come si fa?
se uso isspace non fa distinzioni tra spazio o a capo.

__________________
alessandro colombini


Posted by Polo on 15-09-2004 11:35:

negli abbozzi degli altri progetti dove ,comunque, si presentava un problema simile prendevo un carattere alla volta e con un costrutto switch sceglievo cosa fare.Inoltre \n è un carattere qulasiasi quindi lo puoi trattare come un integer non c'è bisogno di usare funzioni strane.


Posted by aghito on 15-09-2004 11:49:

\n ha un valore ascii?
se si si potrebbe fare leggi caratteri e inseriscili in un array finche non incontri valore ascii associato a \n

il problema si pone perchè si deve capire quando finisce una riga.
a meno che si fa leggi il primo carattere che è un carattere e poi prendi tutte le cifre che ci sono prima del carattere successivo

c 25 3 5
i 4 5

leggi c e poi tutti fino a i

__________________
alessandro colombini


Posted by Skilotto83 on 15-09-2004 11:56:

Originally posted by aghito
\n ha un valore ascii?
se si si potrebbe fare leggi caratteri e inseriscili in un array finche non incontri valore ascii associato a \n

il problema si pone perchè si deve capire quando finisce una riga.
a meno che si fa leggi il primo carattere che è un carattere e poi prendi tutte le cifre che ci sono prima del carattere successivo

c 25 3 5
i 4 5

leggi c e poi tutti fino a i


se fai kosi' legge anke /n...ke nn deve essere un argomento della funzione crea..quindi mi sa ke qlks nn va...

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by aghito on 15-09-2004 15:05:

avevo pensato

int main(void){
......
printf("inserire linea:\n");
do{scanf("%c",&i);
switch(i){
case 'c': /* crea piano */
scanf("%d",&p);
scanf("%d",&q);
scanf("%d",&k);
/*crea(p,q,k); */
printf("carattere:%c \n p:%d \n q:%d \n k:%d \n e poi crea()\n\n",i,p,q,k);
break;

case 'i': /* aggiunta di un elemento */
scanf("%d",&a);
scanf("%d",&b);
printf("carattere:%c \n a:%d \n b:%d \n e poi inserisci()\n\n",i,a,b);
break;




}

}
while (i!='f'); /*


cioè fino a che non trovi f fai swicth..se c'è c leggi le successivie 3 cifre,se i 2 se R 1 e fai operazione associata....

l'output è:

inserire linea:
carattere:c
p:25
q:3
k:5
e poi crea()

carattere:i
a:2
b:2
e poi inserisci()

carattere:i
a:3
b:1
e poi inserisci()


mi sembra funzionante.cosa ne pensate?

__________________
alessandro colombini


Posted by maynard80 on 15-09-2004 15:17:

si, dovrebbe funzionare.

allora abbiamo capito come implementare il piano? amici continuano a dirmi "lista di adiacenze"..... ma non so da dove partire!

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by aghito on 15-09-2004 15:23:

finora le idee sono state:
liste di adiacenza
matrici di adiacenza
heap
albero di ricerca
NO matrici con array

sarebbe utile che chi le ha proposte spieghi perchè le vuole usare

__________________
alessandro colombini


Posted by mitnik on 15-09-2004 16:08:

Ma se una 1-cella è occupata lo devo decidere io?

Quindi se lo decido io le k-celle saranno occupate solo se ho unserito al loro interno un numero sufficiente di 1-celle occupate. Giusto o sbagliato?


Posted by pincopallino on 15-09-2004 16:14:

Originally posted by mitnik
Ma se una 1-cella è occupata lo devo decidere io?

Quindi se lo decido io le k-celle saranno occupate solo se ho unserito al loro interno un numero sufficiente di 1-celle occupate. Giusto o sbagliato?


giusto, una 1-cella è occupata quando fai un inserimento.
le k-celle sranno occupate solo se al loro interno avranno (pk^2/q) 1-celle occupate, altrimenti la k-cella è libera

__________________
"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 Flyzone on 15-09-2004 17:53:

Ragazzi...non sono mica riuscito a capire una cosa sulla creaazione del piano: nell'esempio mette un
c 25 3 5
quindi dovrebbe creare un piano da 25x3 di 5-celle (risoluzione 5), di conseguenza 125x15 da 1-celle...giusto? :pensa:


Posted by pincopallino on 15-09-2004 19:03:

Originally posted by Flyzone
Ragazzi...non sono mica riuscito a capire una cosa sulla creaazione del piano: nell'esempio mette un
c 25 3 5
quindi dovrebbe creare un piano da 25x3 di 5-celle (risoluzione 5), di conseguenza 125x15 da 1-celle...giusto? :pensa:


o ti sei spiegato male, o non hai capito niente, o non ho capito niente io.....

se non ho capito male, c 25 3 5 crea un piano vuoto con un numero di 1-celle infinite e con un numero di k-celle infinite, e pone la risoluzione a 5. Ovvero, tutte le k-celle hanno lato lungo 5 (quindi ogni k-cella è formata da 5x5 1-celle), mentre i numeri 25 e 3 se non erro ti servono per calcolare il parametro di riempimento facendo il min(25/3, 3/25)........

Se qualcuno la pensa diversamente da e pensa che io abbia capito male me lo può dire per cortesia? così se ne può discutere altrimenti io vado avanti col mio pensiero.....

__________________
"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 h3mpt0n on 15-09-2004 19:10:

bravo pincopallino, anch'io concordo con te

__________________
" Non ti vantare del domani, perchè non sai neppure che cosa genera l'oggi. "
PROVERBI 28,1


Posted by mitnik on 15-09-2004 19:23:

penso che sia giusto come dice pincopallino

In sostanza tu crei un piano di dimensioni infinite e di una certa risoluzione. Il piano infinito viene messo in ogn i progetto, se fosse altrimenti non sarebbe sconsigliato l'uso di matrici

Ciao


Posted by mitnik on 16-09-2004 08:23:

qualcuno mi spiega gentilmente la funzione area e come mai nel primo sempio del prof l'output prodotto da a 1 0 0 è 6?

Grazie


Posted by mitnik on 16-09-2004 08:37:

ho capito perchè l'area da 6 ma non sono sicuro sul modo di calcolo del blocco. Aiutino?


Posted by mitnik on 16-09-2004 09:55:

altro problema: sempre negli esmpi del testo, si arriva ad un certo punto all'input R 3. Ciò vuol dire che imposto la risoluzione a 3 tenendo sempre come riempimento quello precedente che nel nostro caso è 4/25 giusto?

Ora per avere una occupata devo avere al suo interno almeno pk^2/q 1-celle, nel nostro esempio abbiamo 4*9/25=36/25=1.44
Che si fa si considerano 1 o 2 celle?
A questo punto però arriva l'istruzione b che da come out 1, perchè? dove sbaglio?


Posted by skorpius on 16-09-2004 10:01:

area 1 0

Anche a me viene 6, e secondo me xchè ci sono 6 5-celle nel blocco della 5-cella(1,0):
la 1,0 la 0,0 la 2,0 la 2,1 la 3,1 e la 4,1.

Piuttosto c'è secondo me un altro problemino:
supponiamo venga dato il comando c 1 3 5.
Il rapporto è 1/3, ma 1/3*5^2 = 8,33 periodico.
Allora quante 1-celle devono essere presenti perchè la 5-cella sia considerata occupata? 8 o 9 secondo voi?


Posted by skorpius on 16-09-2004 10:03:

Question ehi!

ehi Mitnik, abbiamo individuato lo stesso problema insieme eh? :)


Posted by attila79 on 16-09-2004 10:44:

Si tratta di numeri interi, il primo intero maggiore di 8,33 è 9 quindi servono 9 1-celle


Posted by skorpius on 16-09-2004 10:55:

ok

L'ho pensata alla fine anch'io così, tra l'altro questa considerazione coincide (ed è l'unico modo) con l'esempio del prof che diceva mitnik


Posted by maynard80 on 16-09-2004 11:06:

ma state facendo simulazioni "carta e matita" del progetto?

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by torak on 16-09-2004 11:54:

L'implementazione migliore del piano è sicuramente una tabella di hash dinamica con una funzione biunivoca che assoccia una coppia (x,y) ad un valore k, che viene passato alla funzione di hash.
Sul libro di algoritmi c'è spiegato come funziona una tabella dinamica(una tabella che si allarga e si restringe dinamicamente a seconda del fattore di carico), ma va implementata.
In ogni caso ha performance molto buone, dato che la ricerca è in tempo O(1).
Sulle dispense di Torelli mi han detto che c'è la funzione biunivoca per ottenere k dalla coppia (x,y).


Posted by rach on 16-09-2004 12:12:

Pero la tabella di Hash ha una dimensione fissa,non puo implementare un piano infinito.. :-(


Posted by sirio on 16-09-2004 12:34:

Originally posted by rach
Pero la tabella di Hash ha una dimensione fissa,non puo implementare un piano infinito.. :-(


Vero. Ma le celle che cadono in una stessa posizione possono essere infinite, anche se l'efficenza però si va a benedire


Posted by mitnik on 16-09-2004 14:18:

ok allora si utilizza il numero intero piu vicino e maggiore di quello trovato.


Posted by mitnik on 16-09-2004 15:22:

scusate ma la funzione crea secondo me deve solo memorizzare i parametri k e p/q o q/p e poi "cancella" o meglio svuota la struttura dati che state usando per memorizzare le 1-celle. Questo perchè il piano deve essere infinito quindi servirebbe una struttura per memorizzare infinite k-celle al suo interno.

Lo so mi sono spiegato da schifo però scrivere in poche righe quello che si pensa per il progetto è difficile.

Ciao


Posted by eskimo on 16-09-2004 15:26:

Ciao, visto che la soluzione con la tabella di hash dovrebbe essere la soluzione da guru :cool: vediamo se si può fare: nella tabella ci metto tutte le celle? e la funzione biunivoca (x, y -> k e viceversa) mi porta alla cella giusta a seconda della risoluzione k?? se non è così credo di non averci capito na mazza ma non voglio già mettermi nell'idea di fare tutto con le liste!! :( :(
altrimenti liste di adiacenza con tutte le 1-celle dentro e poi calcoli a manetta ogni volta che devo sapere se a una certa risoluzione quella k-cella è piena o no, calcolo di blocchi, ecc ecc ecc
....sigh....
P.


Posted by skorpius on 16-09-2004 16:02:

Originally posted by mitnik
scusate ma la funzione crea secondo me deve solo memorizzare i parametri k e p/q o q/p e poi "cancella" o meglio svuota la struttura dati che state usando per memorizzare le 1-celle. Ciao


Si, anche secondo me.
Tra l'altro, confermatemi che il c deve essere x forza il 1° comando dato al programma.......non si possono avere inserimenti i prima di aver definito i 3 parametri vero?


Posted by mitnik on 16-09-2004 16:15:

secondo me la soluzione più semplice consiste in una lista che contiene le 1-celle, questo però complica un po il resto delle operazioni nel senso che si devono fare milti calcoli e scorrere la lista parecchie volte per funzioni tipo area. Si può usare però una struttura di supporto che memorizza le 1-celle contenute in un blocco. Bho che dite?

Si skorpius penso che la prima opeazione sia la crea.


Posted by aghito on 16-09-2004 16:20:

si prima cera poi inserisci un po' di cose e alla fine f

io direi che si memorizzano solo le celle occupate cioè inserite.
mi dicevano di usare un albero di ricerca binario per memorizzare tali celle e poi delle liste per mantenere di ogni cella le celle occupate adiacenti

__________________
alessandro colombini


Posted by aghito on 16-09-2004 16:49:

la tabella di hash sarà anche la soluzione da guru ma io non lo sono e guardando sul libro a me sembra molto difficile da fare. dato che il 18 va più che bene mi sa che non la userò...
ma degli alberi cosa ne dite..potrebbe essere una alternativa?

__________________
alessandro colombini


Posted by ghily on 16-09-2004 19:33:

Originally posted by mitnik
secondo me la soluzione più semplice consiste in una lista che contiene le 1-celle, questo però complica un po il resto delle operazioni nel senso che si devono fare milti calcoli e scorrere la lista parecchie volte per funzioni tipo area. Si può usare però una struttura di supporto che memorizza le 1-celle contenute in un blocco. Bho che dite?

Si skorpius penso che la prima opeazione sia la crea.


anche io avevo pensato di usare le liste. Logicamente i tempi di ricerca non sono ottimali perchè bisogna fare più visite sulla lista per ottenere un risulato. Ma davvero a noi ci importa?? oppure è meglio scrivere un programma che funzioni?? Capendo però dove è il lato migliorabile del progetto.Almeno teoricamente.
Chao
Roby


Posted by Paolo74GRS on 16-09-2004 20:23:

Mi ci metto anch'io..
Pensare il piano delle 1-celle inserite come liste di adiacenza e servirsi poi di un albero di supporto per la parte di ricerca??

Potrebbe andare no?


Posted by Eruyomë on 17-09-2004 13:30:

ma per lista di adiacenza intendete una lista di liste? Cioé, una lista per le ascisse che contiene liste con le ordinate?

__________________
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 Tosh on 17-09-2004 14:44:

Chi ha proposto la tabella di hash potrebbe illustrare un po' come applicherebbe la soluzione al problema?


Posted by LazerPhEa on 17-09-2004 14:50:

Originally posted by Tosh
Chi ha proposto la tabella di hash potrebbe illustrare un po' come applicherebbe la soluzione al problema?

Se vai qui trovi tutto quello che ti serve, compresi esempi di codice C!
IMO comunque non serve un hash ad indirizzamento aperto; gestisciti le collisioni con le liste concatenate e sei a posto! :approved:
Io nel mio progetto ho fatto così ed è andato tutto liscio...

__________________
Questo è il giardino
Dove il principe muore
Nessun sentiero
Nessun destriero
Soltanto un nome... Eterno...


Posted by Paolo74GRS on 17-09-2004 15:51:

Partiamo dall'idea di inserimento dei vari punti (X, Y)..
La prima ipotesi, secondo me, e' di utilizzare delle liste di adiacenza.. Ma a quel punto mi sorge un dubbio: e' possibile utilizzare una rappresentazione con liste di adiacenza se il mio grafo puo' essere non connesso??
Potrei avere alcune 1-celle inserite che rappresentano una struttura non connessa all'intero grafo..
Vero? In pratica una foresta..
Ditemi se ci sono oppure sto andando fuori strada!!!


Posted by marchinkus on 17-09-2004 16:11:

Ragazzi, aiutatemi, la formulina per sapere quando una k-cella è piena, è chiara.
Il problema è:supponendo di avere inserito 5 1-cella in posizioni disparate sul piano, come pensate di fare per controllare se esiste qualche k-cella piena?????


Posted by attila79 on 17-09-2004 16:31:

Una tabella hash ha le dimensioni fissate, cosa succede se tutta la tabella è occupata da elementi? Come si fa ad aumentare le dimensioni se e possibile? Mi spiego meglio, nel caso voglia utilizzare la tabella hash per contenere le 1-celle se arrivo ad un punto in cui la tabella e piena, la posso allargare ? se si come?
grasias per l'eventuale risposta


Posted by Skilotto83 on 17-09-2004 18:23:

Originally posted by marchinkus
Ragazzi, aiutatemi, la formulina per sapere quando una k-cella è piena, è chiara.
Il problema è:supponendo di avere inserito 5 1-cella in posizioni disparate sul piano, come pensate di fare per controllare se esiste qualche k-cella piena?????


teorikamente kontrolli dalla posizione in cui sei se aggiungendo uno alla cordinata x e uno alla y vai in una posizione occupata...e kontinui kosi' fino a quando hai aggiunto K a x e y....
quindi kn K=3 da (3,4) aggiungi fino a (6,7)...e vedi se il numero di celle trovate okkupate è maggiore al fattore di riempimento...
se si' hai una K-Cella!
Piuttosto...kome pensate di risolvere il problema della funzione ke restituisce il numero di blokki sul piano???
La vedo dura... Anke perkè bisogna skndie tutto il piano...ke potenzilmente è infinito....potrei avere una K-cella e quindi un blokko anke a 2000 celle di distanza...sparsa in mezzo al piano...no??

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by maynard80 on 17-09-2004 19:13:

ma non si puòridurre il piano alle celle occupate? nel senso che semplicemente le celle libere non ci sono, quindi il mio pisno "infinito" in realtà non è altro che una lista delle celle occupate ordinate secondo le loro x,y.
In questo modo una cella è occupata se esiste nella lista, libera altrimenti, le celle sono adiacenti se le loro x o y sono consecutive ecc..
Forse sto rasentando l'idiozia, ma magari semplicemente potrebbe funzionare, no?

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by marchinkus on 17-09-2004 20:43:

se non ho capito male, guardando la figura 1, creando un piano K , creo automaticamente una infinità di celle predefinite, ogni 2 posizioni, ogni 3 posizioni, ogni k posizioni cominciando dal p.to 0,0; quando si chiede di eliminare una k-cella in teoria le coordinate passate alla funzione dovrebbero corrispondere ad una posizione predefinita:esempio se ci sono k-celle di lato 3, le coordinate passate alla funzione elimina dovrebbero essere 0,0 oppure 3,0 oppure 3,3 .....3,6 che dite stò impazzendo?????


Posted by torak on 18-09-2004 00:12:

Quello che avevo proposto io è l'uso di una tabella hash con concatenazione(la normale tabella di hash) non una tabella ad indirizzamento aperto. Sul libro di algoritmi è al capitolo 12.2.
Chiaramente dovete usare una prefunzione, che si trova negli appunti di torelli, che trasforma (x,y) in k.
Questo k lo date in pasto ad una funzione di hash ben fatta(sempre sul libro spiega dei metodi molto buoni per costruirla) in modo da minimizzare le collisioni che bisogna prevedere di gestire con liste.
A questo punto, una volta costruita l'algoritmo per la tabella di hash, bisogna andare a vedere il capitolo 18.4 del libro, che parla di come gestire dinamicamente la dimensione delle strutture dati in modo da adattare le dimensioni all'effettivo utilizzo. E' una parte che viene spiegata poco, ma è il modo migliore per gestire la cosa. Alternativamente si può sempre decidere di fare una dimensione molto grande della tabella di hash, così da permettere di inserire molti elementi, però questo è un errore, perchè benchè funzioni per gli esempi di prova fa delle assunzioni sulle dimensioni dell'input. In più avere 10 mega di memoria occupata quando in realtà memorizzate 3 cagate non mi sembra il massimo, quindi se riuscite a realizzare una tabella di hash e avete tempo, guardatevi pure quella cosa... secondo me lo ammazzate fiorentini.


Posted by maynard80 on 18-09-2004 09:13:

no, no la struttura non deve avere una grandezza di partenza, anche un arrey può aumentare dinamicamente, lui vuole una struttura malleabile che sia ottimizzata al problema.

__________________
msn Messenger: giamma80 at tiscali.it
ATHENA !


Posted by Tosh on 18-09-2004 09:25:

nella tabella di hash memorizzereste solo le 1-celle, giusto?
Quindi data una k-cella, per capire se è occupata, bisognerebbe applicare la funzione di hash a ogni 1-cella contenuta nella k-cella. Al limite ci si potrebbe fermare quando il numero di 1-celle occupate in un certo momento della scansione è già >= pk^2/q.


Posted by Skilotto83 on 18-09-2004 10:07:

Originally posted by maynard80
ma non si puòridurre il piano alle celle occupate? nel senso che semplicemente le celle libere non ci sono, quindi il mio pisno "infinito" in realtà non è altro che una lista delle celle occupate ordinate secondo le loro x,y.
In questo modo una cella è occupata se esiste nella lista, libera altrimenti, le celle sono adiacenti se le loro x o y sono consecutive ecc..
Forse sto rasentando l'idiozia, ma magari semplicemente potrebbe funzionare, no?


Infatti metti solo le celle okkupate.....
Teoikmente il piano è visto kome la memoria del calcolatore....nn è infinita in pratika...ma lo è potenzialmente....poi quelle okkupate le puoi mettere dove vuoi...anke in un albero binario di ricerka...

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by VdM on 18-09-2004 10:32:

Appena letto il progetto...

Buongiorno a tutti,

per motivi di tempo & lavoro, ho cominciato a pensare al progetto solo poco fa.

Vedo dalla discussione che la struttura dati di base dovrebbe essere una hash table per le 1-celle. Ciò effettivamente garantirebbe tempi ottimali per la ricerca, l'inserimento la cancellazione di una 1-cella (entro buoni limiti, anche con risoluzione dei conflitti con liste concatenate). Per trattare le k-celle, la mia idea sarebbe di scorrere tutti gli elementi della hash table e controllando in quale k-cella cadono, ovviamente appena trovo un elemento di una k-cella non esistente creo tale k-cella.
Il problema di verificare i k-blocchi compare sia per k generico che in particolare per k=1. A questo punto sono bloccato - o la cosa è troppo semplice da non vederla o troppo complicata - sulla relazione di adiacenza. Per ciò che è scritto nel prog. mi è sembrato di capire che le k-celle (per le 1-celle è verificabile) siano adiacenti se hanno almeno un punto (suppongo di confine) in comune. Quindi, data una k-cella, questa può avere al massimo 8 k-celle adiacenti (1 lato in comune, o al più uno spigolo).
S'ha da verificare dunque per ogni k-cella le 8 posizioni adiacenti, o esiste una strategia (nn avendo potuto seguire il corso di Torelli...) più raffinata?

Grazie per eventuali risposte, e buon lavoro:)

G. "VdM"


Posted by Tosh on 18-09-2004 11:52:

secondo me non conviene memorizzare infomazione riguardo alle k-celle, perchè in qualsiasi momento l'utente può modificare risoluzione, parametro di riepimento nonchè celle occupate.
L'informazione riguardo le k-celle mi sembra quindi poco riutillizabile.


Posted by aghito on 18-09-2004 12:32:

La soluzione proposta da torak sembra poter funzionare però non mi convince in quanto quello scritto nel 18.4 si può applicare a qualsiasi struttura statica tipo pile code e matrici di array che sono esplicitamente vietate. Io userei una lista in cui segnare le sole 1-celle occupate..usare un albero non mi sembra utile.infatti se l’input fosse quello dell’esempio si avrebbe un albero alto n dati n input in quanto ogni elemento è sempre maggiore del precedente..

Partendo da questa lista quando ho la risoluzione k creo una nuova struttura dati tramite una funzione che facendo una scansione della lista associa ogni 1cella occupata alla rispettiva k-cella..alla fine conto le 1-celle di ogni k-cella e vedo se è occupata..per blocchi ci sto pensando…

__________________
alessandro colombini


Posted by Skilotto83 on 18-09-2004 12:56:

Per definizione....una K-cella esiste solo se è okkupata..giusto??

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by mitnik on 18-09-2004 13:14:

esatto. Secondo me le k-celle ci stanno "sviando" nel senso che la cosa importante sono le 1-celle che vanno memorizzate in una struttura dati, (io penso di usare una lsta) quando poi si fanno le varie operazioni tipo quella di blocchi, peso... entreranno in gioco le k-celle che in realtà sono sempre nel piano in numero infinito e dipendono dalla risoluzione.
Ok, a questo punto io creerei una struttura dati di supporto che puo essere un'altra lista. Questa avrà un puntatore a dx e uno giu, a dx si mette l'informazione della k-cella OCCUPATA e giu si mettono le 1-celle che la occupano.
Puo andare? che ne dite?

Ciao


Posted by torak on 18-09-2004 13:46:

Originally posted by aghito
La soluzione proposta da torak sembra poter funzionare però non mi convince in quanto quello scritto nel 18.4 si può applicare a qualsiasi struttura statica tipo pile code e matrici di array che sono esplicitamente vietate. Io userei una lista in cui segnare le sole 1-celle occupate..usare un albero non mi sembra utile.infatti se l’input fosse quello dell’esempio si avrebbe un albero alto n dati n input in quanto ogni elemento è sempre maggiore del precedente..

Partendo da questa lista quando ho la risoluzione k creo una nuova struttura dati tramite una funzione che facendo una scansione della lista associa ogni 1cella occupata alla rispettiva k-cella..alla fine conto le 1-celle di ogni k-cella e vedo se è occupata..per blocchi ci sto pensando…


Il 18.4 specifica che le tabelle dinamiche si possono usare con qualsiasi struttura, semplicemente per dire che il concetto è separato dal tipo di struttura dati che use. Liste e vettori non sono vietati, semplicemente hanno tempi di inserimento, ricerca e cancellazioni peggiori, quindi visto che è un esame di algoritmi si suppone utilizzi buone strutture dati.
Una tabella di hash è una buona struttura dati per rappresentare un piano, e con l'allargamento dinamico è ottima, non capisco le tue perplessità...
In più risolvere le collisioni con liste concatenate prevede la possibilità intrinseca delle tabelle di hash di fare collisioni(anche se con bassa probabilità) ma il numero di collisioni rimane basso perchè tieni sotto controllo il fattore di carico. ATTENZIONE: quella che propongo io NON è un hash a indirizzamento aperto. L'indirizzamento aperto è complesso nel caso della cancellazione, e non mi sembra il caso di complicarmi la vita così.
Considerando la bassa probabilità di collisione la tabella di hash con risoluzione delle collisioni con liste semplici è QUASI una struttura statica, quindi il tempo di ricerca inserimento e cancellazione è sempre buono. C'è una probabilità in realtà che tutti gli elementi facciano collisione, ma con una buona funzione di hash questa probabilità e talmente piccola che tutto il dsy potrebbe vincere il superenalotto più facilmente probabilmente.


Posted by eskimo on 18-09-2004 13:47:

Anche secondo me ci vogliono più strutture dati o almeno bisogna tenere le info sulle attuali k-celle. L'utente può ogni volta cambiare risoluzione o fattore riempim. e in questo caso si rifà la struttura che memorizza le k-celle.... così si fanno calcoli sulla struttura delle 1-celle ogni volta che bisogna cambiare risoluzione o fattore riemp, mentre si lavora sulle k-celle se bisogna fare calcoli tipo area, peso o blocchi.
credo che il costo di due strutture dati sia minore del costo di fare molte operazioni sempre su ste 1-celle....

il problema di come dici tu mitnik è che bisogna tenere info di una k-cella anche se ha solo una 1-cella ed è considerata libera e visto che non sai a che risoluzione stai lavorando, come distribuisci le 1-celle? lo puoi fare secondo la risoluzione corrente ma ad ogni cambio di risoluzione devi rifare proprio tutto! se sai come affrontare il prob fammi sapere che è una sol che mi piace...
:)


Posted by Tosh on 18-09-2004 15:06:

per favore, alcune persone cerchino di scrivere più chiaro altrimenti non si capisce un c..zo e perdiamo tutti un casino di tempo.


Posted by Tosh on 18-09-2004 15:19:

Re: Appena letto il progetto...

Originally posted by VdM
Quindi, data una k-cella, questa può avere al massimo 8 k-celle adiacenti (1 lato in comune, o al più uno spigolo).
S'ha da verificare dunque per ogni k-cella le 8 posizioni adiacenti, o esiste una strategia (nn avendo potuto seguire il corso di Torelli...) più raffinata?



non vedo una strategia radicalmente diversa.
cmq per ogni k-cella potresti esplorare meno di 8 "vicini", perchè alcuni li hai già verificati in quanto "vicini" di una k-cella già verificata precedentemente.


Posted by mitnik on 18-09-2004 16:27:

cavolo è un casino verificare se una 1-cella è contenuta in una k-cella. Avete idee a proposito?


Posted by pincopallino on 18-09-2004 19:14:

Originally posted by mitnik
cavolo è un casino verificare se una 1-cella è contenuta in una k-cella. Avete idee a proposito?


bhe della k-cella presa in considerazione sai la coordinata in basso a sx, quindi ti calcoli le coordinate in alto a dx, e per sapere se una 1-cella è contenuta in quella k-cella basta che confronti le coordinate della 1-cella con quelle della k-cella. tipo la k-cella ha coordinate (0,0) la risoluzione è 3, per verificare se una 1-cella(x,y) è contenuta in quella k-cella basta controllare: 0<= x < 3, 0<= y < 3.....

io farei così......sonostata spiegata?

:D

__________________
"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 Skilotto83 on 18-09-2004 19:22:

Originally posted by pincopallino
bhe della k-cella presa in considerazione sai la coordinata in basso a sx, quindi ti calcoli le coordinate in alto a dx, e per sapere se una 1-cella è contenuta in quella k-cella basta che confronti le coordinate della 1-cella con quelle della k-cella. tipo la k-cella ha coordinate (0,0) la risoluzione è 3, per verificare se una 1-cella(x,y) è contenuta in quella k-cella basta controllare: 0<= x < 3, 0<= y < 3.....

io farei così......sonostata spiegata?

:D


Infatti...nulla di pu' semplice...anke io ho implementato il tutto kosi'...
:D

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by marchinkus on 19-09-2004 09:11:

Scusate, quale sarebbe la k-cella "in considerazione"?
Il problema, secondo me è che le k-celle non SONO CREATE in riferimento alle coordinate delle 1_cella presenti nel piano: le k-celle già ESISTONO ed hanno delle precise coordinate: le inizializziamo noi quandro creiamo il piano con risoluzione k.
Potremo avere un piano suddiviso in k-celle quadrate di lunghezza 2, oppure di 3, di 4 di ........n
cOSA DITE?


Posted by mitnik on 19-09-2004 10:26:

Appunto. Se le k-celle non le hai memorizzate in nessuna struttura (perchè sono infinite) allora appena hai una 1-cella devi verificare se è contenuta nella k-cella appropriata. Il mio problema è trovare la k-cella appropriata.

Es. Supponi di avere risoluzione 3.
Nel piano hai la 1-cella (3,3)
A questo punto devi valutare in quale k-cella è contenuta.
Come fai a capire che deve essere la (3,3),(6,6)?


Posted by ghily on 19-09-2004 16:02:

realizzare invece le k-celle come stack di 1-celle?? non potrebbe essere una idea?? Quando si occupa una 1-cella viene creato lo stack per k-cella e viene inserita la 1-cella occupata.Resta sempre il problema di come scopire se una cella che non è occupata appartiene ad una certa k-cella. :?

Chao Roby


Posted by pincopallino on 20-09-2004 09:31:

Originally posted by marchinkus
Scusate, quale sarebbe la k-cella "in considerazione"?
Il problema, secondo me è che le k-celle non SONO CREATE in riferimento alle coordinate delle 1_cella presenti nel piano: le k-celle già ESISTONO ed hanno delle precise coordinate: le inizializziamo noi quandro creiamo il piano con risoluzione k.
Potremo avere un piano suddiviso in k-celle quadrate di lunghezza 2, oppure di 3, di 4 di ........n
cOSA DITE?


partendo dal presupposto che tu voglia sapere se una 1-cella è contenuta in una k-cella nel momento in cui ti viene richiesta l'area od il peso, per sapere qual'è la cella presa in considerazione ti bastano i numeri x,y che vengono passati alla funzione area(x,y) o peso(x,y). Infatti, partendo per esempio dalla funzione area(x,y), la k-cella che per prima viene presa in considerazione è k-Cella(kx,ky).........di qui poi dovrai calcolare l'area dell'intero blocco cui appartiene quella k-cella
secondo me =D

__________________
"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 mitnik on 20-09-2004 14:11:

Avete qualche idea per implementare la funzione blocchi?

Io pensavo di richiamare la funzione area finchè non ho più elementi nella lista delle k-celle incrementando un contatore ogni volta che una cella non è connessa ad un'altra. Mi sembra un po complicato, voi che fate?


Posted by Skilotto83 on 20-09-2004 14:45:

Si'...anke sekondo me è kosi'...in effetti è la parte piu' inkasinata...
Kmq l'idea è quella...una volta ke sai quali sono tutte le k-celle sul piano calcoli tutti i blokki...continuano fino a quando nn ci sono piu' k-celle...
Oppure anke prendendo la coordinata x,y di valore maggiore...ke quindi risulterà la piu' esterna..
:D

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by contezer0 on 20-09-2004 17:22:

Salve a tutti!
scusate se torno ancora sul discorso della struttura dati ottimale per memorizzare le 1-celle...
nel caso di tabella hash, in base a cosa la si dovrebbe dimensionare?

mi spiego...se non ricordo male l'uso di una tabella hash e' comodo e veloce nel caso in cui si conosca a priori il numero massimo degli elementi da inserire.
in questo caso, non conoscendolo, si puo' ovviare con una tabella dinamica, ma in questo caso non va usata una nuova funzione hash, e quindi non bisogna anche ricalcolare il codice hash di tutti gli elementi inseriti prima del ridimensionamento?


Posted by Paolo74G on 20-09-2004 23:10:

Ciao a Tutti..
Sentite un po' questa: le K-celle vanno memorizzate comunque, siano esse libere oppure occupate (decisione presa tramite il calcolo del fattore di riempimento) perche' se una sola 1-cella è presente, asiste anche la sua K. Infatti se alla medesima risoluzione K vengono fatti dei nuovi (I)nsert potrebbe essere che alcune K-celle diventino da libere.. oKKupate...
Non è così secondo voi?

Adesso porgo una domanda...
Nel caso K=1 come ci si puo' comportare?


Posted by mitnik on 21-09-2004 07:40:

Certo che vanno memorizzate, ma solo quelle dipendenti dalle 1-celle presenti sul piano. E' inutile (anche impossibile perchè sono infinite) memorizzare in una struttura un k-cella che al suo interno non ha nemmeno una 1-cella.


Posted by Skilotto83 on 21-09-2004 08:45:

Originally posted by mitnik
Certo che vanno memorizzate, ma solo quelle dipendenti dalle 1-celle presenti sul piano. E' inutile (anche impossibile perchè sono infinite) memorizzare in una struttura un k-cella che al suo interno non ha nemmeno una 1-cella.


E' vero..ma il suo ragionamento è ke dopo aver calcolato per dire l'area di un blocco...potrei voler inserire una cella e quindi devo per foza ripetere tutta la scansione del piano se voglio riavere l'area dello tesso blocco..perkè kn l'aggiunta di una 1-cella potrebbe essere diventato un blokko piu' grande......kapito?

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by mitnik on 21-09-2004 11:01:

ok.

Come calcolate l'area di una k-cella? come fate a trovare tutte le k-celle che hanno un punto in comune e che sono connesse alla cella data alla funzione?

Sto diventando matto su quella funzione e magari la soluzione è semplice


Posted by joe.satriani on 21-09-2004 11:38:

qualcuno saprebbe dirmi come implementare la funzione hash che parte da una lista di 1-celle e le divide in base al blocco di appartenenza?


Posted by sirio on 21-09-2004 18:29:

Originally posted by contezer0
Salve a tutti!
scusate se torno ancora sul discorso della struttura dati ottimale per memorizzare le 1-celle...
nel caso di tabella hash, in base a cosa la si dovrebbe dimensionare?

mi spiego...se non ricordo male l'uso di una tabella hash e' comodo e veloce nel caso in cui si conosca a priori il numero massimo degli elementi da inserire.
in questo caso, non conoscendolo, si puo' ovviare con una tabella dinamica, ma in questo caso non va usata una nuova funzione hash, e quindi non bisogna anche ricalcolare il codice hash di tutti gli elementi inseriti prima del ridimensionamento?


In effetti hai ragione se usi una tab. hash a indirizzamento aperto, ciò non vale se usi la tab. con liste concatenate.


Posted by Paolo74GRS on 21-09-2004 22:31:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho scelto di implementare la struttura 1-celle tramite un albero; il mio dubbio riguarda la creazione dell'albero binario di ricerca contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???

Qualcuno può darmi una dritta?
ciao


Posted by Paolo74GRS on 21-09-2004 22:31:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho scelto di implementare la struttura 1-celle tramite un albero; il mio dubbio riguarda la creazione dell'albero binario di ricerca contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???

Qualcuno può darmi una dritta?
ciao


Posted by Paolo74GRS on 21-09-2004 22:31:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho scelto di implementare la struttura 1-celle tramite un albero; il mio dubbio riguarda la creazione dell'albero binario di ricerca contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???

Qualcuno può darmi una dritta?
ciao


Posted by Paolo74GRS on 21-09-2004 22:32:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho scelto di implementare la struttura 1-celle tramite un albero; il mio dubbio riguarda la creazione dell'albero binario di ricerca contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???

Qualcuno può darmi una dritta?
ciao


Posted by Paolo74GRS on 21-09-2004 22:42:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho utilizzato una struttura ad albero per le 1- celle;
il mio dubbio riguarda la creazione dell'albero binario di ricerca
contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???
Potete darmi qualche dritta?
Ciao


Posted by Paolo74GRS on 21-09-2004 22:44:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho utilizzato una struttura ad albero per le 1- celle;
il mio dubbio riguarda la creazione dell'albero binario di ricerca
contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???
Potete darmi qualche dritta?
Ciao


Posted by Paolo74GRS on 21-09-2004 22:44:

Ciao a tutti, ho un dubbio/domanda da sottoporVi.
Premetto che ho utilizzato una struttura ad albero per le 1- celle;
il mio dubbio riguarda la creazione dell'albero binario di ricerca
contenente le 1-celle!
Magari sto facendomi venire il mal di testa per nulla..
Comunque, il mio problema e': quale criterio devo utilizzare per l'ordine dei nodi dell'albero??
Ordino per X, ordino per Y.. oppure per XY (..anche se non saprei come )???
Potete darmi qualche dritta?
Ciao


Posted by eskimo on 22-09-2004 11:05:

Ciao, io uso una struttura per mantenere la 1-celle, poi per calcolare le k-celle mi baso su di essa e mantengo una struttura con le info sulle kcelle. Il dubbio è sulla struttura che mantiene le k-celle.
Secondo voi è meglio farla come albero binario, quindi cercare le varie 1-celle componenti la kcella con una ricerca binaria su un albero (per ogni 1-cella che devo cercare per verificare se c'è ed appartiene una determinata kcella spendo log N) oppure mantenere una lista semplice, sulla quale cercherei in questo modo: ogni kcella ha una x, y di base; questo indice lo memorizzo in un puntatore (che modifico ogni volta che la mia attenzione si sposta su una nuova kcella), così so che per cercare le altre 1celle parto sempre da quel punto e non ogni volta dall'inizio della lista.

Seocondo voi quale metodo è più performante o comunque migliore???
Spero di esser stato chiaro
P. thx!!!! :) :)


Posted by Dante on 22-09-2004 11:22:

Io ho pensato così:

1) le 1celle inserite sono memorizz. in una lista in ordine di inserimento.

2) Ad ogni inserimento di 1cella verifico a quale kcella appartiene, e aggiungo ad un'altra lista di kcelle.

3) Ad ogni inserimento di kcella verifico aggiungo ad una'altra lista di kcelle-blocchi se appartiene a quel blocco, se no aggiungo ad un'altra lista di kcelle-blocco

in totale ho almeno 3 liste: 1 che memorizza semplicemente le 1celle inserite, 1 che memorizza le kcelle risultanti e almeno 1 che memorizza le kcelle di un kblocco...

area(x y): verifico che la kcella(kx ky) ci sia nella lista delle kcelle, se sì vado a cercarla nella\e lista\e dei kblocchi e faccio i conti...

secondo voi è fattibile sta cosa? la sto pensando ora...


Posted by Skilotto83 on 22-09-2004 11:35:

Originally posted by Dante
Io ho pensato così:

1) le 1celle inserite sono memorizz. in una lista in ordine di inserimento.

2) Ad ogni inserimento di 1cella verifico a quale kcella appartiene, e aggiungo ad un'altra lista di kcelle.

3) Ad ogni inserimento di kcella verifico aggiungo ad una'altra lista di kcelle-blocchi se appartiene a quel blocco, se no aggiungo ad un'altra lista di kcelle-blocco

in totale ho almeno 3 liste: 1 che memorizza semplicemente le 1celle inserite, 1 che memorizza le kcelle risultanti e almeno 1 che memorizza le kcelle di un kblocco...

area(x y): verifico che la kcella(kx ky) ci sia nella lista delle kcelle, se sì vado a cercarla nella\e lista\e dei kblocchi e faccio i conti...

secondo voi è fattibile sta cosa? la sto pensando ora...


Ma skusa ma nn è sufficente inserire prima tutte le 1-celle e poi calcolare le varie K celle??
Perkè una 1-cella nn per forza appartiene ad una k-cella....visto ke la K-cella esiste se è superiore il livello di riempimento....
No?
Poi ogni volta ke inserisci una 1-cella rifai la ricerka e kontrolli se è gia' in una K-cella esistente....se si' amen...altrimenti potrebbe doventare k-cella proprio kn la 1-cella inserita...e quindi prosegui...
no?

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by contezer0 on 22-09-2004 11:37:

Originally posted by sirio
In effetti hai ragione se usi una tab. hash a indirizzamento aperto, ciò non vale se usi la tab. con liste concatenate.


perche', se uso le liste concatenate, al momento di incrementare la dimensione della tabella, non devo usare comunque una funzione hash diversa da quella di prima?

o forse vuoi dire che non c'e' bisogno di aumentare la dimensione?

comunque...facendo due conti, e considerando che l'unica limitazione sul piano e' data dal tipo di dato intero, se ci capita un piano interamente ricoperto di celle, abbiamo un fattore di carico (2^32)/numero di posizioni nella tabella.
quindi sara' si un O(1) ma la costante nascosta da questo O mi pare abbastanza gigantesca!

oltretutto solo se la funzione hash e' molto buona.


Posted by Dante on 22-09-2004 11:47:

Originally posted by Skilotto83
Ma skusa ma nn è sufficente inserire prima tutte le 1-celle e poi calcolare le varie K celle??


Forse sì, quando chiede per la prima volta area, peso o blocchi, è allora che creo la lista di kcelle e kblocchi...


[i]Perkè una 1-cella nn per forza appartiene ad una k-cella....visto ke la K-cella esiste se è superiore il livello di riempimento....
No? [/B]



Sì, ma c'è da tenere conto che cmq il livello di riempimento può cambiare in qualsiasi momento... dentro ogni nodo della lista delle kcelle io terrei anche l'infomazione di quante 1celle ha la kcella... così la lista è riutilizzabile sempre, anche se cambi il livello di riempimento... forse l'unica che devi cambiare è la lista delle kcelle-blocchi...


[i]Poi ogni volta ke inserisci una 1-cella rifai la ricerka e kontrolli se è gia' in una K-cella esistente....se si' amen...altrimenti potrebbe doventare k-cella proprio kn la 1-cella inserita...e quindi prosegui...
no? [/B]


boh...


Posted by aghito on 22-09-2004 13:21:

facendo una lista delle 1-celle conviene farla con inserimento in coda perchè bisogna controllare che la 1 cella che inserisco non sia già nella lista..con l'inserimento in coda dato che devo controllare il campo next per vedere l'ultimo elemento controllo anche il valore di key e se è uguale a quello da inserire mi fermo...

avete del codice per liste con inserimento in coda o siti di riferimento?

__________________
alessandro colombini


Posted by lino on 22-09-2004 14:26:

Come faccio UNA LISTA CON


Posted by mitnik on 23-09-2004 10:08:

IO sto procedendo come Dante, ho una lista con le 1-celle, poi creo una lista con le k-celle che hanno come figli le 1-celle che contengono. Per l'area devo creare un'altra lista con le k-celle che sono occupate. Il problema è sul calcolo dei blocchi, avete qualche idea?


Posted by Dante on 23-09-2004 13:10:

bravo! sto scrivendo questa parte di codice.... una volta funzionante aggiungo le funzioni area, peso e blocchi... sperem....
tu sei già lì?


Posted by ghily on 23-09-2004 14:19:

Originally posted by mitnik
IO sto procedendo come Dante, ho una lista con le 1-celle, poi creo una lista con le k-celle che hanno come figli le 1-celle che contengono.



Finalemtne ho dato editoria ed ora posso concentrarmi sul progetto.Il tempo è poco ma speriamo in bene.Una cosa ancora non ho capito: ma queste 1-celle sono veramente così importanti? Mi spiego meglio: quale è l'utilità di sapere che nella k-cella (k,x,y) è contenuta percisametne quella cella? Se non mi sfugg eniete nel testo non c'è nessuna funzione che ti chiede di ritornare 1-celle.L'importante è sapere QUANTE (non quali) celle sono contenute nella k-celle selezionata. Sbaglio??

Altra cosa che non mi è chiara.Nella funzione elimina (k,x,y) la cella che è da andare a trovare è la cella che ha coordinate (kx,ky) ecc. ? Oppure la 1-cella (k,y???

Grazie
Chao
Roby


Posted by eskimo on 23-09-2004 15:39:

se la funzione ti dice di eliminare k x y devi eliminare la cella di coordinate x, y quando la risoluzione è k: si parla direttamente di 1celle solo se ti chiede la kcella(1, x, y).... se invece quel k ha un valore diverso da 1 devi eliminare TUTTE le 1celle comprese (e presenti) nell'intevallo kx <= ascissa < k(x+1) e
ky <= ordinata < k(y+1)
ascissa e ordinata sono le coordinate della 1cella
chiaro??? spero di esserlo stato! :) :)


Posted by ghily on 23-09-2004 16:12:

Faccio un esempio pratico,sperando che sia chiaro, perchè mi sembra sempre la cosa migliore.Ammettiamo che la mia risoluzione sia 3. La chiamata elimina (2,3) va a chiamare la cella che ha vertice in basso a sinistra (6,9) e non quella che ha (2,3), giusto? Una volta trovata questa cella vedo se questa cella è occupata.Questo lo vedo regolandomi col parametro di riempimento (nessuna menzione sulle 1-celle ancora).In caso affermativo la svuoto, cioè le sue 1-celle occupate saranno zero. IN caso contrario non faccio nulla.
Quello che mi domando io è:
ammettiamo che la cella (7,9) sia occupata e che la k-cella che la contiente sia anch'essa occupata.Mi interessa sapere che vado a liberare proprio quella cella? oppure mi interessa solo che ho liberato la k-cella, cioè che la k-cella ora non contiene più celle occupate. Praticamente sulle 1-celle non si lavora mai in maniera diretta.

Spero sia chiaro.

Chao
Roby


Posted by Skilotto83 on 23-09-2004 19:12:

Originally posted by ghily
Finalemtne ho dato editoria ed ora posso concentrarmi sul progetto.Il tempo è poco ma speriamo in bene.Una cosa ancora non ho capito: ma queste 1-celle sono veramente così importanti? Mi spiego meglio: quale è l'utilità di sapere che nella k-cella (k,x,y) è contenuta percisametne quella cella? Se non mi sfugg eniete nel testo non c'è nessuna funzione che ti chiede di ritornare 1-celle.L'importante è sapere QUANTE (non quali) celle sono contenute nella k-celle selezionata. Sbaglio??

Altra cosa che non mi è chiara.Nella funzione elimina (k,x,y) la cella che è da andare a trovare è la cella che ha coordinate (kx,ky) ecc. ? Oppure la 1-cella (k,y???

Grazie
Chao
Roby


Per sapere se due celle sono adiacenti(e quindi hanno un punto in comune) devi sapere la posizione di tutte le singole celle della k-cella....e il diskorso vale anke se improvvisamente cambi risoluzione...altrimenti dovresti ripetere tutto ogni volta...

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by contezer0 on 24-09-2004 01:11:

Originally posted by Skilotto83
Per sapere se due celle sono adiacenti(e quindi hanno un punto in comune) devi sapere la posizione di tutte le singole celle della k-cella....e il diskorso vale anke se improvvisamente cambi risoluzione...altrimenti dovresti ripetere tutto ogni volta...


io pensavo che due k celle fossero adiacenti se occupate (ovvero il numero di 1 celle contenute supera la "soglia di carico") e se si "toccano" almeno in un angolo!
almeno...nell'esempio del testo del progetto ci sono delle 3-celle adiacenti le cui 1-celle pero' non lo sono...


Posted by contezer0 on 24-09-2004 01:31:

Originally posted by eskimo
oppure mantenere una lista semplice, sulla quale cercherei in questo modo: ogni kcella ha una x, y di base; questo indice lo memorizzo in un puntatore (che modifico ogni volta che la mia attenzione si sposta su una nuova kcella), così so che per cercare le altre 1celle parto sempre da quel punto e non ogni volta dall'inizio della lista.

Seocondo voi quale metodo è più performante o comunque migliore???
Spero di esser stato chiaro
P. thx!!!! :) :)


Ma in questo modo devi mantenere ordinata la lista delle 1-celle, giusto? quindi hai un costo N per inserimento e cancellazione, e poi in che modo terresti ordinata questa lista per renderla "consistente" col puntatore alla x,y di base di una k-cella?

io tifo albero binario...ma suppongo ci voglia una variante bilanciata, se no si ha sempre un costo N nel caso peggiore.


Posted by contezer0 on 24-09-2004 01:39:

gia' che ci sono...
ma qualcuno allora la usa la tabella hash?
la fate a indirizzamento aperto e dimensione variabile oppure con concatenazione e dimensione fissa?

e per calcolare il blocco c'e' qualche metodo meno costoso del "prendo una cella, cerco tutti i suoi eventuali adiacenti, di questi cerco i *loro* adiacenti e cosi' via"?


Posted by Skilotto83 on 24-09-2004 06:52:

Originally posted by contezer0
io pensavo che due k celle fossero adiacenti se occupate (ovvero il numero di 1 celle contenute supera la "soglia di carico") e se si "toccano" almeno in un angolo!
almeno...nell'esempio del testo del progetto ci sono delle 3-celle adiacenti le cui 1-celle pero' non lo sono...


E' esattamente cosi'...ma devi sapere le coordinate dei punti della K-cella...altrimenti kome sai se tokka un altra k cella??

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by contezer0 on 24-09-2004 11:31:

Originally posted by Skilotto83
E' esattamente cosi'...ma devi sapere le coordinate dei punti della K-cella...altrimenti kome sai se tokka un altra k cella??


beh a meno di un fattore k (la risoluzione) una k-cella non si comporta esattamente come una 1-cella?
quindi se abbiamo una risoluzione =1, chiamo la funzione che calcola i blocchi sulla struttura delle 1 celle.
la struttura che memorizza le k celle, che viene costruita quando si cambia la risoluzione, si puo' fare uguale, mettendo per ogni k-cella una x e una y (che nel piano sara' kx e ky), ovviamente dopo aver guardato quante 1 celle contiene.
In questo modo la funzione che calcola i blocchi puo' essere la stessa, no?


Posted by d0k on 24-09-2004 20:06:

Ho scelto la via + semplice. Liste linkate e passa la paura. Ora vi domando. Indipendentemente dalla struttura dati qualcuno ha idea della procedura (pseudocodice sarebbe troppo) che dalle k-celle passa ai k-blocchi? Avete qualche consiglio? Codice riciclabile che avete visto in giro? Attendo ansiogeno..
***
un uomo a 2 passi dal bruciarsi uno scritto.

__________________
o sei parte della soluzione o sei parte del problema.

recensioni libri informatica


Posted by Eruyomë on 25-09-2004 13:51:

Ciao volevo chiedere se nessuno ha avuto problemi con il confronto del peso di una k-cella con il p/q*k*k; poiché il primo è unsigned o int mentre il secondo è duoble o float e nel confonto mi escono risultati pazzi: del tipo un 3 che è 2.9 e diventa 2, un 3 che risulta minore di 3.0, approssimazioni che non fanno girare il programma a dovere, etc...
nessuno di voi sa come si può fare ad evitarlo?

__________________
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 Eruyomë on 25-09-2004 15:08:

Occhei, come non detto! Ho risolto manipolando manualmente la parte dopo la virgola del double (un lavoraccio)...

__________________
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 attila79 on 25-09-2004 16:55:

Cool

Una curiosità, piu o meno quante righe di codice vi sta uscendo il progetto? Spero di non essere l'unico ad amare il codice rindondante ...io viaggio intorno alle 900 righe, devo preoccuparmi?


Posted by Skilotto83 on 25-09-2004 19:12:

Originally posted by attila79
Una curiosità, piu o meno quante righe di codice vi sta uscendo il progetto? Spero di non essere l'unico ad amare il codice rindondante ...io viaggio intorno alle 900 righe, devo preoccuparmi?


No...vanno bene anke 2000...basta ke me lo passi e me lo fai kopiare...
:D

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by contezer0 on 26-09-2004 01:56:

Originally posted by Eruyomë
Occhei, come non detto! Ho risolto manipolando manualmente la parte dopo la virgola del double (un lavoraccio)...


ma non bastava un cast?
cmq mi hai messo la pulce nell'orecchio...ora lavoro un po' su sta cosa!


Posted by contezer0 on 26-09-2004 01:56:

Originally posted by Eruyomë
Occhei, come non detto! Ho risolto manipolando manualmente la parte dopo la virgola del double (un lavoraccio)...


mi pare un po' inutile passare per i float o i double visto che tutto il resto e' basato sugli interi.

io ho fatto cosi',anche se non mi piace tanto (supponendo che p sia il minore)
k*k*p / q e memorizzo il risultato
k*k*p%q se e' diverso da 0, aggiungo 1 al risultato

in questo modo, se il fattore di riempimento ha un quoziente che divide k, la soglia sara' "precisa"...ad esempio se p/q e' 1/2 con risoluzioni pari (ovvero devo riempire almeno per meta' le k-celle)
altrimenti arrotondo per eccesso (tanto non potro' mai avere un "pezzo di 1-cella").
ci sono per caso dei metodi piu' carini?


Posted by contezer0 on 26-09-2004 01:59:

Originally posted by attila79
Una curiosità, piu o meno quante righe di codice vi sta uscendo il progetto? Spero di non essere l'unico ad amare il codice rindondante ...io viaggio intorno alle 900 righe, devo preoccuparmi?


ops...chiedo scusa per i post di sopra ma mi si e' impalato il browser....

io sono intorno alle 400 ma con un paio di funzioni per il debug e un casino di linee vuote o con le graffe...spero con un po' di pulizia di rimanere cosi'...mi manca ancora qualcosina


Posted by contezer0 on 26-09-2004 02:00:

Originally posted by Eruyomë
Occhei, come non detto! Ho risolto manipolando manualmente la parte dopo la virgola del double (un lavoraccio)...


az io ero convinto che bastasse un cast...
beh per non pasticciare con i float, si fa la divisione tra p e q e si memorizza il risultato...poi si fa il modulo e se e' diverso da zero, si incrementa il risultato di 1.


Posted by mitnik on 26-09-2004 18:58:

chi ha usato le liste mi darebbe una mano sulla funzione blocchi? come ha ragionato?

Grazie


Posted by Eruyomë on 26-09-2004 19:06:

Si anch'io ho fatto una roba così contezer0, viaggio poco più sulle 400 righe usando liste di liste (una specie di grafo), ma ho ancora qualche scaramuccia con la cancellazione delle stesse in memoria che mi fa venire un 6 al posto di un 5 nell'esempio, che odio----

__________________
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 26-09-2004 19:22:

Originally posted by Eruyomë
Si anch'io ho fatto una roba così contezer0, viaggio poco più sulle 400 righe usando liste di liste (una specie di grafo), ma ho ancora qualche scaramuccia con la cancellazione delle stesse in memoria che mi fa venire un 6 al posto di un 5 nell'esempio, che odio----


wow! lista di adiacenza? e' molto veloce sul calcolo dei blocchi, direi!
ma un po' piu' lenta per inserire e togliere le celle

cmq oggi sono arrivato a circa 600 linee


Posted by ghily on 26-09-2004 20:20:

consegna

So che non è prudente paralre già di consegna visto chenessuno di noi ha finito(anzi io sdevo ancora iniziare....), però avevo un apio di curiosità:

- La consegna deve avvenire entro il tre settembre ma a che ora?
-la relazione scritta che va consegnata ad aguzzoli è da consegnare entro venerdì? O il dipartimento è aperto acnhe di sabato? dove va portata? Secondo voi se consegno relazione e progetto in carta cartacea venerdì poi durante il week-end psso andare avanti a lavorare??

Grazie
Chao Roby


Posted by aghito on 26-09-2004 20:23:

perchè la carta può anche non essere cartacea?
cmq è il 3 ottobre e le modalità sono ben spiegate nel pdf..

__________________
alessandro colombini


Posted by ghily on 26-09-2004 20:40:

Originally posted by aghito
perchè la carta può anche non essere cartacea?


caspita hai ragione... Vabbè piccolo errore.Ma la mia curiosità era sapere se il dipartimento è aperto anche di sabato.Come faccio ad imbucare il progetto nella casella di posta di aguzzoli se il dipartimento è chiuso?

Chao
Roby


Posted by Skilotto83 on 26-09-2004 21:49:

Nn dice da nesuna parte ke bisogn consegnare copia cartacea...
Anzi...dice chiaramente che i file devono essere zippati e deve esserci Codice+Relazione...
Poi all'orale porterai una copia cartacea...

__________________
"Why, Sir, you find no man at all intellectual who is willing to leave London.
No, Sir, when a man is tired of London, he is tired of life; for there is in London all that life can afford."
(DR SAMUEL JOHNSON 1777)

MSN andrea.poretti(at)hotmail.it


Posted by contezer0 on 26-09-2004 23:48:

Originally posted by Skilotto83
Nn dice da nesuna parte ke bisogn consegnare copia cartacea...
Anzi...dice chiaramente che i file devono essere zippati e deve esserci Codice+Relazione...
Poi all'orale porterai una copia cartacea...


veramente dice di consegnare una copia cartacea lunedi' 4...
dice anche di non usare variabili globali per informazioni di carattere locale...
io in un UNA SOLA occasione uso UNA SOLA variabile globale...quando inserisco una 1cella manualmente (la funzione di inserimento che uso pasticcia comunque la struttura anche se la cella e' gia' presente). Tutte le altre volte non mi serve...e il valore di ritorno della funzione mi serve sia un indirizzo...avranno pieta' di questa piccola imperfezione?
di certo non mi metto a passare un indirizzo a un int ogni volta...gia' cosi' passo tanti parametri!


Posted by contezer0 on 27-09-2004 01:19:

un momento di attenzione.....

HO FINITOOOOOOOOOOOOOOOOOO

era oraaaaa
adesso mi tocca provare e riprovare...scrivere la documentazione (qualcuno ha idea di cosa metterci, a proposito?)


Posted by aghito on 27-09-2004 08:36:

complimenti!
ci fai un riassunto delle strutture dati utilizzate e come hai fatto la funzione blocchi...ci searesti molto d'aiuto..grazie

__________________
alessandro colombini


Posted by ghily on 27-09-2004 13:32:

Originally posted by contezer0
veramente dice di consegnare una copia cartacea lunedi' 4...
dice anche di non usare variabili globali per informazioni di carattere locale...
io in un UNA SOLA occasione uso UNA SOLA variabile globale...quando inserisco una 1cella manualmente (la funzione di inserimento che uso pasticcia comunque la struttura anche se la cella e' gia' presente). Tutte le altre volte non mi serve...e il valore di ritorno della funzione mi serve sia un indirizzo...avranno pieta' di questa piccola imperfezione?
di certo non mi metto a passare un indirizzo a un int ogni volta...gia' cosi' passo tanti parametri!


Il progetto del turno uno e due sono gli stessi ma le specifiche di consegna sono diverse. Le note di aguzzoli soo di meno (per esempio non dice nulla sulle variabili globali).

Andre, il progetto di aguzzoli dice questo:

Una copia cartacea della relazione e del codice deve inoltre essere consegnata al dr. Aguzzoli sempre
entro il 3 Ottobre 2004 (lasciandola eventualmente nella sua casella postale presso il dipartimento in via
Comelico).

Ma penso che anche se la consegno il 4 mattina alle 8.30 non cambi nulla visto che comunque la mail gliela devo mandare entro la mezzanotte del 3.

Chao
Roby


Posted by contezer0 on 27-09-2004 18:27:

Originally posted by aghito
complimenti!
ci fai un riassunto delle strutture dati utilizzate e come hai fatto la funzione blocchi...ci searesti molto d'aiuto..grazie


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.


Posted by eskimo on 28-09-2004 10:00:

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 tutte le kcelle che toccano in un punto la kcella che sto verificando, ma non basta! una volta che ho scoperto la mia kcella vicina, devo passare a controllare i suoi vicini, ma ogni volta devo tener conto di quelle già visitate... cosa consigliate??
thx!!!!


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:56. Pages (2): [1] 2 »
Show all 257 posts from this thread on one page

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