Come calcolare il costo ammortizzato per un array dinamico?

2

Sto cercando di capire come eseguire il costo ammortizzato per una tabella dinamica. Supponiamo di utilizzare il metodo di contabilità.

Sia A di dimensione m una matrice di n elementi. Quando n = m, creiamo una nuova matrice di dimensione 4m, quindi copiamo gli elementi di A nel nuovo array. Quando n = m / 4, quindi crei una nuova matrice di dimensione m / 4 e copia gli elementi in quella matrice.

Ciò di cui sono confuso è come calcolare i costi. Da quello che so finora: Prima della prima espansione, paghi due dollari per l'inserimento. 1$ per l'inserto e 1$ che hai appena archiviato con l'elemento, in modo che tu possa utilizzarlo successivamente per un'operazione di copia.

Quindi quando lo espandi, usi quello $ memorizzato per spostare l'elemento nel nuovo array. Ora nel nuovo array gli elementi non avranno alcun $ con essi. Ma ora quando inserisci un nuovo elemento, usi 3$ . 1$ per l'inserto, quindi uno in più per se stesso (per una copia futura) e uno in più per l'elemento precedente appena copiato.

Il problema qui è, e se hai una matrice come questa:

1$ 2$

Quindi inserisci un elemento

1$ 2 3$ _ _ _ _ _

Ora come gestisci un'operazione di cancellazione?

    
posta omega 09.03.2013 - 02:51
fonte

1 risposta

1

Non ci sono costi ammortizzati per un array come questo.

Considera il tuo esempio 1$ 2$ . Quando aggiungi un elemento, dovrai aumentare la dimensione dell'array. Ora rimuovi un elemento e devi ridurre le dimensioni. Ora di nuovo aggiungi un elemento. Ecc.

Consideriamo ora un array più grande con n = m. Aumentando n, diventa sempre più costoso aggiungere e rimuovere un singolo elemento. In effetti, puoi fare il costo per aggiungere e rimuovere un singolo elemento arbitrariamente alto, e quindi non ci possono essere costi ammortizzati.

    
risposta data 21.06.2013 - 15:29
fonte

Leggi altre domande sui tag