3 搜索|排序&复杂度分析(1)

算法是计算机程序的一个基本的构建模块,描述了最终能够解决一个问题的计算过程。

算法评价:正确性;可读性;易维护性

评估算法的性能

度量算法的运行时间

A 使用计算机的时钟获取一个实际的运行时间(基准评价/探查):

1 确定几个具有相同大小的不同数据集合的时间

2 针对越来越大的数据集合,收集相似的数据

 大小和对应的时间对应的翻倍

嵌套循环后,size翻倍后,time也翻倍

问题:

1 不同硬件平台的处理速度不同

2 对于很大的数据集合而言,确定某些算法的运行时间是不切实际的

B 统计指令

用于估算算法性能:统计对不同问题规模所要执行的指令的数目

  • 统计指令时,所统计的是用于编写算法的教高级代码中的指令数目,而不是执行机器语言的程序中的指令书目
  • 需要区分:无论问题规模大小都执行相同次数的指令(影响不显著);根据问题规模执行不同次数的指令(循环和递归等函数)

在循环中还要注意在任何的嵌套循环中都执行的指令(只要记住一个嵌套循环所执行的迭代次数即可

迭代的次数是问题规模的平方

问题:

1 规模非常大时,计算机无法足够快

2 需要求助于逻辑和数学推理,才有完整的分析方法

度量算法所使用的内存

随问题规模而潜在的使用内存的增长率

复杂度分析

摆脱依赖平台的时间统计和不切实际的指令数

1 复杂度的阶

对任何问题规模都需要相同的操作次数

常数阶

列表索引

工作量和log2[问题规模]成比例

对数阶

工作量增加和问题规模成比例

线性阶

O(n)

工作量按照n^k的速率增加

多项式阶

指数阶

2^n

O表示法:一个算法的总工作量通常是多项式的数项之和,有一个是主项(渐近分析)

常量比例的作用:在大O分析中通常被忽略的项和系数可能在这些项很大的时候影响算法(较小的数据集合)

仔细识别没有隐藏在循环中却依赖于可变问题规模的任何指令


搜索算法

搜索最小值 O(n)

 顺序搜索一个列表O(n)

最好1,最坏O(n),平均每一个可能位置找到目标所需要的迭代次数相加,总和/n   (n+1)/2,即O(n)

 

最好情况、最坏情况和平均情况的性能

部分算法的性能取决于所处理的数据的放置方式

有序列表的二叉搜索O(log2n)

 

仅有一个循环,无嵌套/隐藏的循环

最坏的情况:目标不在列表中,进行n/2/2…=1所进行的除法的次数 也即2^k = n,则k=log2n

比较数据项

二叉搜索和搜索最小项,都假设列表中的项是可以相互比较的(相同类型,且都识别比较运算符)

若需 允许算法对 一个新对象的类 使用 比较运算符,应在这一类中添加方法。

 

 

 现在就可以将账户放置在列表中并按照名称对其排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值