考虑到问题,如何提出一个递推方程?
例如:
让S
成为一组n>0
个不同的整数。假设n
是3
的幂。
三元比较可以比较集S
和集合中的三个数字
订购它们从最大到最小。
描述一种有效的算法,该算法使用尽可能少的三元比较来查找集S
中的最大数字。
这是我遇到的中期问题之一。我想出了
T(n) = 3T(n/3)+1
和其他学生想出别的东西。
一般来说,在找到问题的递归时要查找什么?
答案 0 :(得分:2)
这取决于问题,但通常会尝试将问题分解为更小的问题再加上一个步骤,或几个较小的问题,以及将它们组合在一起的步骤。
我认为你的答案是正确的。你是怎么得到答案的?你能解释一下你所遵循的过程吗?
我将如何做到这一点:
您可以通过将整数划分为三个较小的同等大小的组来拆分问题。假设您知道如何在T(n / 3)中找到每个较小组的最大值,然后使用三元比较运算符在一个额外步骤中找到三个最大值的最大值(给出+1)。这是总体最大值。这给出了您描述的递归关系。您还需要定义基本情况:T(1)= 0或T(3)= 1.这并不能证明它是最优的,但我认为您可以证明它使用的是不同的参数。
大多数递归解决方案遵循类似的模式,但没有硬性和快速的规则,你可以随时遵循。只需练习许多不同的例子,直到你掌握它为止。