能用最简单的语言向我解释对数复杂性和二分搜索吗?

时间:2011-11-10 12:53:27

标签: algorithm

这里有一个解释,但我仍然没有完全理解。 What is a plain English explanation of "Big O" notation?

2 个答案:

答案 0 :(得分:6)

这不是什么大事 - 你有一个顺序列表,在你给它的链接的例子中是电话簿中的名字 - 找到名字的好方法是

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

在下一次迭代中,我们正在查看电话簿的前半部分或电话簿的后半部分。所以,让我们说名字是在上半部分,然后我们进入这一半的中间,我们的测试再次是我们在此页面上的名称之前或之后寻找的名称。

等等

我们必须做的最多次数是多少? n是页数,所以在最糟糕的情况下,我们要查找的页面是在最后一次迭代中,在最后一次迭代中,n必须等于1(或2),所以我们必须将n切成两半得到1.这个数字是log n base 2,或者是cs人们说O(log n) - 他们只是省略了基数2部分。

也许另一种看待它的方法,你有一个你想在电话簿中找到的名字。每当你查看书的中间,看看你要找的名字是在书的第一部分还是后半部分。你正在寻找的名字的一半是在你保持这一半而扔掉另一半。

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

答案 1 :(得分:1)

每个二分步骤大致将搜索空间减半。因此,在 k 步骤之后,您将搜索空间缩小了大约2 ^ k 。如果最初在搜索空间中有 n 点,则在执行大约log2( n )步骤之后,剩余的搜索空间仅包含一个点。

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