프로그래밍 문제로 작업 중이며로드 블록으로 실행 중입니다. 임의의 정수를 다른 정수에 매핑하는 데이터 구조를 찾으려고합니다. "해시 테이블!"이라고 말하는 경향이 있습니다. 또는 "Search Tree!"라고 말하면서 실제로 이것들을 생각해 보았습니다 (더러운 구현을 시도했습니다). 그러나, 잡기가있다!키 - 값 쌍 삽입 후 검색 트리의 값 증가
매핑에서 값을 삽입하거나 제거 할 때마다 삽입 또는 제거 된 값보다 크거나 같은 모든 값을 하나 또는 일부 임의의 오프셋만큼 증가/감소시키고 싶습니다.
다음은 예입니다. (1 7), I는 증가 할 내가 키 - 값 쌍을 추가하면 이제
Keys: (1, 6, 18, 21, 24)
Vals: (2, 1, 3, 0, 4)
:
내가이 맵에 내 키와 값에 사용할 정수의 두 목록을 말해봐 이상의이 초래 한 동일한 모든 값 :Keys: (1, 6, 7, 18, 24)
Vals: (2, 1, 0, 3, 4)
: I는 키 - 값 쌍을 삭제하면 후속
Keys: (1, 6, 7, 18, 21, 24)
Vals: (3, 2, 1, 4, 0, 5)
및 (21, 0),이 결과
이것은 두 목록/배열과 각 삽입/삭제 (즉, 값을 검토하고 하나씩 변경) 한 후에 처리하는 것이 다소 쉽습니다.
그러나 나는 값의 전체 목록을 검토하고 증가/감소시키지 않고도보다 효율적으로 작업 할 수있는 방법을 찾고 있습니다. 아마도 (증가/감소해야하는) 값이 요청 될 때까지 증가/감소를 지연하는 것조차도 가능합니다.
의견이 있으십니까?
밸런스 알고리즘이 델타 관리를 처리하기 위해 복잡해야 할 필요가 있으므로 밸런스 이진 트리 대신 스킵 목록을 지원하도록 어떻게 수정하겠습니까? – jsherer
나는 그것에 대해 생각해야 할 것입니다 (아마도 내일 것입니다). 하지만 [희생양 나무] (http://en.wikipedia.org/wiki/Scapegoat_tree)에서 수행하는 것이 매우 쉽습니다. 실제 값을 평가하고 현재 재구성중인 하위 트리의 모든 델타를 재설정하십시오. – svick
@jordan, 편집 참조. – svick