Ответ Ариабхаты можно исправить, воспользовавшись тем фактом, что мы можем умножить все числа на несколько больших с , а затем добавить к каждому что-то маленькое, чтобы оно действовало как «тег присутствия», и затем предоставить некоторые дополнительные числа, которые позволят нам, чтобы добраться до нуля, если бы мы могли добраться до с К без них. В частности, мы будем использовать c = 2 ( n + 1 ) и 1 в качестве тега присутствия.
Учитывая экземпляр ( S= { х1, … , ХN} , К) общей проблемы с целевым значением К , мы создадим экземпляр конкретной проблемы (с целевым значением 0), который содержит:
- Y= { у1, ... , уN} , гдеYя= 2 ( n + 1 ) xя+ 1 .
- Число Z= - 2 К( n + 1 ) - n .
- n - 1 копия номера 1, именуемая «подтягивающими» номерами.
Я предполагаю, что, как Арябхатта, К положителен. (Поскольку прошло 6 лет, я отвечу на его упражнение для читателя: причина, по которой мы можем это сделать, заключается в том, что если мы поменяем местами знаки всех чисел в случае общей проблемы, включая К , то мы получим новый, эквивалентный экземпляр задачи. Это означает, что для решения любой проблемы достаточно алгоритма для решения положительных К экземпляров - для решения экземпляра с отрицательным К мы могли бы выполнить эту замену знака, запустить этот алгоритм и переслать его ответ как ответ на оригинальный вопрос. И, конечно, если К= 0 тогда нам вообще не нужно выполнять преобразование общего случая в частный случай!)
Сначала давайте покажем, что ответ «ДА» на данный случай общей проблемы подразумевает ответ «ДА» на построенный экземпляр специальной задачи. Здесь можно предположить, что некоторое решение { хJ1, … , ХJм} к общей задаче существует: то есть, это непустой набор т чисел сумм на K . Такесли мы примем соответствующие Y -значения { у J 1 , ... , у J т } в наше решение построенногонапример, они будут подводить к 2K ( n + 1 ) + mмКY{ уJ1, ... , уJм}2K( n + 1 ) + m . Затем мы можем включить в решение - 2 К( n + 1 ) - n , оставив нам сумму м - н . Так как 1 ≤ m ≤ n , это в диапазоне [−n+1,0] , который мы можем успешно увеличить до 0, включив некоторое подмножество номеров подтягивания.
Теперь давайте покажем, что ответ YES на построенный экземпляр подразумевает ответ YES на исходный данный экземпляр. Именно здесь умножение на 2(n+1) становится важным - это то, что позволяет нам быть уверенными, что дополнительные числа, которые мы включили, не могут «сделать слишком много».
Здесь можно предположить, что какое-то решение {yj′1,…,yj′m′} для построенного экземпляра: то есть этот непустой наборm′ чисел суммируется с 0. Согласно требованиям задачи это решение содержит хотя бы один элемент. Кроме того, он должен содержать по крайней мере один элемент изY , поскольку без этого невозможно получить общее количество 0: если присутствуют только подтягивающие числа, то сумма обязательно находится в диапазоне[1,n−1] ( обратите внимание, что в этом случаепо крайней мере одиндолжен быть указан подтягивающий номер, и все они строго положительны, поэтому сумма не может быть 0); в то время как решение состоит только из z и некоторых подтягивающих чисел, тогда сумма обязательно будет отрицательной, потому что z=−2K(n+1)−n≤−n и самое большее, что подтягивающие числа могут увеличить сумму по n−1 .
Теперь предположим, что решение не содержит z . Каждый элемент в 1 = 2 n - 1 . В частности, это подразумевает, что сумма этих двух наборов терминов, взятых по модулю 2 (Y состоит из двух слагаемых: кратное2(n+1) и +1 «тег присутствия». Обратите внимание, что слагаемое +1 в каждом изn элементовY увеличивает сумму на 1, если выбран этот элемент, так же, как и каждое изn−1 выбранных номеров подтягиваний, так что общее количество этих 2 Источники для любого решения - по крайней мере 1 (потому что мы установили в предыдущем параграфе, чтодолжен быть выбранпо крайней мере один элементY ) и самое большееn+n−1=2n−12(n+1) , отлична от нуля. В предположении, что решение не содержитz , единственными другими компонентами в этой сумме являются кратные2(n+1) внесенные выбранными членамиY , которые не влияют на значение суммы, когда берется по модулю2(n+1) . Таким образом, сумма всех членов в решении, когда взято по модулю2(n+1) , является ненулевым, означая, что оно не может быть равно целевой сумме 0, означая, что это не может быть действительным решением вообще: мы нашли противоречие, означающее, что должно быть, чтоz=−2K(n+1)−n присутствует в каждом решении в конце концов.
Таким образом, каждое решение содержит z . Мы знаем это
(−2K(n+1)−n)+∑m′i′=1(2(n+1)xj′i′+1)+∑pull-ups=0 ,
и мы можем изменить условия:
−2K(n+1)+∑m′i′=1(2(n+1)xj′i′)−(n+∑m′i′=11+∑pull-ups)=0
−2K(n+1)+∑m′i′=1(2(n+1)xj′i′)−(n+m′+∑pull-ups)=0
2(n+1)(−K+∑m′i′=1xj′i′)−(n+m′+∑pull-ups)=0 .
Поскольку сумма равна 0, она должна оставаться равной 0, когда берется по модулю 2(n+1) , что подразумевает, что мы можем отбросить все члены, содержащие кратное 2(n+1) чтобы получить новое уравнение
−(n+m′+∑pull-ups)=0 .
Это можно напрямую подставить обратно в предыдущее уравнение, чтобы получить
2(n+1)(−K+∑m′i′=1xj′i′)=0.
Наконец, разделив обе стороны на 2(n+1) листа
−K+∑m′i′=1xj′i′=0,
что дает решение оригинального общего экземпляра проблемы.