算法:算法是解决特定问题的求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作
一:算法的特性
算法的5个基本特性:输入,输出,有穷性,确定性,可行性
1》输入:算法具有零个或多个输入。大多数算法都需要输入参数,但对于个别例如NSLog输出文本算法们就没有输入,所以输入有零个或者多个
2》输出:算法至少有一个或者多个输出。算法必须有输出,要不你要这个算法干嘛,输出可以是打印吗,也可以是返回值等
3》有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。(像平时的我们写了一个死循环,这就不满足算法要求。还有这个有穷性不一定是理论的有穷,加入一个算法执行10年一定会结束,但是这个算法其实意义也不大)
4》确定性:算法的每一步骤都具有确定的含义,不会出现二义性。也就是说输出相同的值会出现唯一的输出结果,每个步骤都会被精确定义而无歧义
5》可行性:算法的每一步都必须是可行的,也就是说,每一步都能通过执行有限的次数完成。也说:可行性意味着算法可以转换为程序上机运行,并能得道正确的结果
二:算法设计的要求
1》正确性:算法的正确性是指算法至少应该具有输入,输出和加工处理无歧义性,能正确反映问题的需求,能够得道为题的正确答案
2》可读性:算法设计的另一目的是为了便于阅读,理解和交流
3》健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果
4》时间效率高和存储量低:也就是我们平时说的时间复杂度和空间复杂度
三:时间复杂度
1,时间复杂度我们一般记作大O,那么这个大O推导方法是什么呢?
1》用常数1取代运行实践中的所有加法常数
2》在修改后的运行次数函数中,只保留最高阶项
3》如果最高阶项存在且不是1,则去除与这个项相乘的常数
最后得到的结果就是大O阶
2,常见的时间复杂度
上面这些时间复杂度所耗费时间从小到大排序
其实算法时间复杂度有:平均时间复杂度和最坏时间复杂度。
我们一般说的都是最坏时间复杂度
平均的时间复杂度我们一般在概率学上认为是n/2,但是在实际情况中,平均时间复杂度是通过一定数量的实验数据之后估算出来的
四:算法的空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作S(n)=O(f(n)),其中n位问题的规模,f(n)为语句关于n所占存储空间的函数
网友评论