전술 한 접근법은 각각의 셀이 어레이가 재 초기화 될 필요가있는 횟수를 보유하기에 충분한 수를 보유 할 수 있어야하며, 이는 실질적인 공간 페널티이다. 슬롯 정당하게 기록되지 않을 적어도 하나 개의 값을 보유 할 경우, 하나는 추가의 비용 다른 (일정하지 않은) 공간 페널티 것을 방지 할 수있다 O(Wlg(N))
시간 페널티 여기서 W
의 개수를 구별 사이 기입 어레이 슬롯 지우기 작업이며 N
배열의 크기입니다. 예를 들어, -2,147,483,647에서 2,147,483,647 (그러나 절대 -2,147,483,648은 아님)의 정수를 저장하고 빈 배열 항목을 0으로 읽길 원한다고 가정하십시오. 배열을 -2,147,483,648로 채움으로써 시작하십시오 (그 값을 호출하십시오)B
). 애플리케이션의 어레이 슬롯을 읽을 때 값을 B
0으로 보고하십시오 . 슬롯 배열을 작성하기 전에 I
, 그 유지 여부를 확인 B
하고 만약 그렇다면 I
1보다 크면, 슬롯 0을 저장하는 것이다 I/4
(이 경우, 유지하고, 그 위치에 대해 유사한 체크를 수행 한 후 B
, I/16
등).
배열을 지우려면 I
배열 기준에 따라 0 또는 1로 시작 하십시오 (설명 된 알고리즘이 작동합니다). 그런 다음 다음 절차를 반복하십시오. item I
이 인 B
경우 증가 I
하고 4의 배수를 생성하면 4로 나눕니다 (분할이 1의 값을 생성하면 종료). item I
이 아닌 경우 거기 B
에 저장 하고 4를 B
곱하십시오 I
( I
0에서 시작하면 4를 곱하면 0이되지만 항목 0이 비어 있기 때문에 I
증가합니다).
위의 상수 "4"를 다른 숫자로 대체 할 수 있으며, 값이 클수록 일반적으로 작업 태깅이 덜 필요하지만 값이 작을수록 일반적으로 작업 지우기가 덜 필요합니다. 태그가 지정된 배열 슬롯을 지워야하므로 3-4의 값이 거의 최적입니다. 값 4는 확실히 최적에 가깝고 2 또는 8보다 낫고 다른 숫자보다 편리하기 때문에 가장 합리적인 선택이 될 것입니다.