Questa domanda riguarda una struttura dati a cui ho pensato. È una matrice dinamica, come std :: vector <> in C++, tranne che l'algoritmo di rimozione è diverso.Array dinamico con rimozione O (1) di qualsiasi elemento
In una matrice dinamica normale, quando un elemento viene rimosso, tutti gli elementi rimanenti devono essere spostati verso il basso, ovvero O (n), a meno che non sia l'ultimo elemento, che sarà O (1).
In questo, se qualsiasi elemento viene rimosso, viene sostituito dall'ultimo elemento. Questo ovviamente perde l'ordine degli elementi. Ma ora la rimozione di qualsiasi elemento è costante.
Un elenco avrà gli stessi tempi di rimozione, ma questa struttura ha accesso casuale. L'unico avvertimento è che non sai a cosa stai accedendo, dal momento che l'ordine potrebbe essere confuso, quindi a che cosa serve comunque l'accesso casuale. Inoltre una lista non rovinerà alcun puntatore/iteratore agli elementi.
Quindi, questa struttura sembra piuttosto inutile, tranne per il compito molto specifico di camminare rigorosamente attraverso gli elementi e forse rimuoverli lungo il percorso. Un elenco può fare lo stesso, ma questo ha prestazioni di cache migliori.
Quindi, questa struttura strana/inutile ha un nome e ha qualche utilizzo? O solo una bella piccola tempesta cerebrale?
In genere (IMO), quando è necessario l'accesso casuale, è necessario anche l'ordine. Idea molto interessante, però. –