我在我的复杂性理论课程中遇到了以下问题:

给定一组数字 $ a:={a_1,\ dots,a_n \} \子集_ {\ mathrm {有限}} \ mathbb {n} $ 一个数字 $ b $ 也在 $ \ mathbb {n} $ ,使得以下条件适用: $ a_i $ 划分 $ a_ {i + 1} $ 所有 $ i $ a_i 。证明了子集合的特殊情况是在p中解除删除的。

由于给定的条件, $ 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 所有 $ k \在[n] $

证明。(索契> 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 和base $ c $ $ b $ 不包含0和1.特别的数字,即使是一些 $ B $ 不是 $ c $ 的倍数,与您的二对大段落相矛盾。

看看这是否有助于您考虑问题。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top