(1)算法:是解决问题的方法或过程,严格的讲是满足下述性质的指令序列:
(2)程序:是算法用某种程序设计语言的具体实现。程序可以不满足算法的有限性。
(3)问题求解周期:问题简化、模型构建、算法设计、程序升级和测试等过程。(抽象→建模→算法→实现→验证)。
算法复杂度是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂度,需要的空间资源的量称为空间复杂度。
影响算法执行时间的相关因素:
(1)算法选用的策略
(2)问题规模
(3)编写程序的语言
(4)编译程序产生的机器代码的质量
(5)计算机执行指令的速度
时间复杂度不应该是在特定计算机上求解某一个输入实例所需要的运行时间;而应该是一个不依赖于计算机配置、问题规模和输入实例的抽象表示。
# O(1)
print('Hello World')
print('Hello Algorithm')
# O(n)
for i in range(n):
print('Hello world')
# O(n^2)
for i in range(n):
for j in range(n):
print('Hello world')
# O(n^2)
for i in range(n):
print('Hello World')
for j in range(n):
print('Hello World')
# O(n^2)
for i in range(n):
for j in range(i):
print('Hello World')
# O(n^3)
for i in range(n):
for j in range(n):
for k in range(n):
print('Hello World')
几次循环就是n的几次方的时间复杂度
如果是循环减半的过程,时间复杂度为O(logn)或O(log2n)
常见的时间复杂度高低排序:O(1)
空间复杂度一般不做太多计算。
定义一个或多个变量,空间复杂度都是为1,列表的空间复杂度为列表的长度
参照该博客:O(1), O(n), O(logn), O(nlogn) 的区别