《数据结构与算法图解》学习笔记(二)

第二章 算法为何重要

代码速度除了受到数据结构影响,也受到算法的影响。

 

算法,即解决某个问题的一套流程。在计算机的世界里,它指的是某项操作的过程。比如上一章提到的四个主要操作。

对于某一种操作,会有很多种算法的实现。

 

 一种新的数据结构——有序数组

有序数组与常规数组的唯一区别就是,有序数组要求元素的值有序。因此每次插入新值的时候,需要先做一次查找以确定插入的位置。这导致插入性能方面有序数组不如常规数组,但是在查找方面,有序数组具有特殊的优势。

 

1 由前一章可知,常规数组使用线性查找的方式,如果查找的数位于最后,或者不存在,都需要遍历一遍数组。而对于有序数组来说,即便要查找的数不存在,也可以提前停止查找。

比如有序数组[3,17,80,202]中查找22,我们可以在查到80的时候就结束,因为22不可能在80的右边。

因此,有序数组的线性查找大多数情况下快于常规数组。

 

2 有序数组相比常规数组的另一大优势是,它还可以采用二分查找,这种方法比线性查找快得多。常规数组因为无序,不可以使用二分查找。

 

二分查找:小时候我们玩过猜谜游戏,A心里想着一个1~100之间的数,B猜,A会给出提示猜大了还是猜小了。凭直觉我们就知道,第一次B应该猜50,这样无论猜对还是猜错,都可以排除掉一半的错误答案。如果A提示猜小了,那么B下一次应该猜75,再排除掉剩余数字的一半····以此类推,一直都猜中间值。这就是二分法的通俗描述。

 

对于长度太小的有序数组,二分查找并不比线性查找好多少。

对于大一点的数组来说:比如100个元素的数组,线性查找最差要100步,而二分法只需要7步。

事实上,有序数组的长度每增加一倍,二分查找所需的最多步数增加一步,而线性查找的最多步数增加一倍。

 

但是,有序数组并不是所有操作都比常规数组快,比如一开始介绍的插入操作。需要根据应用场景具体衡量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值