$ \ phi_1= 1 $ 또는 $ \ phi_1= 동적 $ \ text {table-insert} $에 대해 $ \ phi_1= 2 $. 여기서 $ \ phi_i $는 $ i $ th 연산 후 잠재적 인 기능입니다.
문제
다음은 동적 테이블 섹션에서 제공됩니다. 알고리즘에 의해 에 대한 소개입니다. et. al.
다음 의사 코드에서 $ T $ 이 테이블을 나타내는 객체입니다. 필드 $ table [T] $ 은 테이블을 나타내는 저장소 블록에 포인터를 포함합니다. 필드 $ num [T] $ 은 테이블의 항목 수와 $ size [t] $ 은 테이블의 총 슬롯 수입니다. 처음에는 테이블이 비어 있습니다. $ num [t]= 크기 [t]= 0 $ .
$ \ text {table-insert (t, x)} $
$ 1 \ quad \ text {$ size [t]= 0 $} $
$ 2 \ quad \ quad \ text {$ 1 $ 1 $ slot으로 $ 2 테이블 [T] $ 할당} $
$ 3 \ 쿼드 \ 쿼드 크기 [T] \ 솔직한 1 $
$ 4 \ quad \ text {if} num [t]= 크기 [t] $
$ 5 \ 쿼드 \ 쿼드 \ 텍스트 {$ 5 {\ text {-}}} $ 2 \ CDOT 크기 [T] $ 슬롯} $ 2 \ CDOT 크기 [}} 테이블 $
$ 6 \ quad \ quad \ quad \ text {$ table [t] $에 $ table [t] $ into $ new {\ text {-}} 테이블 $} $} $} $} >
$ 7 \ quad \ quad \ quad \ text {무료 $ table [t] $} $} $
$ 8 \ quad \ quad \ 쿼드 테이블 [T] \ \ \ \ {-}} 표 $
$ 9 \ quad \ quad \ quad 크기 [T] \ 왼쪽 \ \ CDOT 크기 [T] $
$ 10 \ quad \ text {$ x $ inse $ table} $
$ 11 \ quad num [t] \ lewarrow num [t] + 1 $
$ n $ $ \ text {table-insert} $ 선택한 잠재적 기능은 다음과 같습니다.
$$ \ phi (t)= 2.Num [T] - [T] $$
$ i $ th $ \ text {table-insert} $ 작동, $ num_i $ 은 $ i $ 뒤에 테이블에 저장된 항목 수를 나타냅니다. 동작, $ size_i $ 은 $ i $ th 조작 후 테이블의 전체 크기를 나타냅니다. $ \ phi_i $ 은 $ i $ th 연산 후 잠재력을 나타냅니다.
초기에, $ num_0= 0, size_0= 0 $ 및 $ \ phi_0= 0 $ .
$ i $ th table-insert 작업이 확장을 트리거하지 않으면 $ size_i= size_ 있습니다. {II} $ 및 $ num_i= num_ {i-1} +1 $ , 작업의 상각 비용은 $ \ widehat {c_i} $ 은 상각 된 비용과 $ C_I $ 입니다.$$ \ widehat {c_i}= c_i + \ phi_i- \ phi_ {i-1}= 3 \ text {(자세히 표시되지 않음)} $$ < / P>
$ i $ th 연산이 확장을 트리거하면 $ size_i= 2가 있습니다. size_ {i-1} $ 및 $ size_ {i-1}= num_ {i-1}= num_i -1 $ , 다시, < / P>
$$ \ widehat {c_i}= c_i + \ phi_i- \ phi_ {i-1}= 3 \ text {(자세히 표시되지 않음)} $$ < / P>
이제 문제는 $ \ widehat {c_1} $ 에 대한 계산을하지 않는다는 것입니다. 테이블의 요소 (코드의 1,2,3,10,11 행이 실행됩니다).
비용 $ C_1= 1 $ , $ \ phi_0= 0 $ 및 $ num_1= size_1= 1 \ \ phi_1= 2.1-1= 1 $
$ \ phi_1= 1 \ tag 1 $
so, $$ \ widehat {c_1}= c_1 + \ phi_1- \ phi_0= 2 $$
텍스트는 상각 된 비용이 $ 3 $ 이라고 말합니다. (나는 그들이 대부분의 , 내가 이해할 수있는 것부터)
아래의 플롯에서
텍스트는 $ \ phi_1= 2 $ 의 일종의 모순을 나타내는 것입니다.
ER "> $ (1) $ , $ \ phi_1= 2 $ $ \ widehat {c_i}= 3, \ forall i $나는 내가 착각 한 곳을 꺼내지 않는다.
해결책
우리가 다시 언급하지 않아야 할 인기있는 교과서에서 악명 높은 오류 오류의 인스턴스를 잡았습니다.
반복하려면 "비용 $ C_1= 1 $ , $ \ phi_0= 0 $ < / span> "," $ num_1= size_1= 1 $ $ \ $ $ \ phi_1= 2 \ CDOT1-1= 1 $ "및 " $ \ hat {c_1}= $ $ C_1 + \ PHI_1- \ phi_0 $ $= 2 $ ". $ \ widehat c_i= 3 $ 모두 $ i $ 을 나타냅니다. 첫 번째 $ \ text {t} \ scriptsize {\ text {vible}} \ small \ text {-i} \ scriptsize \ text {nsert} $ 작동은 참으로 매우 특별합니다. 확장으로 간주되지 않습니다. "라인 5-9가 실행되는"으로 정의 된 이벤트. 그러나 $ size_i= size_ {i-1} $ 을 유지 관리하지 않습니다. $ \ widehat {c_i} $ \ / span>에 대한 계산은 $ \ widehat {c_1} $ .
이 오류는 우리가 세부 사항 및 정확성에 너무 많은 관심을 끌었던 예시적인 교과서를 완전히 신뢰하는 경향이있는 오류가 혼란 스럽습니다.
반면에, 그 오류는 언급했듯이, "상각 비용이 대부분 3"이기 때문에 아직도 중요하지 않습니다.
질문이 끝날 때 그림을 자세히 살펴보면 첫 번째 $ \ text {t} \ scriptsize { \ text {vible}} \ small \ text {-i} \ scriptsize \ text {nsert} $ 조작, $ \ phi_1= 1 $ 올바른 값.