Carson带你学数据结构:图文详解 - 动态查找静态查找散列查找
Posted Carson带你学Android
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Carson带你学数据结构:图文详解 - 动态查找静态查找散列查找相关的知识,希望对你有一定的参考价值。
前言
- 查找是 数据结构中的重要操作
- 今天,我将主要讲解介绍 查找的相关知识,如查找算法等,希望你们会喜欢。
目录
1. 简介
- 本节将介绍关于 查找 的相关基础概念
- 具体请看下图:
2. 查找 需求场景
-
对于不同的查找需求场景,会采用不同的查找类型,最终采用的查找方式(查找算法)也有所不同
-
具体如下
- 下面,将根据不同的查找需求类型,讲解对应的查找算法
3. 静态查找
- 定义:仅作 查找操作
- 面向的数据结构:静态查找表
- 算法:顺序查找、有序查找、线性索引查找
- 具体介绍如下
3.1 顺序查找
- 具体介绍如下
3.2 有序查找
- 主要算法有:二分查找、插值 & 斐波那契
- 本文 主要介绍 = 二分查找(也称:折半查找)
- 定义
- 具体实现
public class BinarySearch
/**
* 二分查找方法
* @param srcArray:有序数组
* @param des:需要查找的元素
*/
public static int binarySearch(int[] srcArray, int des)
int low = 0; // 比较区间第1位
int high = srcArray.length-1; // 比较区间最后1位
int middle ; // 区间的中间位置
while(low <= high)
// 1. 通过折半,求出区间的中间位置
middle = low + (high - low)>>1;
// 此处需特别注意以下:
// a. mid = (low + high) / 2:当low、high都是比较大的数时,可能造成上溢除
// b. 采用右移的位运算代替除2,提高效率
// 2. 比较给定值和中间值
// 2.1 若给定值 = 中间记录,则查找成功,返回该位置
if(des == srcArray[middle])
return middle;
// 2.2 若给定值 < 中间记录,则 在中间记录的左半区 继续查找
// 即 将比较区间的最后1位 设置为 原中间位置的前1位
else if(des <srcArray[middle])
high = middle - 1;
// 2.3 若给定值 > 中间记录,则 在中间记录的右半区 继续查找
// 即 将比较区间的首位 设置为原中间位置的后1位
else
low = middle + 1;
// 若比较区间的第1位 ≥ 最后1位,则表示查找失败,返回-1
return -1;
/**
* 执行 二分查找方法
*/
public static void main(String[] args)
// 定义1个有序表数组
int[] src = new int[]1, 4, 5, 7, 8, 13,20,28;
// 输出结果
System.out.println("需要查找数据的数组下标 = " + binarySearch(src,8));
- 测试结果
需要查找数据的数组下标 = 4
- 二分查找的变式
对于二分查找存在一定的优 & 缺点,所以衍生出2种二分查找的变式方法:插值查找 & 斐波那契查找。具体如下:
区别主要在于:比较元素(中间元素)的计算
3.3 线性索引查找
- 面向的数据结构:索引表
关于 索引 的介绍如下
- 本文主要介绍的线性索引查找算法 = 稠密索引、分块索引、倒排索引。具体介绍如下:
4. 动态查找
- 定义:作 查找、插入 & 删除操作
- 面向的数据结构:动态查找表
- 算法:二叉排序树、平衡二叉排序树(
AVL
树)&多路查找树 - 具体介绍如下
4.1 二叉排序树
也称:二叉查找树、二叉搜索树
-
特点
-
作用 & 应用场景
4.2 平衡二叉排序树(AVL树)
属于 二叉搜索树的一种特殊类型
- 特点
- 具体介绍
4.3 多路查找树
-
具体介绍如下
-
多路查找树的类型介绍 & 对比
http://blog.csdn.net/wtyvhreal/article/details/46442091
5. 散列查找
- 定义:通过关键字获取记录
- 面向的数据结构:散列表
- 算法:散列技术
- 具体介绍如下
5.1 散列技术
- 简介
5.2 散列函数的设计(构造方法)
-
简介
即,该如何构造出 散列函数
-
具体构造方法介绍 & 对比
5.3 散列冲突
- 简介 & 解决方案
- 解决方案介绍
6. 总结
- 本文主要讲解了数据结构中的查找相关知识
- 下面我将继续对 数据结构,有兴趣可以继续关注Carson_Ho的安卓开发笔记
请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!
以上是关于Carson带你学数据结构:图文详解 - 动态查找静态查找散列查找的主要内容,如果未能解决你的问题,请参考以下文章
Carson带你学Android:全面剖析Binder跨进程通信原理