In Manuale di progettazione dell'algoritmo di Edition 2 di Steven Skiena, parla di array dinamici su pagina 67 , che li porta ad avere lo stesso Big-Oh degli array normali. Non capisco come. Questo è ciò che afferma il libro
Half the elements [in final array] were moved once, a quarter twice, and so on, so total movements M is given by
Nonstacontandoalcunimovimentiduevolte?
(La parte rossa viene copiata dall'ultimo array e blu è la nuova parte inserita)
Per gli inserimenti n
ci sono lg n
reallocations di array. Quindi 1 ° elemento viene copiato lg n
volte, il secondo lg n - 1
volte, il prossimo 2 lg n - 2
volte, il prossimo 4 lg n - 3
volte e così via.
Nonsocomerisolverequestoproblema,macosastopensandomale?
Eccoilmiocodiceinlattice,sequalcunovuolemodificarlo
M = 1 \cdot lg_2 n + 1 \cdot (lg_2 n - 1) + 2 \cdot (lg_2 n - 2) + 4 \cdot (lg_2 n - 3)
= \sum_{i = 1}^{lg_2 n - 1} 2^i \cdot (lg_2 n - i)