我必须编写一个小程序来实现以下算法:
假设您有一个搜索算法,在每个递归级别,在搜索特定数据项时会排除一半数据。仅当剩下一个数据项时,搜索才会停止。当数据中的元素数量是1024时,需要多少级别的递归?
有人知道如何分析或有关如何开始的任何建议吗?
答案 0 :(得分:2)
您需要找到d
的最小值,以便:
1 * 2 * 2 * 2 * .... * 2 = 1024
____________________
total of d times
以上情况属实,因为每次乘2实际上是递归中的一个级别,你从1个元素的stop子句开始,直到得到初始数据大小,即1024.
上述等式实际上是2^d = 1024
从双方提取log_2可以轻松解决这个问题:
log_2(2^d) = log^2(1024)
d = 10
P.S。请注意,上面是递归调用的数量,不包括初始调用,因此对方法的调用总数为d+1=11
,一个来自调用环境,10个来自方法本身。