Linear algorithms tend to be things where, at one pass-through, you reduce the problem by a constant amount by one. If you reduce it by two, 1 it's going to be the same thing.
有问题么?,线性复杂度的算法,当进行了一个,常量级步数的操作的时候,将问题的规模缩小了一个。
And I'm going to show you an example in a 1 second, just to drive this home, but notice the characteristics. In the first two cases, the problem reduced by 1 at each step.
在前面两个例子里,每一部问题的规模缩小了,不管是迭代的还是递归的,这表明这个问题的复杂性可能是线性的。
bug What I typically do is I start with the input that provoked the problem, and I keep making it smaller and smaller.
我这里做的就是从引起,出现的输入开始,然后将输入,一步步的缩小规模。
Now. You might look at that and say, well that's just a lot like what we had over here Right? We had some additive constant plus a simpler version of the same problem reduced in size by 1.
现在你可能会看着这个说,这很像我们以前做过的,对不对?我们用一些附加的常量,加上问题的另外一个规模缩小了1的,简化版本来代替这个问题本身。
If it's at that point, I'm done, if not, if it's greater than the value I'm looking for, I either take one half or the other.
那么我就取左边,否则的话就取右边,好,你们可以明白,我们一次就可以缩小问题规模的一半了吧。
In fact, it took the same number of steps as it did in the other case, because each time I'm cutting it down by a half.
因为每次我都把问题的规模,缩小一半,这很棒,好,接下来让我们这么做。
The printout is simply telling me, what are the ranges of the search.
你可以看到这个方法每次都将,原问题的规模缩小了一半。
Again, if you didn't hear it, the answer was it's log.
因为每次我可以把这个问题的规模,缩小一半,你答对了。
But in one step, I've reduced this problem in half.
我就将这个问题的规模减半了,我不仅仅是缩小了问题的规模。
That's a sign that it's probably linear.
我可以两步把问题的规模缩小一半。
With this, if I can assume that accessing the i'th element of a list is constant, then you can't see that the rest of that analysis looks just like the log analysis I did before, and each step, no matter which branch I'm taking, I'm cutting the problem down in half.
读取数组中的第i个元素,是个常量时间的操作的话,我也就能像以前那样得到,这个算法是对数级复杂度的分析,并且每一步不管我选择哪个区间,我都可以把问题的规模缩小一半。
应用推荐