Ordinamento: quale struttura!?
Moderatore: Staff
Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Ordinamento: quale struttura!?
Ciao ragazzi, avrei una domanda da sottoporvi.
Mettiamo che io abbia una topologia di rete con nodi: A,B,C,D,E, F,G,H,I,L,M
Che sappia che A è direttamente collegato direttamente con con B e C, che B lo sia con A, D, E e via dicendo. Ovvero che io sappia chi è collegato a chi.
Ora voglio estrarli secondo il criterio "numero massimo di connessioni", ma con alcuni vincoli ovvero.
Inizialmente vedo che B è quello che ha il maggior nmero di connessioni. Allora levo dalla lista dei nodi B e tutti i vicini di B
A questo punto volgio trovare quello con maggior numerodi connessioni, senza tener conto di B e tutti i suoi vicini.
Quale struttura dovrei utilizzare per fare questo ordinamento!? e quale sarebbe il suo costo computazionale!?
vi ringrazio!
Mettiamo che io abbia una topologia di rete con nodi: A,B,C,D,E, F,G,H,I,L,M
Che sappia che A è direttamente collegato direttamente con con B e C, che B lo sia con A, D, E e via dicendo. Ovvero che io sappia chi è collegato a chi.
Ora voglio estrarli secondo il criterio "numero massimo di connessioni", ma con alcuni vincoli ovvero.
Inizialmente vedo che B è quello che ha il maggior nmero di connessioni. Allora levo dalla lista dei nodi B e tutti i vicini di B
A questo punto volgio trovare quello con maggior numerodi connessioni, senza tener conto di B e tutti i suoi vicini.
Quale struttura dovrei utilizzare per fare questo ordinamento!? e quale sarebbe il suo costo computazionale!?
vi ringrazio!
- m0rdr3d
- Linux 2.x

