2016-10-09 2 views
-1

Проблема заключается в том:найти подмножество, которое суммирует до к, используя черный ящик в O (п)

Предположим, что вам дается алгоритм как черный ящик - вы не можете увидеть, как она предназначена - это имеет следующие свойства: если вы вводите какую-либо последовательность действительных чисел и целое число k, алгоритм ответит ДА или НЕТ, указывая, есть ли подмножество чисел, сумма которых равна точно k. Покажите, как использовать этот черный ящик, чтобы найти подмножество заданного набора чисел S, сумма которого равна k. Вы можете использовать черный ящик O (n) раз.

Перед тем, как опубликовать этот вопрос, я уже искал точно такой же вопрос:

An algorithm to determine a subset sequence in O(n)?

Using subset-sum oracle to determine which numbers are members of the subset

https://cs.stackexchange.com/questions/14270/finding-the-subset-of-s-that-sums-up-to-k-using-a-black-box-in-on-time

Я не могу найти удовлетворительного ответа на эти должности. Пусть

S = {1, 2, 3, 4, 5, 6, 7, 8}, к = 7

querrying Oracle (S или S \ setminus любой elemnt), будет возвращать ДА. что не помогает подойти к определенному подмножеству, суммирующему до k.

+0

Итак, есть три повторяющиеся темы, и все, что вы пробовали, передает всю сумму только? Абсолютно никакой другой идеи не приходит в голову? – Groo

+0

Какая часть первой ссылки не поможет? Также обратите внимание, что могут быть несколько подмножеств, которые суммируются до k, и неважно, какой из них вы найдете. – Keiwan

+0

Я объяснил, почему я думаю, что это не полезно. Это мое последнее предложение. допустим, я делаю 8 запросов: Oractle (S \ setminus 1 element), получив 8 YES. который говорит мне, что каждый элемент S не должен находиться в подмножестве, которое суммируется с k. это не помогает. – Jamesszm

ответ

1

Для всех я [0: п - 1], запустить последовательность без я го элемента через поле. Если он возвращает ДА, сохраните элемент и возобновите его, если НЕТ, верните элемент и возобновите его. Готово.

+0

ic, thx за то, что помогли мне понять это! Я не смог прокомментировать исходный пост. Вот почему я задал новый вопрос. – Jamesszm

+0

@DarknessGuideMe - Рад помочь. – Amit

Смежные вопросы