《算法图解》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))

你可能感兴趣的:(《算法图解》NOTE 1 算法的渐近表示法以及二分法)