这是一个家庭作业问题。不期待解决方案..只是寻找正确方向的推动!
设计具有对数时间复杂度的快速算法来计算三元组(N(n),N(n-1),N(n-2))。写一个递归函数,在输入n> 3时,返回上面的三元组。对于足够大的n,例程应该使用比计算N(n)的明显方法少得多的操作。
假设:
N(0) = 0
N(1) = N(2) = N(3) = 1
N(n) = N(n-1) + N(n-3)
N(2k) = N(k)N(k) + 2N(k)N(k−2) + N(k−1)N(k−1) and
N(2k−1) = N(k)N(k) + 2N(k−1)N(k−2)
**显而易见的方法是计算序列N(0),N(1)... N(n)中的值,因此能够使用预先计算的值。这需要O(n)。
答案 0 :(得分:0)
记住它。递归调用所有在多个对数间隔的簇中着陆,并且您可以证明这些簇的最大大小的简单约束。由于这是作业,我把证明留给你。
(或者,您可以编写一个函数,通过一次递归调用计算整个集群的值,以获取下一个较低集群的值。这可能就是他们想到的方法。)