문제는 다음과 같습니다. 트리와 사용 가능한 모서리 수를 그래프로 표시합니다. v1에서 시작하여 이미 방문한 vertifications에서 벗어나는 가장자리를 선택합니다.트리의 서브 그래프 인 주어진 수의 모서리를 가진 최대 트리 서브 그래프 찾기
예이 예에서
최적의 방법은 : 우선
for k==1 AC -> 5
for k==2 AB BH -> 11
for k==3 AC AB BH -> 16
I 이것은부터 길이 k의 최대 경로를 찾는 문제 일 것이다 비록 하찮은 일이지만, 요점은 언제나 다른 방식으로 갈 수 있다는 것입니다. 그래서 접근 방식은 효과가 없습니다.
내가 뭘 지금까지의 생각 :
잘라 k에 나무와 무력 모든 possibilites.
모든 가장자리의 가장자리로가는 비용을 계산하십시오. 비용은 우리가 가고자하는 가장자리가 그 가장자리로 가기 위해 추가해야하는 가장자리의 양으로 나눠지기 전에 모든 가장자리의 합계를 포함합니다. 거기에서 최대를 선택하고 모든 가장자리에 대해 비용을 업데이트 한 다음 k에 도달 할 때까지 다시 수행하십시오.
두 번째 방법은 좋지만 나 배낭 문제를 상기시킵니다.
제 질문은 이렇습니다. 더 좋은 방법이 있습니까? 이 문제는 NP입니까?
EDIT : 트리밍 답변 이의 예 :
이 결정 문제 버전은 분명 NP입니다. 루트는 항상 하위 그래프에 포함되어야합니까? 그렇지 않으면, BH는 k = 1에 대한 최적 해가 될 것이다. –
문제는 "음수가 아닌 가중치가있는 트리가 주어진 경우 원본과 동일한 루트를 가진 트리이기도 한 정확히 * k * 노드의 최대 가중치 서브 그래프를 찾습니다"라고 다시 말할 수 있습니까? 그렇다면, 나는 이것을 해석하기 위해 * k * × # 노드 동적 프로그래밍 테이블을 사용할 수 있다고 생각한다. –
예, 트리 루트가 항상 포함되어 있지만, 문제는 말한대로 다시 말할 수 있지만 k + 1 노드를 사용할 수 있습니다. 동적 프로그래밍 테이블 접근법에 대해 자세히 설명해 주시겠습니까? –