数据结构学习笔记

1 **

查找

**
按照查找的引出的先后顺序介绍:

1. 静态查找(树)表

静态查找表(Static Search Table):只作查找操作的查找表。
A:查询某个“特定”数据元素是否在查找表中;
B:检索某个“特定”数据元素和各种属性。

以下介绍的是有序表查找,无序表只能顺序查找。

二分查找

作为有序表查找的一种非常普通且实用的方法。大家并不陌生。

思想:先确定待查记录所在的范围(区间),然后逐步缩小范围找到或找不到该记录为止。如果mid对应值大于key,high = 密度-1;如果mid对应值小于key,low = mid + 1;否则找到结果。

性能分析:对于任意的n,当较大(n>50)时,假设表中每个记录的查找概率相等(1/n),则查找成功时折半查找的近似平均查找长度为= log2(n+1)-1。

斐波那契查找

原理:根据斐波那契序列的特点对表进行分割。

其中:

假设开始时数组A中记录个数比某个斐波那契数小1,即n=Fu-1,然后将给定值key和查找序列中A[Fu-1]进行比较,

若相等,则查找成功

若key > A[Fu-1],则在A[Fu-1+1]至A[Fu-1]区间的数组中进行查找;

若key < A[Fu-1],则继续在A[0]至A[Fu-1-1]区间的数组中进行查找;


性能分析:斐波那契查找的平均性能比折半查找好,但最坏情况下的性能 (虽然仍为O(lgn)) 却比折半查找差。

小小优点:分割时只需进行加、减运算。

插值查找

原理:是根据给定值key来确定进行比较关键字A[i]的查找方法。

其中,A[l]和A[h]分别为有序表中具有最小关键字和最大关键字的下标

性能比较:它只适合于关键字均匀分布的数组,在这种情况下,对数组较长的数组来说,其平均性能比折半查找好。

由于上面讨论的查找都是等概率的查找,如果待查找数为非等概率出现,那么上述的方法并非是使平均查找长度最短

静态最优查找树(SOST)

提出背景:

定义:

性能分析:由于构造的代价比较大,达到O(n^3)

次优查找树(NOST)

提出背景:对于上述查找的所有结点来说,它们的出现是等概率的;

          当它们被查找的概率不同时,这时原来的为了使整体的ASL(平均查找长度)最小

定义:递归定义,推到公式

构造过程:1、按照元素值大小进行排序,并记录每个元素的概率

          2、每次选择最小的P值作为该子树的根

性能分析:

索引顺序表

提出背景:

定义:

原理:缩小区间的查找过程

性能:可以折半查找

2. 动态查找(树)表

动态查找表(Dynamic Search Table):在查找过程同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。
A:查找是插入数据元素;
B:查找时删除数据元素。

二叉排序树或平衡二叉树-BST

提出背景:对于有序表的查找来说,在进行二分查找时,

定义:

平衡二叉查找树-AVL

提出背景:

定义:对于树中每个结点来说,它的左右子树高度差的绝对值不超过1

B树、B+、B-

提出背景:
键树
引入原因:

最优二叉树—huffman树—不是查找树的一种,可以做对比

3. 哈希表

2 算法复杂度

常见的几种排序算法复杂度如下:
方式: 平均 最坏 最好
插入 n^2 n^2 n
希尔 n^1.3 / /
冒泡 n^2 n^2 n
快速 nlogn n^2 nlogn
选择 n^2 n^2 n^2
堆排 nlogn nlogn nlogn
归并 nlogn nlogn nlogn
基数 d(n+r) d(n+r) d(n+r)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值