算法应该满足的五个特性
1、有穷性
2、确定性
3、可行性
4、有输入
5、有输出
设计算法考虑的因素:
1、正确性:a.程序中不含语法错误b.程序对于几组输入数据能满足要求c、对于精心选择、典型、可可且带有刁难性d、对于所有一切合法的输入数据都能满足要求
2、可读性:易于人的理解;晦涩难读的程序易于隐藏较多错误而难以调试;
3、健壮性:
4:高效率与地存储
三、算法效率的衡量方法和准则
事后统计法
缺点:1、必须执行程序
2、其他因素掩盖算法本质
事前分析估算法
和算法执行时间相关的因素:
1、算法选用的策略
2、问题的规模
3、编写程序的语言
4、编译程序产生的机器代码的质量
5、计算机执行指令的速度
T(n) = O(f(n))
称T(n)为算法的(渐进)时间复杂度
如何估算算法的时间复杂度?
算法 = 控制结构 + 原操作(固有数据类型的操作)
算法的执行时间 与 原操作执行次数之和成正比
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
c[i,j] = 0;
for(k = 1; k <= n;++k)
选择排序
void select_sort(int a[], int n) {
基本操作:比较(数据元素)操作
语句的频度
void bubble_sort(int a[], int n) {
for (i = n-1,change=TRUE; i>1&&change; --i)
{
change = FLASE;
for (j =0;j<i;++j)
{
if (a[j]>a[j+1])
{
a[j] <-->a[j+i];
change =TRUE;
}
}
}
}
算法的存储量包括:
1、输入数据所占空间