맵 트리에 대한 최적의 데이터 구조는 무엇입니까?


9

데이터 구조, 기본적으로 맵 트리를 찾고 있는데, 각 노드의 맵에는 새로운 노드와 부모 노드 맵의 요소가 포함되어 있습니다. 여기서 맵은 STL의 맵 또는 파이썬의 dict와 같은 키와 값이있는 프로그래밍 맵을 의미합니다.

예를 들어 루트 노드가있을 수 있습니다.

root = {'car':1, 'boat':2}

부모 맵에 요소를 각각 추가하는 2 명의 자식

child1 = {'car':1, 'boat':2, 'jet':35}
child2 = {'car':1, 'boat':2, 'scooter':-5}

가능한 한 공간 효율적이기를 원합니다. 즉, 각 노드에 결과 맵의 전체 사본을 저장하고 싶지 않지만 이상적으로는 여전히 O (log N)입니다 .N은 총 수입니다. 전체 트리가 아닌 노드의 요소.

아마도 이것을 위해 사용할 수있는 스마트 해시 함수가 있다고 생각했지만 아무것도 만들 수 없었습니다.

순진한 접근 방식은 새로 추가 된 항목을 각 노드의 맵에 저장 한 다음 아무것도 발견되지 않으면 트리 위로 이동하는 것입니다. 나무 깊이에 따라 다르므로 마음에 들지 않습니다.


따라서 각 노드는 부모에 저장된 맵을 구체화하는 맵을 나타냅니다.
Suresh Venkat

또한 수학적 또는지도 학적 의미에서지도를 의미합니까?
Suresh Venkat

수학 / CS 의미의지도를 의미합니다. 예를 들어 STL의 맵과 같습니다.
phreeza

@Suresh : 개선되지 않은 것 같습니다. 질문이 맞으면 자식 노드 부모 노드의 맵에 새 요소를 추가 합니다.
Jukka Suomela

첫 번째 질문에 답하기 위해, 각 노드는 더 많은 키 / 값 쌍이 추가된다는 의미에서 맵을 세분화합니다.
phreeza

답변:


10

쿼리가 무엇인지 말하지는 않았지만 query ()가 노드와 키를 가져 와서 관련 값을 원한다고 가정합니다 (또는 그러한 값이 없으면 null). 이 경우 일반적으로 모든 노드에 별도의 맵을 저장하는 것보다 더 나은 방법은 없다고 생각합니다. 예를 들어, 각 경로 노드에 분기 된 하나의 노드가있는 캐터필러 트리 (총 2n 노드)를 고려하십시오. 경로의 한쪽 끝에서 뿌리를 내립니다. 이제 키의 유니버스 크기가 m이라고 가정합니다. 분기 된 각 노드 v와 m 개의 가능한 키 각각에 대해 해당 키가 v에 존재하거나 존재하지 않을 수 있으며 둘 다 하위 트리 제한 조건을 준수합니다. 그래서,2미디엄 각 키가 각 포크 노드에 있는지 여부에 대한 가능성이 있으므로 필요한 정보를 저장하기 위해 mn 비트의 공간이 필요합니다.


5
그러나이 예에서는 중복 정보 를 저장해야한다는 것을 보여주지 않습니다 (즉, 각 하위 노드에서 루트 노드 항목을 복제해야 함).
Jukka Suomela

혼란 스러워요. 깊이의 나무에서1 노드를 저장할 수 없다는 것이 분명합니다 미디엄 바인딩 영형(미디엄)우주. 당신의 모범이 더 많은 것을 보여주고 있습니까?
Radu GRIGore

15

우선, "지도"의 의미는 TCS 용어에서 "사전"이라고 생각합니다. 둘째, "이상적으로는 조회가 여전히영형(로그)", 사전에서 다양한 해시 테이블을 사용하여 조회하는 데 O (1) 시간이 걸리기 때문에 세 번째로, 문제가 정적인지 동적인지는 언급하지 않았으며 정적이라고 가정합니다.

이 문제의 최적의 복잡성은 Θ(전임자 검색), 예 : 영형(lglg)반 엠데 보아스를 사용합니다. 단어 크기가Θ(lg); 최적의 선행 작업 범위는 http://people.csail.mit.edu/mip/papers/pred/pred.pdf 를 참조 하십시오 .

문제를 공격하는 올바른 방법은 하나의 전역 해시 테이블을 작성하고 테이블의 각 키에 대해 개별적으로 계층 구조를 처리하는 것입니다. 하나의 키엑스우리는 그것이 나타나는 노드를 알고 있습니다. 순서대로 트리의 순회를 고려하십시오. 노드엑스이 순서대로 간격을 정의합니다. 여부를 확인하려면엑스 일부 노드의 해시 테이블에 있습니다. V, 당신은 여부를 물어 V위에서 정의한대로 세그먼트를 찌릅니다. 이는 선행 검색으로 쉽게 수행 할 수 있으며 모든 간격 끝점에 대한 선행 테이블을 작성합니다.

하한의 경우 하나의 찌르는 질문조차도 전임자만큼 어렵습니다 (색깔 된 선행 작업 검색의 축소 참조). 위의 논문 참조는 선행 검색에 대한 최적의 직접 합 동작을 보여 주므로, 위에서 설명한 알고리즘이 노드 수와 총 키 수 사이의 모든 배급에 최적임을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.