zhedahht / CodingInterviewChinese2

《剑指Offer:名企面试官精讲典型编程面试题》第二版源代码
Other
5.32k stars 2.17k forks source link

剪绳子贪婪算法最优证明没看懂,求解惑! #32

Open naget opened 5 years ago

naget commented 5 years ago

书中写到:

当n>=5的时候,我们可以证明2(n-2)>n并且3(n-3)>n。也就是说,当绳子剩下的长度大于或者等于5的时候,我们就把它剪成长度为3或长度为2的绳子段

这个“也就是说”结论是怎么得出的?这个结论不是应该证明了3(n-3)>2(n-2)>.....>i(n-i)才能得出吗?

YuaCC commented 5 years ago

假设绳子可以正好分为k段,那么最后乘积是k^(n/k),其中^表示次方,通过求导数的方式可以证明当k=3时,k^(n/k)取得最大值,所以应当尽可能剪出长度3的段。

所以当n%3==0时,直接全部剪成3 当n%3==1时,剪出2个2,剩下全部剪成3 当n%3==2时,剪出1个2,剩下全部剪成3 为什么这么剪,需要仔细想一想就可以明白。

说实话,我感觉这本书不太好,有些地方没讲清。

Jennifer1996 commented 5 years ago

自己推一下数据公式就能明白了,在假设绳子长度大于等于5的时候,推导之后的数字是恒成立的