Це питання було мотивоване запитанням про stackoverflow .
Припустимо, вам задано вкорінене дерево (тобто є корінь і у вузлів є діти тощо) на вузлах (позначено ).n 1 , 2 , … , n
Кожна вершина має невід'ємну цілу вагу: .ш i
Крім того, вам дається ціле число , таке, що .1 ≤ k ≤ n
Вага набору вузлів - сума ваг вузлів: .S ⊆ { 1 , 2 , … , n } ∑ s ∈ S w s
Дано вхід , і ,ш я к
Завдання - знайти підлісок мінімальної ваги * , , такий, що має рівно вузлів (тобто ).T S k | S | = > k
Іншими словами, для будь-якого підлісового з , такого, що , ми повинні мати . T | S ′ | = k W ( S ) ≤ W ( S ′ )
Якщо кількість дітей кожного вузла було обмежено (наприклад, двійкові дерева), то існує алгоритм поліноміального часу, що використовує динамічне програмування.
У мене є відчуття, що це NP-Hard для загальних дерев, але я не зміг знайти жодних посилань / доказів. Я навіть зазирнув сюди , але не зміг знайти щось, що могло б допомогти. У мене є відчуття, що це залишиться NP-Hard, навіть якщо ви (а це може бути простіше довести).
Здається, це має бути добре вивченою проблемою.
Хтось знає, чи це проблема NP-Hard / чи відомий алгоритм часу P?
* Суб-ліс являє собою підмножину вузли дерева , такі , що якщо , то всі діти знаходяться в теж. (тобто це розрізнений союз укорінених під дерев ).S T x ∈ S x S T
PS: Вибачте, будь ласка, якщо виявиться, що я пропустив щось очевидне і питання справді поза темою.