Algorithm 你能用最简单的语言给我解释一下对数复杂性和对分搜索吗

Algorithm 你能用最简单的语言给我解释一下对数复杂性和对分搜索吗,algorithm,Algorithm,这里有一个解释,但我仍然没有完全理解。 每个对分步骤大致将搜索空间减半。因此,经过k个步骤后,搜索空间减少了约2^k倍。如果搜索空间中最初有n个点,经过大约log2(n)个步骤后,剩余的搜索空间仅由单个点组成 当然,二分法取决于确定目标必须位于哪一半的可能性,因此您需要排序(在某种意义上)输入。这没什么大不了的-您有一个有序的事物列表,在您给出的链接示例中,它是电话簿中的名称-查找名称的一个好方法是 转到电话簿的中间,您要查找的姓名是否按字母顺序晚于页面底部的姓名?是的,那么你需要查看这些页面之

这里有一个解释,但我仍然没有完全理解。

每个对分步骤大致将搜索空间减半。因此,经过k个步骤后,搜索空间减少了约2^k倍。如果搜索空间中最初有n个点,经过大约log2(n)个步骤后,剩余的搜索空间仅由单个点组成


当然,二分法取决于确定目标必须位于哪一半的可能性,因此您需要排序(在某种意义上)输入。

这没什么大不了的-您有一个有序的事物列表,在您给出的链接示例中,它是电话簿中的名称-查找名称的一个好方法是

转到电话簿的中间,您要查找的姓名是否按字母顺序晚于页面底部的姓名?是的,那么你需要查看这些页面之后的页面,或者如果是之前的页面,那么我们需要查看此页面之前的页面(或者我们已经找到了它)。因此,我们已经将下一次迭代中需要查看的页面数量减少了一半(或者将其一分为二)

在下一次迭代中,我们将查看电话簿的上半部分或下半部分。让我们假设名字在前半部分,然后我们转到这半部分的中间,再次做我们的测试,就是我们在这页上的名字之前或之后寻找的名字

等等

我们最多可以这样做多少次?n是页数,所以在最坏的情况下,我们正在寻找的页面是在最后一次迭代中,在最后一次迭代中,n必须等于1(或2),那么我们需要将n减半多少次才能得到1。这个数字是log n base 2,或者正如cs人员所说的O(log n)-他们只是省略了base 2部分

也许从另一个角度来看,你想在电话簿中找到自己的名字。每次你看书的中间,看看你要找的名字是在书的第一或最后一半。你要找的名字的一半就在你保留这一半,扔掉另一半

你知道你保存的那本书的一半有你要找的名字。你再做一次测试,打开你保存的书的中间部分,看看你要找的名字是在上半部分还是下半部分,保留包含名字的那一半,扔掉另一半。继续这样做直到你找到了名字。
hth

我有一个问题,是在读了你从(也许)开始的一段中的答案后产生的。假设我在电话簿上找一个朋友的名字,他的名字叫尼尔·阿尔索普。我的电话簿上有1000个名字。我在中间打开书,看到他的名字不在书的前半部分,我扔掉了书的前半部分。现在我有了一本500人的名字册,我在中间再次打开它,看看他的名字在哪一边,然后再扔下另一半。所以每次我离找到他的名字越来越近。如果没有对数搜索,我将不得不遍历每个名字,因此需要1000次搜索。这是正确的吗?那完全正确。(遍历每一个名字都被称为线性搜索及其O(n))可能的重复我不认为答案会更清晰或完整