#Author guo

#解决问题也需要考虑时间复杂度和空间复杂度
'''
有穷性 执行有限个步骤之后终止
确切性 算法的每一个不找都必须有确切的定义
输入项 一个算法有0个或者多个输入
输出项 一个算法有一个或者多个输出
可执行性 算法中的任何步骤都是可以分解为基本的可执行的操作
高效性 执行速度快占用资源少
健壮性 对数据响应正确

O 是无穷大接近，解决一个规模为n的问题，所花费的时间
可以对n的忽略不计
用常数1取代运行中的加法运算 只要执行时间恒定的算法 都是O（1）
在修改后运行次数函数中，只保留最高阶项
如果最高阶项存在且不是1，则去除与这个项相乘的常数

循环统计，当有n个2数相乘等于一个数
则是以2为底的n
O(logn)

线性阶，执行时间随着问题规模增长呈正比例增长
O(1)<O(logn)<O(n) 设计时，利用指数增长来举例，这样更好进行说明

线性对数阶 nlogn 快速排序法的一般情形 快速傅里叶变换

常数阶	对数阶	线性阶	线性对数阶	平方阶	立方阶	……	K次方阶	指数阶
O(1)	O(log2 n )	O(n)	O(nlog2 n)	O(n2 )	O(n3 )	
O(nk )	O(2n )
复杂度低 ---->---->---->---->---->---->---->---->---->---->---->---->----> 复杂度高

O(n^2) 时间复杂度 效率比较低，多使用在循环嵌套里

'''
