1、可计算问题/不可计算问题
计算机研究可计算问题
2、困难问题(时间度量)
3、P、NP、NPC
解决问题的一个方法或过程,是一个由若干个算法指令组成的有穷序列。
1、输入和输出
2、确定性
3、可行性
4、有穷性
1、伪代码
2、流程图
3、自然语言的描述
对任意一个输入,算法都能够得到一个正确的输出。
软件测试非常重要。
如果是实例一个一个的测试,因为问题的复杂度,实例可能很多很多。所以测试算法正确性的方法很重要。
MAX=A[0],
for(int i=0;i<A.length;i++)
{
if(A[i]>MAX)
{
MAX=A[i];
}
}
每次循环中MAX都是A[0]-A[i]中的最大值,这就是循环不变量,总是为真。
度量一个算法运行时间的三种方式:
最坏情形时任何规模的问题实例运行时间上的上界,没有更坏了。
算法效率的比较
插入排序与归并排序的比较
插入排序算法o(2n2) 归并排序算法o(50nlgn)
若同时对100万个数据进行比较
则插入排序算法需要时间比归并排序算法需要时间相差很多,即使是插入排序算法的配置好很多的时候,仍然比不上。所以算法很有必要研究!!
算法的时间复杂度取决于主要项;
算法的效率主要取决与算法本身。
问题下界:任何一种算法解决一个问题所需要的必须的最小运行时间。
如排序问题的时间下界为nlogn,时间复杂度为nlogn都是排序算法的最有算法。
最优算法指的不是某个实例的最优算法,而是平均的概念
原文:https://www.cnblogs.com/zhixinlin/p/12353917.html