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_Binary Search_Linear Search - Fatal编程技术网

Algorithm 我如何从一个只能回答“是”或“否”的系统中猜测(最佳搜索算法)任何正整数?

Algorithm 我如何从一个只能回答“是”或“否”的系统中猜测(最佳搜索算法)任何正整数?,algorithm,search,binary-search,linear-search,Algorithm,Search,Binary Search,Linear Search,如果你猜对了数字,系统只会给出是或否。 让我们举两个例子,其中 1。数字=3 2。数字=134567894567 如您所见,如果您拨打线性电话,则可以找到第一个号码,如:- is the number = 1? No is the number = 2? No is the number = 3? Yes 因此,线性搜索算法更容易实现 但是,如果元素的大小与134567894567一样大,那么使用二进制搜索方式可能是有意义的。如何构建一个能够提供最佳结果的系统,同时牢记上述约束。如果系统给出是

如果你猜对了数字,系统只会给出是或否。 让我们举两个例子,其中

1。数字=3

2。数字=134567894567

如您所见,如果您拨打线性电话,则可以找到第一个号码,如:-

is the number = 1? No
is the number = 2? No
is the number = 3? Yes
因此,线性搜索算法更容易实现


但是,如果元素的大小与134567894567一样大,那么使用二进制搜索方式可能是有意义的。如何构建一个能够提供最佳结果的系统,同时牢记上述约束。

如果系统给出是/否的答案,则不能使用二进制搜索。 您需要使用线性搜索

要使用二进制搜索,条件如下:

  • 范围必须是有界的
  • 在每次“猜测”中,它必须告诉你需要朝哪个方向前进
  • 这是使用二进制搜索的最低要求。
    因此,对于您目前无法获得所需信息的情况,您必须使用最初建议的线性搜索。

    二进制搜索仅适用于排序数据。如果您能够使输入具有限制可供选择的数字的最小值和最大值,则可以在最小值和最大值之间创建一个数字数组,该数组经过排序后可用于二进制搜索。@klaurtar1使用二进制搜索不需要数组。唯一的限制是您必须有一个最小值和最大值。此外,当系统仅答复
    Yes
    No
    二进制搜索时,您搜索的函数必须是单调的,若系统回答,若我们正在搜索的数字是
    =query
    ,那个么我们可以使用二进制search@klaurtar1我同意。如您所见,没有涉及数组或列表。你没有一个数字列表,只是一个随机数。二进制搜索被用作猜测元素的一种方法。那么,在这种情况下,您建议我有什么选择呢?线性不应该是绝对答案。