Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 近似数查找算法_Algorithm_Search_Logarithm - Fatal编程技术网

Algorithm 近似数查找算法

Algorithm 近似数查找算法,algorithm,search,logarithm,Algorithm,Search,Logarithm,考虑以下游戏: 约翰和彼得在一个数字上意见一致 约翰在1和n之间选择一个数字x 彼得在1到n之间做了一系列的猜测。对于每个猜测: 如果x/2≤K≤2次,然后彼得赢了 否则,约翰告诉彼得x是否小于k 彼得想在最少的猜测中获胜 有明显的解决方案需要最坏情况下的O(logn)猜测,但一位朋友告诉我,有一个解决方案的渐近行为比这更好。我的朋友是对的吗?你的朋友是对的。x的可能值可以划分为{1,2,3,4}、{5,6,…,19,20}、{21,22,…,83,84}等范围,其中每个范围都有一个覆盖

考虑以下游戏:

  • 约翰和彼得在一个数字上意见一致
  • 约翰在1和n之间选择一个数字x
  • 彼得在1到n之间做了一系列的猜测。对于每个猜测:
    • 如果x/2≤K≤2次,然后彼得赢了
    • 否则,约翰告诉彼得x是否小于k
彼得想在最少的猜测中获胜


有明显的解决方案需要最坏情况下的O(logn)猜测,但一位朋友告诉我,有一个解决方案的渐近行为比这更好。我的朋友是对的吗?

你的朋友是对的。x的可能值可以划分为{1,2,3,4}、{5,6,…,19,20}、{21,22,…,83,84}等范围,其中每个范围都有一个覆盖整个范围的“中心”元素;例如,如果x在21到84之间,那么k=42是一个成功的猜测。有O(logn)这样的范围,Peter可以使用二进制搜索在O(logn)猜测中找到正确的范围。

你的朋友是对的。x的可能值可以划分为{1,2,3,4}、{5,6,…,19,20}、{21,22,…,83,84}等范围,其中每个范围都有一个覆盖整个范围的“中心”元素;例如,如果x在21到84之间,那么k=42是一个成功的猜测。有O(logn)这样的范围,Peter可以使用二进制搜索在O(logn)猜测中找到正确的范围。

Peter尝试了多少次?只有一次)在回答了许多问题后,你应该会赢。问题是你需要问多少问题彼得试了多少次?只有一次)在问了很多问题后你应该会赢。问题是你需要多少个问题嗯,我在分析n=1000和x=1的情况,在快速计算之后,我觉得需要5个步骤才能得到答案。我错了吗?@NiVeR:对于n=1000,一个有效分区是[1,4]、[5,20]、[21,84]、[85340]和[3411000]。使用二进制搜索,您首先猜测42(涵盖[21,84]),然后被告知x小于42/2;让我们假设你下一步,不幸的是,猜测10(涵盖[5,20]),并且被告知x小于10/2;最后你猜到2(覆盖[1,4])就赢了。那么,最坏的情况是三步。很好,我跳了起来。我做了一个不同的(次优)执行。嗯,我在分析n=1000和x=1的情况,在快速计算之后,我觉得需要5个步骤才能得到解决方案。我错了吗?@NiVeR:对于n=1000,一个有效分区是[1,4]、[5,20]、[21,84]、[85340]和[3411000]。使用二进制搜索,您首先猜测42(涵盖[21,84]),然后被告知x小于42/2;让我们假设你下一步,不幸的是,猜测10(涵盖[5,20]),并且被告知x小于10/2;最后你猜到2(覆盖[1,4])就赢了。那么,最坏的情况是三步。很好,我跳了起来。我做了不同的(次优)执行。