Это был вопрос на выпускном экзамене наших алгоритмов. Это дословно, потому что проф дайте нам взять копию дома экзамена.Подмножество в линейном времени
- (20 баллов) Пусть I = {r1, r2, ..., гп} будет множество п произвольных положительных целых чисел и значения в I является отчетливым. I не указан в каком-либо отсортированном порядке. Предположим, что мы хотим, чтобы найти подмножество I ' из я таким образом, что общая сумма всех элементов в я ровно 100 * CEIL (п^0,5) (каждый элемент I может появиться в самых один раз в I '). Представить алгоритм времени O (n) для решения этой проблемы.
Насколько я могу сказать, что это в основном частный случай задачи о рюкзаке, иначе известный как проблема подмножества суммы ... оба из которых находятся в НП и в теории невозможно решить в линейном время?
Итак ... это был трюк?
This SO post в основном объясняет, что псевдо-многочлен (линейное) время приближение может быть сделано, если весовые коэффициенты ограничены, но в задаче экзамена веса не ограничены, и в любом случае, учитывая общую сложность экзамена Я был бы потрясен, если бы профессор ожидал, что мы узнаем/придумаем неясный алгоритм динамической оптимизации.
Вес действительно ограничен, вы можете игнорировать эти веса, которые больше, чем '100 * потолка (SQRT (п))'. Таким образом, вы можете использовать алгоритм, с которым вы связаны. – justhalf
Когда нет решения (например, 'I = {1,2,3,4}'), каков должен быть ответ? (a) «нет решения» (b) «ближайшее решение ...» (c) Не сходится в O (n). –