学习数据结构(一)——算法常识

0.算法基本概念

算法是用有限步数求解某问题的一套明确定义的集合,是为执行特定任务的任何运算序列。一个算法应该具备下面五个特性:(1)有穷性:对于任何一组输入,必须保证有限步骤输出结果。(2)确切性:算法中的每一行指令必须有确切的含义,相同输入只能得到相同输出。(3)可行性:算法必须可以准确运行且是有限步骤执行完(4)输入(5)输出

比较算法优劣,主要看(1)准确性:算法能够正确执行预定功能和性能需求。(2)可使用性:即对用户友好。(3)可理解性:算法应该是可被理解的,方便测试与维护(4)效率:主要指时间复杂度和空间复杂度(5)健壮性:算法的容错处理能力(6)简单性:算法的简单程度

1.时间复杂度

时间复杂度是指算法执行所用的时间。没有必要上机运行测试代码获得时间,可以先大概估计一下算法所用的时间。

一个算法中语句执行的次数称为语句频度或时间频度,记为T(n)。从数量级看,程序步数存在一个增长的上限,算法增长率的上限在O(f(n))。

常见的渐进时间复杂度关系:O(1)< O(log_{2}n)<O(n)<O(nlog_{2}n)<O(n^{2})<O(n^{3})<O(2^{n}),如下的运算规则:(1)加法规则:两个程序段连接在一起得到的程序段总时间代价(2)乘法规则:程序嵌套子程序段

for(i=0;i<n;i++)//T(n)=O(n)
{
    for(j=0;j<n;j++)//T(n)=O(n)
    {
        c[i][j]=0;//T(n)=O(1)

        for(k=0;k<n;k++)  //T(n)=O(n) 
        {
            a[i][j]=b[i][j]+c[i][j];//T(n)=O(1)
        }
    }
}

该程序的T(n)=O(n^{3}),即程序时间复杂度为n的三次方。

2.空间复杂度

是指程序运行的所需内存空间大小。主要由(1)指令空间:用于存储编译的空间(2)数据空间:用于存储变量和常量的空间。(3)环境栈空间:用来保存函数调用返回时恢复运行所需要的信息。

算法的空间复杂度S(n)=O(n)。

3.常见算法

(1)蛮力法:即穷举,遍历可行解并判断是否解可行。

(2)贪心法:通过各个局部最优解找出全局最优解。

(3)递归法:通过同类子问题缩小问题,递归调用得到问题的最终解。

(4)递推法:从初始条件出发,利用关系表达式得到中间推论,直到解决问题。

(5)分治法:把大问题分解为独立的小问题,将子答案合并求解问题最终答案。

(6)回溯法:一步一步向前试探,有多过程选择其中一个继续进行,失败则回溯到选择节点走另外一条路。

(7)动态规划法:与分治法相同,但是子问题不相互独立,把中间过程保存起来,从底向上多路径求解计算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值