Sono alle prese con il concetto di quando utilizzare alberi di ricerca binaria e quando utilizzare i dizionari.C# Alberi binari e dizionari
Nella mia applicazione ho fatto un piccolo esperimento che utilizzava la libreria C5 TreeDictionary
(che a mio avviso è un albero di ricerca binaria rosso-nero) e il dizionario C#. Il dizionario era sempre più veloce nelle operazioni di aggiunta/ricerca e utilizzava sempre meno spazio di memoria. Ad esempio, alle 16809 <int, float>
voci, il dizionario ha utilizzato 342 KiB mentre l'albero ha utilizzato 723 KiB.
Ho pensato che i BST dovessero essere più efficienti in termini di memoria, ma sembra che un nodo dell'albero richieda più byte di una voce in un dizionario. Cosa dà? C'è un punto in cui i BST sono meglio dei dizionari?
Inoltre, come una domanda laterale, qualcuno sa se c'è un + più memoria struttura dati veloce efficiente per la memorizzazione <int, float>
paia di accesso tipo di dizionario di una delle strutture di cui?
Sinceramente non mi preoccuperei dell'efficienza della memoria se l'app utilizza 723 KB. Probabilmente comincerei a pensare a strutture dati migliori quando ho colpito, diciamo, 50 MB per archiviare la collezione. – Juliet
L'oggetto che contiene la struttura dati potrebbe avere migliaia di istanze, quindi ogni conteggio di KB. –
Prova 'SortedList' - dovrebbe avere il sovraccarico di memoria più basso delle diverse opzioni. Se non è troppo lento (nella tua applicazione) e KB ha davvero importanza, sembra certamente fattibile. Aggiungi/rimuovi sarà più lento ma la ricerca dovrebbe essere simile alla BST. –