Creare albero genealogico
Creare albero genealogico postato il 11/02/2016 13:06:13 nel forum programmazione, open source e hosting
Buongiorno, vorrei aggiungere un albero genealogico nel mio GDR in broswer game, ho bisogno di aiuto per lo script, non è una cosa semplice da gestire, magari c'è già qualcosa di pronto, ma per ora non ho ancora trovato nulla. Avete qualche idea?
Pagine → 1
11/02/2016 13:15:37
Abbastanza semplice, ma prolisso e noioso.
Dovresti creare tanti campi nel database quante sono le parentele possibili, dopo di che aggiungere nella sezione di modifica i vari valori 'modificabili', comprensivi di nome, cognome ed eventuale IMG rappresentativa del soggetto.
Idealmente semplice ma richiede del tempo, magari qualcun altro conosce metodi migliori.
11/02/2016 14:16:25
devi vedere ogni entità come un nodo.
id padre, id figlo, id fratello
ogni nodo riporta nel proprio campo ID relativo le parentele che potrai dividere con ; o altri simboli, poi fai un list(), fai un po di cicli per visualizzare ed il gioco è fatto.
http://php.net/manual/en/function.list.php http://php.net/manual/en/function.list.php ↗
. Concatenation $txt1 . $txt2 Concatenation of $txt1 and $txt2
.= Concatenation assignment $txt1 .= $txt2 Appends $txt2 to $txt1
11/02/2016 20:18:36
Tabella Relazioni
Id
TipoRelazione (1: Orizzontale, 2: Verticale)
Utente1
Utente2
Con questa tabella strutturata così dovresti coprire credo tutti i casi.
Orizzontale significa "Fratello/Sorella", Verticale significa "Padre/Figlio". per convenzione considera sempre Utente1 Padre, Utente2 Figlio.
Per creare un albero genelogico basta che butti tutto su un array.
partendo da un utente generico, fai una ricorsione per salire al "capostipite".
Una volta al capostitpite ricorsione a scendere per avere tutto l'albero.
11/02/2016 20:59:08
mrpanda ha scritto: Tabella Relazioni
Id
TipoRelazione (1: Orizzontale, 2: Verticale)
Utente1
Utente2
Con questa tabella strutturata così dovresti coprire credo tutti i casi.
Orizzontale significa "Fratello/Sorella", Verticale significa "Padre/Figlio". per convenzione considera sempre Utente1 Padre, Utente2 Figlio.
Per creare un albero genelogico basta che butti tutto su un array.
partendo da un utente generico, fai una ricorsione per salire al "capostipite".
Una volta al capostitpite ricorsione a scendere per avere tutto l'albero.
un array monodimensionale per un albero?! Intendevi una matrice?
continuo a pensare che un grafo sia più efficiente: se tu usi una riga di quel tipo vuol dire che duplichi le entità nel database per discernere la relazione orizzontale o verticale.
11/02/2016 21:10:25
longbow ha scritto:
un array monodimensionale per un albero?! Intendevi una matrice?
Non ho mai parlato di array monodimensionale, ma di array. Una matrice è un array.
12/02/2016 00:05:13
mrpanda ha scritto: [quote]longbow ha scritto:
un array monodimensionale per un albero?! Intendevi una matrice?
Non ho mai parlato di array monodimensionale, ma di array. Una matrice è un array.[/quote]
come salvarsi in corner...
Nel caso un array abbia più dimensioni (specialmente nel caso bidimensionale), esso viene spesso definito "matrice", in riferimento alla nozione matematica di matrice da cui prende ispirazione. La differenza è che una matrice ha due (o più) indici (ogni indice è una dimensione) e ogni elemento è identificato dalla combinazione di valori di tutti gli indici del vettore.
l'unica soluzione efficacie è utilizzare un digrafo (grafo aciclico diretto) ma un approccio del genere può provenire solo da un'analisi e da una applicazione di studi (scienza computazionale o, se preferisci, Fondamenti di Informatica I e II, Analisi Matematica II).
creare entità ridondanti è il modo migliore per intasare un database dopo un anno di land attiva.
Ripropongo il mio consiglio con la creazione di singoli elementi distinti (nodi) nel DB che abbia la catena di relazioni (archi) così da creare con poche operazioni una ricerca in profondità (se necessario) o una semplice visualizzazione.
NB: un albero è un caso particolare di grafo, ovvero un grafo non orientato diretto.
La visita di un grafo si fa solo ricorsivamente scorrendo elemento per elemento nel proprio cammino fino a toccare un nodo già visitato.
12/02/2016 00:46:38
Scusami, ma io preferisco la pratica alla teoria. xD
http://php.net/manual/en/language.types.array.php ↗
Mi passi il link delle matrici? Così me le studio!
longbow ha scritto: l'unica soluzione efficacie è utilizzare un digrafo (grafo aciclico diretto) ma un approccio del genere può provenire solo da un'analisi e da una applicazione di studi (scienza computazionale o, se preferisci, Fondamenti di Informatica I e II, Analisi Matematica II).
Riscusami, tu forse hai fatto le squole alte. Chiedo venia e mi inchino a tanto sapere.
12/02/2016 09:21:57
la differenza tra chi "impara" empiricamente e chi invece applica ciò per cui ha studiato è che solitamente le soluzioni ponderate vengono dal secondo caso. E sempre il secondo caso deve poi correre ai ripari sistemando i pasticci del primo caso.
Capiamoci: il mio non è un attacco alla tua persona ma quando vedo proporre soluzioni del genere non ottimizzate da qualcuno che ha in firma offerte di lezioni di programmazione, mi vien da pensare che qualcosa non vada.
Preferire la pratica alla teoria non è sempre la migliore soluzione in quanto è dalla teoria che provengono le idee e le alternative.
Ad ogni modo stiamo andando troppo offtopic (seppur le risposte siano già state date).
Rispondo seriamente alla tua richiesta linkandoti un paio di cose:
Matrici http://www.dis.uniroma1.it/~bloisi/didattica/pmn1112/lezioni/7.2-matrici.pdf ↗ in C/C++ ma facilmente assimilabile a PHP
Teoria dei Grafi http://www.dist.unige.it/msanguineti/AttDid/Materiale%20didattico%202012-13/Ing.%20Informatica/Grafi.pdf ↗
ovviamente puoi ampliare facendo ricerche più approfondite su internet, seppur questi due link non possano adeguatamente esporre i concetti sopra citati necessitando una spiegazione di contorno.
12/02/2016 09:28:09
farò delle prove intanto grazie infinite
12/02/2016 14:33:31 e modificato da mrpanda il 12/02/2016 14:34:53

Ma siamo seri? Le persone dovrebbero imparare ad avere piu' umiltà, invece che criticare qualcuno che nemmeno si conosce.
Sei seriamente convinto che io abbia necessità di studiarmi array e grafi, da appunti universitari?
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
World of Warship ↗
Crossout ↗
World of Tanks ↗
RAID Shadow Legends ↗
Tibia ↗
Wuthering Waves ↗
Foundation Galactic Frontier ↗
Seconda Era ↗