算法基础

什么是算法

针对算法的定义从不同的领域和角度出发都会得到有差异的结果。
这里针对算法的几个性质列出说明:

1.确定性:无歧义,照方抓药。
2.可行性:这药要能吃,虽然吃了未必见效。当然吃药是期望见效的。
3.有限性:多久能见效呢?当然这药不能吃一辈子才见效或者还不见效。越快见效越好。

算法的表示

  1. 自然语言表示:步骤清晰,符合人之常识。例如:一道菜的菜谱就如同一个算法,每个步骤的操作白纸黑字,对于做饭的人来说易于理解。
  2. 伪代码表示法:毕竟不是厨师啊,有时候少放0.05克的盐影响不大,但是计算机科学是极其严谨的学科,输入极小的误差可能会造成结果的千差万别,伪代码表示法简单严谨,比代码简单,比自然语言严谨。如下示例归并排序的伪代码:
    MERGE-SORT A[1…n]
    1.如果n等于1结束排序。
    2.递归对子序列A[1,n/2]和A[n/2+1,n]进行排序。
    3.合并两个子序列排序的结果。

算法的灵魂

衡量一个算法的优劣有很多标准,比如准确性、健壮性、可维护性、可拓展性、安全性、用户友好性等等,这些性质并不是算法的灵魂,算法的灵魂只有一个:速度。

举例分析插入排序的效率

void insert_sort(int *A,int n)//A是待排序的数组,n是数组长度
{
 for(int i=2;i<n;i++){
 int key = A[i];
 int j = i-1;
 whlie(j>=0&&A[j]>key){
 A[j+1] = A[j];
 j--;
 }
 A[j+1] = key;
 }
}

通常衡量一个算法的执行效率通过量化效率为执行过程的循环次数,本段代码首先是一个for循环嵌套一个while循环,外侧的for循环的执行次数是n-1次,内层while最大执行次数是i次,所以整个算法的执行效率是O(n^2).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值