-
28-09-2020 - |
题
我在我的复杂性理论课程中遇到了以下问题:
给定一组数字 $ a:={a_1,\ dots,a_n \} \子集_ {\ mathrm {有限}} \ mathbb {n} $ 一个数字 $ b $ 也在 $ \ mathbb {n} $ ,使得以下条件适用: $ a_i $ 划分 $ a_ {i + 1} $ 所有 $ i
由于给定的条件, $ b $ 必须是第一个 $ a \ neq 1 $的倍数。拍摄 $ a_1 \ neq 1:b= a_1 \ cdot x $ 。发现这个x让我回到子集 - 和问题,尽管它肯定不在p。
任何帮助将是值得注意的。
解决方案
简而言之,贪婪算法有效,在每个步骤中,您在 $ a $ 中找到最大的数字,并从 $ B $ 。如果 $ b $ 变为零,则可以获得解决方案。如果达到<跨度类=“math-container”> $ a $ 的所有数字的点,则大于 $ b $ 输出号。< / p>
在下面的情况下,列出了算法的正式描述和正确性证明。
这里是算法的正式描述。让 $ a_0= a,b_0= b $ 和 $ b_i $ 是 $ B $ $ i $ -th迭代。让 $ a_i $ 是 $ a $ $ i $ -th迭代。然后算法如下。在每个步骤中 $ i= 1,\ dots $ 查找最大的数字 $ a_j $ $ a_ {i-1} $ 不大于 $ b_ {i-1} $ 。如果未存在输出否。否则,set $ b_ {i}= b_ {i-1} - a_j $ 和 $ a_i= a_ {i- 1} \ setminus \ {a_j \} $ 。如果 $ b $ 变得等于零,则输出是,else erate。
2.如权利要求1所述。前一个算法输出给定的子集总和的给定实例的正确答案。
在我们证明我们证明辅助索赔之前。
索取2。 let $ a_1,\ dots a_n $ 是 $中的数字$ 按升序。然后 $ \ sum \ limits_ {i= 1} ^ {k-1} a_i
证明。(索契> incizoilion的证明 $ k $ 。对于n= 1,总和为空。现在我们证明了 $ k $ 。 $$ \ sum \ limits_ {i= 1} ^ {k-2} a_i + a_ {k-1} <2a_ {i-1} \ leq a_i,$$ 如果由于<跨度类=“数学容器”> $ a_ {k-1} $ 划分并且小于 $ a {k} $ 。
证明。(8.如权利要求1)如果算法输出是,那么它显然是一个是 - 实例,因为它只从给定集中选择数字并从 $ B $ 。
现在我们证明,如果我们的算法输出否,则给定的实例是NO-DIPLET。为此,我们证明,如果在步骤 $ i $ 我们选择一个元素 $ a_j $ ,那么给定实例的解决方案必须包含此元素。我们通过encuction通过 $ i $ 来证明这一点。注意,任何 $ a_j',j'> j $ 严格大于 $ b_i $ ,因此可以假设通过归纳假设,所有先前选择的 $ a $ 如果存在一个解决方案的一部分。现在使用索入量1, $ \ sum \ limits_ {i= 1} ^ {j-1} a_j $ < $ a_j $ 并且由于我们只删除元素, $ a_i $ 没有其他元素小于 $ a_j $ 因此,如果我们不选择 $ a_j $ 选择所有较小的元素都不只需获得等于 $ b $ 。因此,我们必须选择 $ a_j $ 。
其他提示
考虑以下几个特例您的问题: $ a_i= c ^ {i-1} $ 对于某些$ c \ ge 2 $ 。例如,如果 $ c= 10 $ ,则我们有 $ a_1= 1,a_2= 10,a_2= 100,a_3= 1000,\ dots,a ^ n= c ^ {n-1} $ 。
在这种情况下,如果且仅当 $ 0 \ le b
看看这是否有助于您考虑问题。