Algorithm 算法复杂度

Algorithm 算法复杂度,algorithm,time-complexity,Algorithm,Time Complexity,假设一个神谕知道一个你想知道的自然数n oracle仅对以下三种类型的查询回答是/否: 这个数字大于x吗 这个数字小于x吗 这个数字等于x吗 (其中x可以是任意自然数,可以在查询中更改) 描述一种向oracle提出查询的方法,该方法在提出的查询数量方面是渐进有效的 执行分析并编写正确性证明。请注意,提出的查询数量将是n的函数。请查看维基百科关于二进制搜索算法的帖子。这可能是你的一个起点 这个问题不太公平,因为它需要渐进效率,而没有给出任何关于目标的暗示。我们可以使用一个非正式的信息理论界,并说答

假设一个神谕知道一个你想知道的自然数n

oracle仅对以下三种类型的查询回答是/否:

  • 这个数字大于x吗
  • 这个数字小于x吗
  • 这个数字等于x吗
  • (其中x可以是任意自然数,可以在查询中更改)

    描述一种向oracle提出查询的方法,该方法在提出的查询数量方面是渐进有效的


    执行分析并编写正确性证明。请注意,提出的查询数量将是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