05、查找【应用篇】
查找
一、查找的基本概念
1、动态查找表在查找过程中插入元素或者从查找表中删除元素,
2、静态查找表只是查找特定元素或者检索特定元素的属性。
3、通俗的说,动态查找表可以对查找表结构进行修改,而静态查找表只是查询。
4、顺序存储和链式存储方式都支持线性查找。
5、二分查找时,数据必须以顺序方式查找,而且必须有序。若是链式存储,则只能支持顺序查找。若是数据无序,则不能二分查找。
6、要进行散列查找,则元素必须以散列方式进行存储。
二、顺序查找法
1、顺序查找的算法
1)数组实现
采用顺序表来存储线性表,实现顺序查找算法
#include"SeqList.h"
int SeqSearch(SeqList &L, DataType x)
{int i = 0;DataType temp;while(i<L.n && L.data[i] != x)i++;if(i == L.n)return 0;else{if(i > 0){temp = L.data[i-1];L.data[i-1] = L.data[i];L.data[i] = temp;return i;}}
}
2)链表实现
采用带头借点的线性链表存储线性表,实现顺序查找算法
#include"LinkList.h"
LinkNode *LinkSearch(LinkList &L, DataType x)
{LinkNode *p = l-> Link,*pre = L, *ppre = NULL;while(p != NULL && p->data != x){ppre = pre;pre = p;p = p->link;}if(p != NULL && pre != L){pre->link = p->link;p->link = pre;ppre->link = p;}return p;
}
2、顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为O(n)
三、折半查找法
1、折半查找的算法
设计一个递归算法,实现在有序顺序表上的折半查找
int binarySearch(seqLIst &L, DataType x, int left, int right)
{int mid = -1;if(left <= right){mid = (left+right)/2;if(x > data[mid])mid = binarySearch(L, x, mid+1, right);else if(x < data[mid])mid = binarySearch(L, x, left, mid-1);}return mid;
};
2、有一个有序表为{1, 3, 9, 12, 32, 41, 45, 62, 75, 77, 82, 95,100},当折半查找值为 82 的结点时,
4 次比较后查找成功。
3、设有序顺序表中的元素依次为 017, 094, 154, 170, 275, 503, 509, 512,553, 612, 677, 765, 897, 908。试画出
对其进行折半搜索时的二叉搜索树(即二分查找树),并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。
4、假定对有序表:(3, 4, 5, 7, 24, 30, 42, 54, 63, 72, 87, 95)进行折半查找,试回答下列问题:
(1). 画出描述折半查找过程的判定树;
(2). 若查找元素 54,需依次与哪些元素比较?
(3). 若查找元素 90,需依次与哪些元素比较?
(4). 假定每个元素的查找概率相等,求查找成功时的平均查找长度。
四、散列表
1、散列表基本概念
散列表,它在元素的存储位置与元素关键码间建立一个确定的对应函数关系,使每个关键码与结构中的一个唯一的存储位置相对应常见的散列函数
定义域必须包括需要存储的全部关键码,其值域必须在0到m-1之间
1、直接定址法
hash(key) = a*key+b
2、除留余数法
设散列表中允许的地址范围为0 ~m-1,取一个不大于m,但是最接近于或等于m的质数p作为除数,利用公式hash(key) = key % p(p<=m),要求这时的质数p不是接近2的幂的数、解决冲突的开地址法
1、线性探测
使用某一个散列函数计算出初始散列地址,一旦发生冲突,在表中顺次向后寻找下一个空闲位置的公式为2、二次探测
使用二次探测法,在表中寻找“下一个”空闲位置的公式解决冲突的拉链法
例如设给出一组元素的关键码为37,25,14,36,49,68,57,11,取m = 11,采取拉链法解决冲突,散列函数为Hash(x) = x % 11,则各关键码计算出的地址为散列表的装填因子@的定义为;@ = 表中已装有的记录数n/表中预设的最大记录数m
2、
3、
4、
转载于:https://www.cnblogs.com/wxt19941024/p/7469623.html
05、查找【应用篇】相关推荐
- SQL基本表的 查找 练习篇
先导篇一:数据库的数据库的建立.增.删.改.查_做自己的靠山的博客-CSDN博客 先导篇二:SQL基本表的建立.插入.删除与修改练习篇_做自己的靠山的博客-CSDN博客 目录 一.单表查询 (1)题目 ...
- 如何查找一篇英文文章中出现频率最高的单词?
先将该字符串用空格分隔为一个数组, 遍历该数组,将其出现的次数以及单词元素用map存储起来,然后循环map,找出出现次数最多的项 function findMaxFrequency (str) {if ...
- 全力升级篇-基于Mongodb与Nginx负载均衡打造共享单车项目实战 最新完整项目升级版
全力升级篇-基于Mongodb与Nginx负载均衡打造共享单车项目实战 最新完整项目升级版 课程作为全新的升级项目课程,基于Nginx负载均衡,Flume与Kafka,Mongodb和Redis等技术 ...
- ORM查询语言(OQL)简介--概念篇
相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...
- 如何通过Google查找专业文献资料 [转]^_^!!
第一讲 推荐先读读google从入门到精通等文章. 我们了解常规搜索方式,但每个人都会搜索出不同结果,为什么?核心问题在于关键词选择不同.关键的分析必须保证两点:一是专业性,即这个词是很精的,可能简化 ...
- 10篇写给Git初学者的最佳教程
转载自:http://paranp_w_picpath.com/best-git-tutoritals-for-beginners/ 10篇写给Git初学者的最佳教程 00 300x109 10篇写给 ...
- 中了一篇ccf的b类会议sdm'15,要去温哥华参会。很高兴啊!!!!
中了一篇ccf的b类会议sdm'15,要去温哥华参会.很高兴啊!!!! 序号 会议名称 会议介绍 代表领域 1 ACM SIGCOMM: ACM Conf on Commu ...
- 2017 上半年我整理的好文章(上)(98 篇)
对上半年所分享的文章进行一个整理,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录.目前就分下下面几个大类,没有更多细分,已基本可以查找了. 如果觉得博客还是有些不方便,请 ...
- 二叉排序树(BST查找、插入、删除、遍历)——基于树的查找(一)
二叉排序树 二叉排序树(Binary Search Tree,BST):又称二叉查找树,是一种高效的数据结构. 定义 二叉排序树或者是一棵空树,或者是具有如下特性的二叉树: 若左子树不空,则左子树上所 ...
- 违禁词过滤完整设计与优化(前缀匹配、二分查找)
2019独角兽企业重金招聘Python工程师标准>>> 可能不止在天朝,绝大多数网站都会需要违禁词过滤模块,用于对不雅言论进行屏蔽:所以这个应该算是网站的基础功能.大概在去年的时候我 ...
最新文章
- 快速浏览Silverlight3 Beta:当HLSL遇上Silverlight
- MPB:中科院城环所杨军组-​​淡水浮游细菌群落采集、过滤与保存
- 在Ubuntu中安装PHP,MySQL,Nginx和phpMyAdmin
- ET框架笔记 (笑览世界写)(转)
- .xz是什么文件怎么解压_zip解压app下载-zip解压app安卓版下载v11.5.6
- 我回答的一个粉丝关于用编程语言模拟SAP事务的问题
- oracle biee
- jfinal mysql 配置文件_JFinal 如何将操作日志存入到数据库中
- 【Python】import自己的模块报错
- 【leetcode】33. Search in Rotated Sorted Array
- java基础之集合:List Set Map的概述以及使用场景
- fastjson 添加key value_采坑系列—fastjson
- Sahi (3) —— 压力测试Load Test以CAS SSO登陆场景为例(103 Tutorial)
- VBS QQ微信消息轰炸
- 击穿面试官的套路:经典面试问题剖析
- 曲线积分于曲面积分(后篇 曲面积分-坐标曲面积分-高斯公式-斯托克斯公式)
- P1978 集合 (set)
- 新闻发布系统——INSERT 语句与 FOREIGN KEY 约束XXX冲突。该冲突发生于数据库XXX,表XXX, column 'XXX。
- SSD1306(OLED驱动芯片)指令详解
- 百度之星2017资格赛1003 度度熊与邪恶大魔王
热门文章
- 计算机口令管理,农村信用社联合社计算机账户与口令管理办法
- php macro,如何利用 macro 方法来扩展 Laravel 的基础类的功能
- java的连接 初始化_java类从加载、连接到初始化过程详解
- php用哪个稳定版本linux系统,PHP的版本选择
- c++怎么可以在二进制文件中读取带string的数据_文件处理 | csv文件读写
- 【转载】谁动了摩卡的奶酪?
- EF6+Sqlite连接字符串的动态设置
- Dubbo zookeeper 初探【转】
- win8.1使用及优化
- Java 用反射设置对象的属性值