Problema sottostante
In un caso di un protocollo di scoperta peer-to-peer, supponiamo di dover pubblicizzare i peer in modo che il grafico di rete cresca in modo tale da evitare casi di aree troppo densi (per esempio clique) e aree troppo debolmente connesse (ad es. nodi bridge). Un nodo può anche fallire, disconnettere, riconnettere e aggiornare l'elenco dei peer che conserva a determinati intervalli.
Un approccio per risolvere ciò sarebbe pubblicizzare i colleghi con una probabilità inversamente proporzionale ai tempi già pubblicizzati.
Ho ottenuto i seguenti requisiti per l'utilizzo di una struttura dati al servizio del nostro scopo:
- Mantieni i nodi ordinati in base a un punteggio pertinente ai tempi già pubblicizzati, preferibilmente l'ordinamento che si aggiusta automaticamente all'inserimento di nuovi nodi
- Selezione rapida dei primi k elementi in base al punteggio
- Aggiornamento facile del punteggio e della posizione dei nodi in ogni azione pubblicitaria
- Controllo semplice dei nodi duplicati al momento dell'inserimento, ad es. causato da un errore del nodo e ricollegamento.
- Sincronizzazione per accesso concorrente, modifica
La lingua utilizzata per l'implementazione è java.
Domande
- Sto affrontando correttamente il problema utilizzando un punteggio e una struttura dati simili con i requisiti sopra menzionati, oppure esiste un approccio migliore?
- Se la risposta a 1 è sì, quale sarebbe una buona scelta di una struttura dati? Penso che b-trees sembra soddisfare la maggior parte se non tutte, ma non ne sono del tutto convinto, quindi ho bisogno di una guida e di soluzioni giustificate in materia.
Grazie in anticipo.