大话数据结构第二章

记:冬天真的处于冬眠状态了,一个午觉睡了一下午...就离谱呐,晚上去健身了,第二章库存,惭愧,今天没学习成,大话数据库看到第三章了,因为开始提到了算法的实现,所以打算把C++模块也复习起来创个文件夹,自己用C++试着写写

2.2 数据结构与算法关系


    介绍了重要的数据结构后再把相应的算法拿出来讲,而不是单独讲哪一方面(第三章开始体会到两者的关系)

2.4 算法定义

     算法(Algorithm):是描述解决问题的方法,对计算机来说就是指令的有限序列。

     指令:能被人或机器等计算装置执行

     为了解决某个问题,就需要把指令表示成一定的操作序列,操作序列包括一系列操作,每个操作都完成特定的功能,这就是算法了(个人理解:相当于做一道菜,按照食谱一步步完成指令)

     对于一个问题来说有很多种算法来解决,但没有通用的算法(就像没有包治百病的药)

2.5 算法的特性

    算法的五个基本特性:
    1.输入输出:零个(直接输出hello world就不需要输入)或多个输入,至少一个(不需要输出就不用算法了)或多个输出
    2.有穷性:算法在执行了有限的步骤后,自动结束,而不是无限循环
    3.确定性:每一步都有确定的含义,不会出现二义性
    4.可行性:每一步必须可行,每一步能通过执行有限次数完成

2.6 算法设计的要求

     虽然算法不唯一,但相对好的算法应该具备以下性质:

     1.正确性:算法没有语法错误;对于合法输入的数据能够满足要求的输出结果;对于非法输入数据能够有错误说明(一般情况下,判断算法是否正确的标准);对刁钻的测试数据也能有满足需求的输出(最难的要求)
    2.可读性:便于他人理解
    3.健壮性:当输入数据不合法时,算法也能作出相关处理,而不是产生异常或随机结果
    4.时间效率高和存储量低:尽量保持时间复杂度和空间复杂度都低(这个地方是个人理解的,不知道对不对)

2.7 算法效率的度量方法


    事后统计方法:设计好测试程序和数据再利用计算机进行运行比较
    事前分析估算法:在程序编制前就用统计学方法对算法进行估计
                    通过算法实践复杂度来估算算法时间效率


2.8 函数的渐进增长


    在输入规模一定(都是n)的情况下,只要超过一个数值N(n>N之后),这个函数f(n)就总是大于另一个函数g(n),我们则称函数是渐进增长的。
        1.随着n的增大,后面加的常数基本不影响算法变化,所以可以忽略这些加法常数
        2.最高次项相乘的常数并不重要
        3.最高此项的指数大的,函数随着n的增长,结果也会变得增长特别快
    总结:判断一个算法的效率,函数中的常数和其他次要项常常可以忽略,更应该关注主项(最高阶项)的阶数


2.9 算法时间复杂度


    算法时间复杂度:即算法的时间度量,是算法的渐进时间复杂度简称,记作T(n)=O(f(n)),T(n)是语句总的执行次数,f(n)是输入规模n的某个函数。随着n的增大,T(n)增长最慢的算法为最优算法
    大O记法:用大写O()来体现算法时间复杂的记法
    O(1)常数阶  O(n)线性阶   O(n2)平方阶
    如何分析算法的时间复杂度呢?即如何推导大O阶(基本就是2.8总结的三点)
        1.用常数1取代所有的加法常数
        2.只保留最高阶项
        3. 如果最高阶存在且不为1,则去掉它的系数


2.10 常见的时间复杂度:

 常见的时间复杂度表:


    所耗费的时间从小到大依次是:

 

2.11 最坏情况和平均情况    


    最坏运行时间:运行时间不会比这个再长了(打麻将摸到最后一张108张),没有特殊说明情况下的默认
    平均运行时间:期望的运行时间,n/2次后发现目标元素(从概率角度,假设某个数字在每个位置的可能性是相同的)

2.12 算法空间复杂度


    空间上的开销来换取换取时间,其实两种方法没有好坏之分,就像考研报班,有预算的就直接报班,没钱就花时间慢慢摸索准备,具体情况具体分析。
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值