您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记

2016-05-06 14:11 295 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: