가 구조를 모르는 상수도 트리 라고 가정하십시오 . 문제는 "노드 가 노드 에서 노드 까지의 경로에 있습니까?" 와 같은 쿼리를 요청 하여 트리 를 출력하는 것입니다 . 오라클은 각 쿼리에 일정한 시간 안에 응답 할 수 있다고 가정합니다. 트리의 노드 수인 값을 알고 있습니다. 목표는 트리를 출력하는 데 걸리는 시간을 최소화하는 것 입니다.
이 생길 존재 상기 문제에 대한 알고리즘을?
에서 노드의 정도가 최대 3 이라고 가정하십시오 .
내가 아는데 것을
바운드 직경 케이스는 쉽습니다 . 트리의 지름이 인 경우 분할 및 정복 알고리즘을 얻을 수 있습니다.
이진 트리에는 트리를 1 / 3n 이상의 크기의 구성 요소로 나누는 좋은 구분 기호가 있습니다.
- 정점 x를 선택하십시오. 좋은 구분자 레이블 인 경우 재귀하십시오.
- x의 3 개의 이웃을 모두 찾으십시오.
- 노드 수가 가장 많은 이웃 방향으로 이동하십시오. 이웃과 함께 2 단계를 반복하십시오.
구분 기호를 찾는 데는 대부분의 단계가 필요하므로 알고리즘을 얻습니다 .
알고리즘 무작위 . (아래 의견에서 이동)
두 개의 꼭짓점 x와 y를 무작위로 선택하십시오. 1/9 확률로 분리 자의 반대편에 놓입니다. 경로의 중간 노드를 에서 . 이진 검색을 수행하지 않으면 구분 기호인지 확인하십시오.
구분 기호를 찾는 데 예상 시간 이 걸립니다 . 그래서 우리는 무작위 알고리즘 을 얻습니다 .
배경. 나는 확률 적 그래픽 모델에서 일하는 친구로부터이 문제에 대해 배웠다. 위의 문제 는 3 개의 임의의 변수 X, Y 및 Z가 주어지면 Z 값이 주어지면 X와 Y 사이의 상호 정보 값을 알 수있는 오라클을 사용하여 접합 트리 의 구조를 학습하는 것과 대략 일치합니다 . 우리는 Z가 X에서 Y로가는 경로에 있다고 가정 할 수있다.