问题:给定一个n位数字,应该从中删除哪个k(k
解决方案:删除大于或等于其右邻居的第一个数字(从左到右)或最后一个数字,如果我们找不到这样的数字。重复此过程k
次。 (请参阅codecareer以供参考。还有其他解决方案,例如geeksforgeeks,stackoverflow,但我认为此处描述的解决方案更直观,所以我更喜欢这个。)
现在的问题是,如何证明上述解决方案是正确的,即如何在每一步删除一个数字后使最小数字最小,从而保证最终数字最小。
答案 0 :(得分:0)
假设k = 1
。
允许m = Σi=0,...,n aibi
和n+1
数字anan-1...a1a0
与基数b
,即0 ≤ ai < b ∀ 0 ≤ i ≤ n
(例如b = 10
)。
∃ j > 0
aj > aj-1
j
,aj
最大
这意味着aj
是连续数字的(不必严格地)增加序列的最后一位数。
然后,数字m'
现已从数字中移除,结果数字m-m'
的值为
m' = Σi=0,...,j-1 aibi + Σi=j+1,...,n aibi-1
这种减少的目的是最大化差异j
。所以我们来看看:
m - m' = Σi=0,...,n aibi - (Σi=0,...,j-1 aibi + Σi=j+1,...,n aibi-1) = ajbj + Σi=j+1,...,n (aibi - aibi-1) = anbn + Σi=j,...,n-1 (ai - ai+1)bi
可以更好地选择an...aj
以获得更大的差异吗?
ai-ai+1 ≥ 0
是一个不断增加的子序列,j' > j
成立。因此,选择j
而不是i
,您会得到更多的零,其中您现在有一个正数,即差异不会更大,但如果存在ai+1 < ai
j
则会更低}(严格更小)。 aj-1-aj < 0
应该是最大的,即∄ j > 0
。我们知道
bj-1 > Σi=0,...,j-2(b-1)bi = bi-1-1这意味着,如果我们选择`j&#39; &LT; j&#39;,我们得到差异的负面补充,所以它也不会变大。
如果aj > aj-1
j = 0
k = 1
上述证据适用于{{1}}。
这只是您的算法适用于{{1}}的证明。
可以将上述证明扩展到(不必严格地)增加数字的多个子序列。由于您需要的索引数量,它具有完全相同的证据但可读性更低。
也许你也可以使用归纳,因为数字之间没有相互作用(阻塞下一个选择或其他东西)。
答案 1 :(得分:0)
这是一个简单的参数,您的算法适用于任何k。假设第m个位置中的数字小于或等于它的右(第m + 1)个数字邻居,并删除第m个数字但不删除第(m + 1)个数字。然后你可以删除第(m + 1)个数字而不是第m个数字,你会得到一个小于或等于原始答案的答案。
答案 2 :(得分:0)
通知:此证明用于删除k位数字后建立最大值,但思路相似
密钥引理:最大(m + 1)位数字包含最大m位 所有m的数字= 0,1,...,n-1
证明:
one
位数字以获得最大值
结果:只需删除the first digit which next digit is greater than it
或the last digit if digits are in non-ascending order
。这很容易证明。我们用矛盾来证明引理。
S(k) ⊄ S(k + 1)
。请注意,S(k) ⊂ S(n)
作为初始编号包含所有次优值,因此必须存在一个x
和S(k) ⊂ S(x)
,S(k) ⊄ S(x - 1)
k + 2 <= x <= n
S[X][y]
以获得S(x-1),因此S[X][y] ∈ S(x)
和S[X][y] ∉ S(x - 1)
以及{{1} }必须包含它。 S(k)
根据我们的贪婪解决方案,从开始到S [X] [y]的所有数字均为 以非升序排列。
We now use contradiction to prove that S(k) does not need to contain this digit .
,那么S[X][y] is at the tail
--->矛盾!S(k) can be the first k digits of S(x)
中的所有数字。如果存在S[X][1, 2,..., y] are in S[k]
S(k)S[X][z] is not in
,那么我们可以将, 1 <= z <= y - 1
到S(k)
范围内的S[X][z + 1, y]
的数字进行移位以得到更大或相等的数字S(k)。因此,至少有left one unit
位2
是after S[X][y]
的{{1}}。然后,我们可以跟随not in S(k)
到S [X] [y],但是我们x >= k + 2
使用prefix of S(k)
,我们使用not
。 S[X][y]
------->矛盾!因此,我们证明了引理。如果我们有S[X][y + 1]
,并且知道As S[X][y + 1] > S[X][y], we can build a greater S(k)
,则S(m + 1)
必须是S(m + 1) contains S(m)
中的S(m)