数据结构学习笔记
2016-05-06 14:11
295 查看
1 **
按照查找的引出的先后顺序介绍:
A:查询某个“特定”数据元素是否在查找表中;
B:检索某个“特定”数据元素和各种属性。
以下介绍的是有序表查找,无序表只能顺序查找。
思想:先确定待查记录所在的范围(区间),然后逐步缩小范围找到或找不到该记录为止。如果mid对应值大于key,high = 密度-1;如果mid对应值小于key,low = mid + 1;否则找到结果。
性能分析:对于任意的n,当较大(n>50)时,假设表中每个记录的查找概率相等(1/n),则查找成功时折半查找的近似平均查找长度为= log2(n+1)-1。
由于上面讨论的查找都是等概率的查找,如果待查找数为非等概率出现,那么上述的方法并非是使平均查找长度最短
A:查找是插入数据元素;
B:查找时删除数据元素。
B树、B+、B-
提出背景:
键树
引入原因:
最优二叉树—huffman树—不是查找树的一种,可以做对比
方式: 平均 最坏 最好
插入 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)
查找
**按照查找的引出的先后顺序介绍:
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)
相关文章推荐
- 数据结构实验之链表五:单链表的拆分
- 常用数据结构的应用场景
- Hive 中的复合数据结构简介以及一些函数的用法说明
- [数据结构]链表的基本操作
- 数据结构
- 杨辉三角——队列的应用
- 数据结构的一些基本概念
- 数据结构之二叉树的递归建立和遍历(续)
- 字符串的输入、输出、连接、拷贝、比较
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构之简单链表(尾部插入数据)
- 数据结构与算法:C++实现插入排序
- 数据结构与算法:C++实现选择排序
- 深入理解数据结构之链表
- 202Union
- 203MergeList
- 数据结构实验之链表四:有序链表的归并
- 数据结构_线性表_链式存储_单链表 的基本操作
- 第十、十一周数据结构代码
- 数据结构实验之链表三:链表的逆置