Ecco alcuni vincoli per una struttura dati di cui ho bisogno. Sembra che nessuna delle strutture dati comuni (menzionerò quelle che ho pensato di seguito) si adattano bene a tutto questo. Qualcuno può suggerire uno che forse non ho pensato?La migliore struttura dati per i seguenti vincoli?
- Devo essere in grado di eseguire ricerche con chiavi integer senza segno.
- Gli elementi da memorizzare sono strutture definite dall'utente.
- Questi indici saranno sparsi, in genere estremamente. Gli array regolari sono fuori.
- La frequenza di ciascun indice avrà una distribuzione non uniforme, con indici piccoli molto più frequenti di quelli di grandi dimensioni.
- N di solito sarà piccolo, probabilmente non più grande di 5 o 10, ma non voglio fare affidamento su quello troppo pesantemente perché potrebbe a volte essere molto più grande.
- Il termine costante conta molto. Ho bisogno di ricerche davvero veloci quando N è piccolo. Ho già provato tabelle hash generiche e, empiricamente, sono troppo lente, anche quando N = 1, ovvero nessuna collisione, probabilmente a causa della quantità di indirezione implicata. Tuttavia, sarei aperto a suggerimenti su tabelle hash specializzate che sfruttano altri vincoli citati.
- Il tempo di inserimento è non importante finché il tempo di recupero è veloce. Anche il tempo di inserimento di O (N) è abbastanza buono.
- L'efficienza dello spazio non è molto importante, anche se è abbastanza importante non utilizzare solo array regolari.
Che lingua stai usando? – kmkaplan
come i vincoli molto specifici, rende una risposta interessante e potenzialmente molto utile. Se la lingua che si sta utilizzando presuppone il controllo dei limiti * può * fare la differenza. Se siete su certi tipi di metodi .Net con strutture non primitive non sarà in linea con il colore alcune cose – ShuggyCoUk