![]() |
Pages (17): « 1 2 [3] 4 5 6 7 » ... 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)
-- [PROGETTO] "Mappe 2" (http://www.dsy.it/forum/showthread.php?threadid=23982)
Originally posted by MaurizioL
La funzione v x y n pone a n il valore del punto.
Quindi devi inserire nell'albero il punto il cui valore è stato modificato.
Io ho usato un albero binario di ricerca per memorizzare i punti, le coordinate le usavo come chiave, il valore è un dato satellite.
Se non trovi un punto nell'albero significa che ha un valore "predefinito" (quello che hai inserito usando il comando "c n".
Devi usare per forza le coordinate come chiave; (oltretutto un punto è determinato univocamente dalle sue coordinate.... quale migliore chiave è possibile????)
In effetti come chiave si devono usare le coordinate per forza...
Ricominciamo dal principio se non vi spiace
Ricevo con c m n nome i valori di ciascun punto del piano.
Ciascun punto lo metto in un albero di ricerca. Il primo punto andrà come radice, il secondo come figlio destro o sinistro a seconda della chiave data dalle sue coordinate così la ricerca avrà costo log n se n è il numero dei punti.
Ci sono?
Se poi devo modificare il valore di un punto lo ricerco attraverso l'albero.
M come fa a non essere dunque presente nel piano? Li ho inseriti tutti i punti con crea
Guarda che NON devi assolutamente memorizzare TUTTI i punti possibili ma SOLO i punti che vengono settati esplicitamente. Tutti gli altri hanno un valore predefinito... qundi se il punto che cerchi non è nella lista (albero, hash table ...) allora sai già quanto vale.
code:
struct Mappa{ char *nome; Punto origine; char *specifica; } //Punto lo definirei così piu o meno struct Punto{ int x; int y; int val; }

Originally posted by Diuzza
Ricominciamo dal principio se non vi spiace
Ricevo con c m n nome i valori di ciascun punto del piano.
Ciascun punto lo metto in un albero di ricerca. Il primo punto andrà come radice, il secondo come figlio destro o sinistro a seconda della chiave data dalle sue coordinate così la ricerca avrà costo log n se n è il numero dei punti.
Ci sono?
Se poi devo modificare il valore di un punto lo ricerco attraverso l'albero.
M come fa a non essere dunque presente nel piano? Li ho inseriti tutti i punti con crea
(sto diventando insicuro persino ad inizializzare le variabili)
Originally posted by tyzer
Domanda per Ornati: nel progetto Mappe2 si dice che con la funzione crea(m,n,nome) bisogna assegnare ad ogni punto del piano i valori come prescritto nella nota 3. Non capisco allora quello che avevi detto prima...i punti devo memorizzarli per forza...
Il Piano lo si deve rappresentare con un albero di ricerca binaria?
Oppure un albero red-black? (che è assai più incasinato credo...)
Altra domanda: le mappe in che struttura si mettono? Cioè mi spiego, una mappa la implementerei così:
code:
struct Mappa{ char *nome; Punto origine; char *specifica; } //Punto lo definirei così piu o meno struct Punto{ int x; int y; int val; }

Originally posted by ornati
PS: sto seramente pensando di implementare Mappe2 e venderlo al miglior offerente![]()

Io cmq avevo capito che il piano era di dimensione m*n non infinito... mah adesso lo riguardo
Originally posted by Diuzza
Io cmq avevo capito che il piano era di dimensione m*n non infinito... mah adesso lo riguardo
Qualcuno mi sa dire come memorizzare una stringa di lunghezza arbitraria (ad esempio la specifica) senza usare un vettori di char di dimensioni esagerate.
Originally posted by Nosferatu
Qualcuno mi sa dire come memorizzare una stringa di lunghezza arbitraria (ad esempio la specifica) senza usare un vettori di char di dimensioni esagerate.
__________________
Maurizio Lombardi
Linux 2.6.14.2
-----------------------
Per la specifica io pensavo di usare semplicemente una lista perchè non devi ricercare una lettera o cose simili, devi semplicemente scorrerla, quindi che problema c'è? Ci impiegheresti o(n) cmq perchè devi leggere ogni singolo carattere
Originally posted by ornati
In effetti ho fatto un po' di confusione... parlavo del nuovo progetto pensando a quella vecchio
Cmq adesso ho letto meglio il testo e il piano è sempre "infinito".
Per quanto riguarda i valori dei punti, la relazione:
"Se a = x mod m e b = y mod n allora V al(x, y) = v[a+mb] ."
ti dice il valore di ogni punto del piano a meno che non sia stato "sovrascritto" da un comando "valore (x,y,val)".
Quindi il tutto si può implementare così:
1) i valori dei punti settati esplicitamente (con "v x y val") sono memorizzati in una apposita struttura (albero, albero bilanciato, hash table, lista... quello che preferite)
2) se serve il valore di un punto che non è stato settato esplicitamente, e quindi non si trova nella struttura, lo si ricava mediante la relazione di prima.
Ovvero:
valore = ArrayValori[ modulo(x,M) + M * modulo(y, N) ];
Facile, no?
Originally posted by Diuzza
Per la specifica io pensavo di usare semplicemente una lista perchè non devi ricercare una lettera o cose simili, devi semplicemente scorrerla, quindi che problema c'è? Ci impiegheresti o(n) cmq perchè devi leggere ogni singolo carattere
__________________
Maurizio Lombardi
Linux 2.6.14.2
-----------------------
Originally posted by Diuzza
Io pensavo di implementarlo così.
I valori li metto in un albero rb. (non i punti, badate, ma i valori)
Dopodichè quando mi passa le coordinate di un punto e mi serve il suo valore mi faccio il calcolino e lo cerco nell'albero.
In caso si ripresentassero più volte gli stessi punti e non voglio ricercare il valore nell'albero si potrebbero mettere in un hash table. Quindi, se mi viene dato un punto di cui voglio sapere il valore, prima guardo se è presente nell'hash table, se non c'è cerco nell'albero rb.
Potrebbe funzionare?
code:
int *ArrayValory = malloc(sizeof(int) * M * N); for (i=0; i < M*N; i++) { fscanf(file_input, "%d", &ArrayValori[i]); }
code:
valore = ArrayValori[ modulo(x,M) + M * modulo(y, N) ];
Grazie dell'info MaurizioL
| All times are GMT. The time now is 10:06. | Pages (17): « 1 2 [3] 4 5 6 7 » ... Last » Show all 246 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.