《算法图解》NOTE 1 算法的渐近表示法以及二分法

这是《算法图解》的第一篇读书笔记,内容关于表示算法复杂度的渐近表示法以及一个简单但高效的算法:二分法。

1 .渐近表示法

1.1定义

算法的运行需要时间,这就需要衡量算法运行时间即时间复杂度的方式。这个衡量方式就被成为渐近表示法(大O表示法)。
渐近表示法用于描述算法在最糟糕情况下的运行时间,同时也表示了算法运行时间随问题规模扩大而增长的幅度。

1.2如何使用渐近表示法确定时间复杂度

一般而言,算法复杂度可用一个函数进行表示。之后,仅保留函数中增长幅度最大的一项,而这一项就可用于衡量该算法的时间复杂度。

1.3时间复杂度的优先级

以下为常见的渐近表示方式及复杂度的优先级。其中,时间复杂度由上往下逐渐增加。

θ(1):常数级
θ(log(n)):对数级
θ(n):线性级
θ(nlog(n)):对数线性级
θ(n^2):平方级
θ(n^3):立方级
O(n^k):多项式级
Ω(k^n):指数级
θ(n!):阶乘级

2.二分法

2.1定义

二分法指的是在求解问题的过程中不断地折半缩减问题规模,最终在有限时间(log2 n)内求出问题答案的算法。

2.2实例

使用二分法的案例有很多,下面演示如何用二分法近似求出sqrt(2),精度在0.00000001

#二分法近似求出sqrt(2),精度在0.00000001
import math

def dichotomy(target,precision):
    square_target=int(target*target)
    low=0
    high=int(square_target**2)
    result=(low+high)/2
    while len(str(result))<10:
        if result**2<=square_target:
            low=result
        else:
            high=result
        result=(low+high)/2
    return result

print(dichotomy(math.sqrt(2),8))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Model协议是你应用中任何model都赢准守的基础协议,尤其是持久化存储的模型。 Model只能在Vapor中使...
    Supremodeamor阅读 5,036评论 3 1
  • 达芬奇是一个和平主义者,所以他才设计了很多又酷又狠的战争武器!他想让战争快点结束(胜利),可我不认为这样能让...
    Oops_0418阅读 2,607评论 2 0
  • 2008年是记忆深刻的一年。 2018年也将必然成为记忆深刻的一年。 而2018年也确实将是记忆深刻的一年。 离2...
    等心语阅读 1,526评论 0 0
  • 你好!
    无语问斜阳阅读 1,387评论 0 0
  • 很多人往往把写不好文章归咎于自己写作风格没有形成,语句不通顺,思考不够深入,修辞不够熟练等等。但是很少有人注意到影...
    大为君David阅读 11,230评论 49 108

友情链接更多精彩内容