Algorithm 算法复杂度
假设一个神谕知道一个你想知道的自然数n oracle仅对以下三种类型的查询回答是/否:Algorithm 算法复杂度,algorithm,time-complexity,Algorithm,Time Complexity,假设一个神谕知道一个你想知道的自然数n oracle仅对以下三种类型的查询回答是/否: 这个数字大于x吗 这个数字小于x吗 这个数字等于x吗 (其中x可以是任意自然数,可以在查询中更改) 描述一种向oracle提出查询的方法,该方法在提出的查询数量方面是渐进有效的 执行分析并编写正确性证明。请注意,提出的查询数量将是n的函数。请查看维基百科关于二进制搜索算法的帖子。这可能是你的一个起点 这个问题不太公平,因为它需要渐进效率,而没有给出任何关于目标的暗示。我们可以使用一个非正式的信息理论界,并说答
执行分析并编写正确性证明。请注意,提出的查询数量将是n的函数。请查看维基百科关于二进制搜索算法的帖子。这可能是你的一个起点
这个问题不太公平,因为它需要渐进效率,而没有给出任何关于目标的暗示。我们可以使用一个非正式的信息理论界,并说答案传达了
i
位信息,即Omega(i)=Omega(lgn)
算法
阶段1:查找有效位的数量
Ask x<1b, x<10b, x<100b, x<1000b, x<10000b, x<100000b... (all powers of 2)
until you get a yes.
5位,10个问题
正确性
在阶段1中,搜索间隔形成整数的分区,搜索迟早会停止。当它停止时,
p这是不够的,因为你没有上限。她可以进行单边二进制搜索。仍然可以使用该算法。请告诉我们您知道什么,以便我们可以在此基础上进行构建。简要说明:n
作为位数的用法具有误导性,因为问题明确指出:假设oracle知道一个自然数n
,然后询问提出的查询数量将是n的函数,因此,复杂性函数中的数字n
应该是数字本身(使问题的复杂性Omega(logn)
和算法的复杂性Theta(logn)
——或者定义一个新变量k=lg(n)
,用于分析。
Take the value of the last bound where phase 1 stopped and divide it by 2.
Then, going from the second most significant to the least significant bit,
set the next bit and ask if <x. Keep the bit set if you get a no.
x<1b ? no
x<10b ? no
x<100b ? no
x<1000b ? no
x<10000b ? no
x<100000b ? yes
Q=10000b
x<11000b ? yes
Q=10000b
x<10100b ? no
Q=10100b
x<10110b ? no
Q=10110b
x<10111b ? yes
Q=10110b