- Messaggi: 404
- Iscritto il: dom 24 dic 2006, 13:40
- Slackware: Slackware64-current
- Kernel: 3.4.*
- Desktop: KDE 4.8.2
Re: Ordinamento: quale struttura!?
Non mi sono molto chiare alcune cose:
- Tu vuoi ordinare tutti i nodi in ordine di grado decrescente?
- Se ho capito bene, una volta estratto B, i nodi vicini non vengono più considerati, ma questo vuol dire che non faranno parte dell'ordinamento? E se due nodi vicini fossero di grado massimo ed uguale?
- Il dominio del problema, ovvero il numero di nodi, è noto a priori? Questo potrebbe incidere fortemente sull'approccio utilizzato e sulla complessità finale.
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: Ordinamento: quale struttura!?
Il numero di nodi è noto a priori.
Se hanno lo stesso grado, si prendoo in ordine alfabetico
Estratto B e i suoi vicini... questi non fanno più parte dell'ordinamento!
Se hanno lo stesso grado, si prendoo in ordine alfabetico
Estratto B e i suoi vicini... questi non fanno più parte dell'ordinamento!
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: Ordinamento: quale struttura!?
Non so che ordinamento vuoi fare, ma in questi casi si usano le matrici di adiacenza.
Emanuele
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: Ordinamento: quale struttura!?
Ovvio per sapere i vicini....
Io intendevo struttre per gestire l'ordinamento.... so di heap binarie ordinate.... ma non so esattamente se fanno al caso mio!
Io intendevo struttre per gestire l'ordinamento.... so di heap binarie ordinate.... ma non so esattamente se fanno al caso mio!
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: Ordinamento: quale struttura!?
L'ho detto io che non ho capito che ordinamento vuoi fare. Da quello che hai scritto sembra che il primo nodo deve essere quello con più link, poi non si capisce bene che fine fanno i suoi vicini, e poi sembra che il secondo nodo debba essere quello che, una volta tolto il quello con più link ed i suoi vicini, rimane quello con più link
.
Per questa soluzione va bene una matrice di adiacenza.
Emanuele
Per questa soluzione va bene una matrice di adiacenza.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: Ordinamento: quale struttura!?
Allora esattamente faccio questo:
1) Ordino i nodi in modo decrescente secondo node_degree
2) Estraggo il primo e tutti i suoi vicini, e li elimino dalla lista.
3) Eseguo nuovamente l'ordinamento
4) levo il primo e i suoi vicini dalla lista.....
e cosi via.....
Al primo passaggio, una volta levato il nodo con più vicini (chiamiamolo X) devo fare l'ordinamento di nuovo perchè il secondo della lista(chiamiamolo Y) potrebbe essere un vicino di X e verrebbe levato. Oppure Y occupava la seconda posizione, ma visto che ora levo X e tutti i suoi vicini... magari alcuni di questi erano vicini di Y e ora Y stesso andrebbe ad occupare una nuova posizione!
scusatemi ragazzi, ma non sono esperto in queste cose.....
1) Ordino i nodi in modo decrescente secondo node_degree
2) Estraggo il primo e tutti i suoi vicini, e li elimino dalla lista.
3) Eseguo nuovamente l'ordinamento
4) levo il primo e i suoi vicini dalla lista.....
e cosi via.....
Al primo passaggio, una volta levato il nodo con più vicini (chiamiamolo X) devo fare l'ordinamento di nuovo perchè il secondo della lista(chiamiamolo Y) potrebbe essere un vicino di X e verrebbe levato. Oppure Y occupava la seconda posizione, ma visto che ora levo X e tutti i suoi vicini... magari alcuni di questi erano vicini di Y e ora Y stesso andrebbe ad occupare una nuova posizione!
scusatemi ragazzi, ma non sono esperto in queste cose.....
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: Ordinamento: quale struttura!?
Quello che ancora non capisco è che fine facciano i vicini. Supponiamo che abbiamo questa situazione:
Seguo il tuo ragionamento. B e C hanno entrambe due connessioni, Quindi prendo B, tolgo A e C. Quindi mi rimane solo D. Il risultato??
Emanuele
Codice: Seleziona tutto
A->B
B->C
C->DCodice: Seleziona tutto
B, DEmanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: Ordinamento: quale struttura!?
Esatto.. i vicini li butti..... come se non ci fossero più..... il problema ora è gestire una rete con 500 nodi e 6000 links, insomma quest'ordine di grandezza.....
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: Ordinamento: quale struttura!?
E perchè la matrice di adiacenza non ti basta? Oltre a dirti i vicini ti dice anche quanti link possiede. Ordini una sola volta i link che possiedono tutti i nodi e poi agisci di conseguenza. Prendi quello con il maggior numero di link, elimini i suoi vicini e riprendi il primo.
Non so se mi sono spiegato ma la matrice di adiacenza ti da già un vettore di questo tipo:Quindi tu prendi il primo (A), scandisci la matrice per trovare i sui vicini e li elimini dal risultato, poi prendi di nuovo il primo etc...
Emanuele
Non so se mi sono spiegato ma la matrice di adiacenza ti da già un vettore di questo tipo:
Codice: Seleziona tutto
A = 20
C = 12
E = 10
B = 8
D = 6Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- m0rdr3d
- Linux 2.x

- Messaggi: 404
- Iscritto il: dom 24 dic 2006, 13:40
- Slackware: Slackware64-current
- Kernel: 3.4.*
- Desktop: KDE 4.8.2
Re: Ordinamento: quale struttura!?
A questo punto non potrebbe essere più efficace utilizzare la rappresentazione a liste?
La complessità asintotica non cambia, ma ti permette di diminuire notevolmente il numero di nodi che controlli quando vai ad eliminare i vicini.
La complessità asintotica non cambia, ma ti permette di diminuire notevolmente il numero di nodi che controlli quando vai ad eliminare i vicini.
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: Ordinamento: quale struttura!?
boh.. nn saprei... secondo voi cosa è meglio!?
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: Ordinamento: quale struttura!?
Se la matrice di adiacenza la implementi come si deve, ovvero come una mappa di bit, l'individuazione dei vicini risulta molto veloce.
Emanuele
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama