前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >O(logn)到底有多快?

O(logn)到底有多快?

作者头像
ACM算法日常
发布2020-05-18 20:16:31
8690
发布2020-05-18 20:16:31
举报
文章被收录于专栏:ACM算法日常ACM算法日常

O(logn)到底有多快?

最近看了Harvard CS50和Stanford的课程,分享一下2个有趣的事实。

  1. 搜索问题的解决方案
  2. log函数与问题数量级

搜索问题的解决方案

你是否想过电脑是如何处理我们的任务的呢?

比如我们想从词典里面查找mission这个单词,词典有1000页,我们该怎样做?

简单,只需要输入单词即可。但是如何做到呢?我们的app程序应该有一些算法来完成这项工作。

让我们复习一下复杂度与计算时间。

  1. 第一种方案是我们可以一页一页的翻看词典找到单词,这样会花费时间。如下图:

2 如何变快一点?一次翻2页,如果发现单词在前面,则返回前一页,复杂度。

3 第三种方法,我们将词典一分为2,然后查找单词,如果没找到,则继续一分为2。这个方法的复杂度是。

现在我们有了这3种算法,我们需要知道哪个算法更快。

最好的方法是计算函数是怎样增长的。数学上面是计算函数的导数,例如,移动一个物体对时间求导就是这个物体的速度:也就是位移随时间的变化幅度。

回到我们的词典,如果有2000页,需要多少步计算结果呢?

1 1000页的词典需要1000次迭代,线性函数,如果是2000页,就需要增加一倍的迭代。

2 第二种方法增加的速度减缓了一点,因为复杂度是。

3 而对数方法只需要增加1步来计算2000页词典。

下图可以更好的理解这3个函数的不同。显然是性能最好的。

对数函数在不同量级的表现

有趣的是对数并不总是最优的,比如函数和函数。

第一张图展现了对数函数的增长比二次方要慢很多。

然而,更仔细的看一下,如果输入数据比较小,那么对数函数会比二次方函数要快一点。

因此,如果你是处理比较小的问题,不使用对数函数可能会更好一些。

又学到了一点小知识,有问题可以留言~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ACM算法日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • O(logn)到底有多快?
    • 搜索问题的解决方案
      • 对数函数在不同量级的表现
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档