나는 하나의 가장자리를 제거하여 N 개의 노드 (각 노드의 최대 차수가 3 인 곳)가있는 트리를 분할하는 알고리즘을 찾고 있으므로 두 개의 트리가 가능한 한 N/2에 가깝습니다. "가장 중심에있는"가장 자리를 어떻게 찾습니까?균등 분할 나무
트리는 알고리즘의 이전 단계에서 입력으로 제공되며 그래프로 입력되므로 밸런싱되지 않으며 어떤 노드가 루트인지 분명하지 않습니다.
제 아이디어는 트리에서 가장 긴 경로를 찾은 다음 가장 긴 경로의 중간에있는 가장자리를 선택하는 것입니다. 작동합니까?
최적의 방법으로, 어느 트리에도 2N/3 노드 이상이 존재하지 않도록하는 솔루션을 찾고 있습니다.
답장을 보내 주셔서 감사합니다.
나무의 레이아웃 균형에 관한 데이터가 없다면 퇴화 된 나무 (예 : 왼쪽 팔에 100 개, 오른쪽 팔에 50 개)로 시작하여 나중에 50/100으로 나뉘어 다시 시작할 수 있습니다 같은 배. –
예, 길이가 150 인 가장 긴 경로를 취하고 경로의 중간 가장자리 (경로의 75 번째 또는 76 번째)를 취하면 길이가 같은 부분으로 분할됩니다. 문제는 그러한 최적의 가장자리가 항상 존재하는지 (나는 그렇게 생각하지 않는다)이다. – anonymous
퇴화 된 나무는 기본적으로 연결된 목록입니다. 예 : 두 개의 자식이있는 유일한 노드는 루트 노드입니다. 따라서 루트에서 트리를 통과하는 경로가 두 개 있습니다. 100 개의 선형 노드로 왼쪽 아래로, 50으로 오른쪽 아래로 이동합니다. 가장 긴 경로 (100 노드 분기)를 분할하면 100을 50/50으로 분할하고 오른쪽 분기에서 나머지를 더하기 때문에 트리를 100/50 내지 50/100이다. –