算法分析基础知识
有3个人卖机器,小西打广告说自己的机器在最棒的时候可以日产三千斤,小伊打广告说自己的机器在平均情况下日产两千斤,小记打广告说自己的机器最坏也能日产1500斤。在进入市场后小西的机器因为正常情况下远远达不到宣传的情况而被视为吹牛,最终广告惨遭恶搞,进入了鬼畜全明星的殿堂;小伊的广告因为在测量平均情况时忽视了温度等问题导致机器在非洲地区的平均情况远远不和人意而痛失部分市场;小记的机器则成为了可靠安定的象征。
以上都是我在扯淡,但是这确实反映了我们在评价算法速度时的标准问题:如考虑最好情况则大部分算法都是一步到位的,没有意义;如考虑平均情况则需要考虑的因素过多,有时各个人心中的平均标准还不一样,考虑时的标准太模糊,实在是费力不讨好;而考虑最坏的情况,有句话说的好“做最坏的打算,终究不会太坏。”,而且标准很一致,做出来的结果大家都可以认可。
而当我们比较两个算法的时间消耗时,因为我们是在大量数据的前提下比较所以我们比较两个函数时我们大多考虑他们的相对增长率,我们使用O(f(x))表示函数的增长率小于等于k * f(x)的增长率,值得注意的是如O(x^2+x)更好写作O(x^2),这牺牲了精度但为我们分析带来值得的便利,除非特地比较两个相近的算法才需要更精确的分析。
在正式估计算法前我们还要做一些抽象以简化分析,我们假设每个运算都花费一样的时间和无限内存。
欢迎评论😀