数据结构与算法01-入门

入门😀

牢记:世界上并没有哪种适用于所有场景的数据结构或者算法。

你不能因为有序数组能使用二分查找就永远只用有序数组。在经常插入而很少查找的情况下,显然插入迅速的常规数组会是更好的选择。

数组

连续内存空间分配。

  • 长度n
  • 读取: O(1)
  • 查询: O(n),常规数组的查找方式:线性查找
  • 插入: n+1 n挪动元素,1插入; 末尾:O(1)
  • 删除: n=1+(n-1) 1删除, n-1挪动元素; 末尾:O(1)

集合

不重复。

  • 插入:先确定要插入的值不存在于其中,即每次插入都要先来一次查找。
    • 最好情况N+1,N判断
      最坏的情况则是在集合的开头插入,这时计算机得检查 N 个格子以保证集合不包含那个值,
      然后用 N 步来把所有值右移,最后再用 1 步来插入新值。总共 2N + 1 步

算法

解决某个问题的一套流程,例如把大象放入冰箱需要几步?

有序数组

有序数组中插入新值,需要先做一次查找以确定插入的位置。这是它跟常规数组的关键区别(在性能方面)之一。

但在查找方面,有序数组却有着特殊优势。有序数组的线性查找大多数情况下都会快于常规数组。除非要找的值是最后那个,或
者比最后的值还大,那就只能一直查到最后了。

查找算法

线性查找

从左至右,逐个格子检查,直至找到。这种方式称为线性查找。
线性查找的最好情况是 O(1),最坏情况是 O(N)

二分查找 🌓

有序数组相比常规数组的一大优势就是它除了可以用线性查找,还可以用二分查找。常规数
组因为无序,所以不可能运用二分查找。
在这里插入图片描述
对于长度太小的有序数组,二分查找并不比线性查找好多少。但我们来看看更大的数组。
对于拥有 100 个值的数组来说,两种查找需要的最多步数如下所示。

  • 线性查找:100 步
  • 二分查找:7 步

规律就是,每次有序数组长度乘以 2,二分查找所需的最多步数只会加 1
在这里插入图片描述

大O表示法

时间复杂度。
大 O 记法一般都是指最坏情况总。体上来说,O(N)比 O(1)低效。
知道各种算法会差到什么程度,能使我们做好最坏打算,以选出最适合的算法。

  • 二分查找O(log N) ,读作“O log N”,叫作对数时间
    该算法当数据量翻倍时,步数加 1

以上介绍的3中算法,照效率由高到低来排序的话,会是这样:

  • O(1)
  • O(log N)
  • O(N)
    在这里插入图片描述

为什么会是O(log N)😵

源自数学中的对数log,它是指数的反函数。

log2 8 可以表达为:将 8 不断地除以 2 直到 1,需要多少个 2?
答案是:3

当我们说 O(log N)时,其实指的是 O(log2 N),不过为了方便就省略了 2而已。
O(log N)则代表算法处理 N 个元素需要 log2 N 步,如果有 8 个元素,那么这种算法需要 3 步,
因为 log2 8 = 3

O(log N)算法的步数等于二分数据直至元素剩余 1 个的次数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值