在上一篇综述中,我给出了排序是为了更快的查找这个观点.也介绍了查找的一些典型应用场景如:

1.判断一个给定值,是否在一个数组

2.mysql 的查询优化

3.再到给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,找出a、b文件共同的url.

也简单的介绍了两种查找的方法:

一是遍历查找:

也叫顺序查找,思路为 遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。

这个萌蠢的查找思想,是选择排序的基础,不过这里空白太小,我写不下,容我后面再说.

二是二分查找:

也叫折半查找,思路为 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到找到为止。

二分查找,要求查找的数列是有序的. 于是,又引入了一个问题,如何排序? ---- 不过同样的,这里空白太小,我写不下.

费马老爷子

还有其他的诸如 索引查找, 二叉树查找, 哈希查找等方法, 这里我讲讲哈希查找,其他的查找方法,如果您有兴趣了解-----那等我有兴趣写就可以了.....

就你皮

哈希(hash),翻译过来叫散列.定义一个函数 F = f(ꭓ) , 对于不同的 ꭓ ,得到不同的 f(ꭓ) [标:不完全一定,会有不同的ꭓ,得到相同的f(ꭓ)情况,术语叫哈希碰撞], 查找的时候,将要查找的key,也按照定义好的哈希函数转换 得到一个哈希值,然后用这个哈希值,直接去哈希表中取,取出则为找出key,取不出即为查找的key不存在.

来看看哈希思想的几个应用:

面试题一:

判断 8 是否存在数组[1,3,5,7,11,13,17]中.

普通青年

但是这种方式,每查找一次,都要整个的遍历一次.来看看下面的方法:

文艺青年

可以看到,只要 hash 表建立成功后,每次判断一个数是不是在数组中,只需要直接执行 arrHashObject[key] 就可以得到结果了.效率大大提高.

面试题二:

当 usertype=1 时, userTypeName 为 student,

当 usertype=2 时, userTypeName 为 teacher,

当 usertype=3 时, userTypeName 为 admin,

请用代码描述.

普通青年

但是这种写法,当条件增多的情况,简直就是灾难.我们可以使用哈希的思想,写得文艺一点:

文艺青年

增加角色,只需配置这个哈希表,避免了繁琐的 if-else.

面试题三:

需要对存储大量的 URL,并需要根据URL 进行搜索查找.

普通青年: 使用 B-Tree来存储 URL, 会有如下查询:

select id from url where url = 'http://www.mysql.com';

文艺青年: 删除原来 URL 上的索引,新增一个被索引的 url_crc列,使用 CRC32做哈希,就可以使用下面的方式查询:

select id from url where url = 'http://www.mysql.com'  and url_crc = CRC32('http://www.mysql.com');

性能 biu 的一下就上去了,占的空间还不大.

还有在 APP 开发中,我们通常使用 token 来模拟 session 以判断是否用户登录. 大概思路是: 将 将 token 存入到 redis 中. 然后直接使用 Redis->get(token) 看值是否为空来判断是否登录...

有同学要问了, 哈希查找这么好,那有缺点没有?

获取文件哈希值_浅谈查找---哈希查找相关推荐

  1. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...

    关于"content"的最新内容 聚合阅读 这篇文章主要介绍了python计算Content-MD5并获取文件的Content-MD5值方式,具有很好的参考价值,希望对大家有所帮助 ...

  2. python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因

    昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile =open("C:\Users\Spirit\Desktop\bc.txt",'r ...

  3. python语言源程序文件类型_浅谈Python的文件类型

    Python的文件类型主要分为3种:源代码(source file).字节码(byte-code file).优化的字节码(optimized file).这些代码都可以直接运行,不需要编译或者连接. ...

  4. python open找不到文件的原因_浅谈python 调用open()打开文件时路径出错的原因

    昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile =open("C:\Users\Spirit\Desktop\bc.txt",'r ...

  5. golang 获取文件的MD5值

    golang 获取文件的MD5值 调用下面的函数(输入参数是文件的路径,如/home/user/test.txt),即可获取指定文件的MD5值. func GetFileMD5(pathName st ...

  6. 《计算机辅助教学及应用实践研究》,《论文_浅谈计算机辅助教学(定稿)》

    <论文_浅谈计算机辅助教学(定稿)> (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 摘要:计算机辅助教学中要用到多媒体课件 ...

  7. python判断两个对象是否为相等使用的运算符是_Python入门_浅谈逻辑判断与运算符...

    这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符. (一) 逻辑判断: 如果要实现一个复杂的功能程序,逻辑判断必不可少.逻辑判断的最基本标准:布尔类型. 布尔类型只有两个值:True和Fa ...

  8. serverlet 区别_浅谈JSP serverlet的区别与联系

    jsp是html包含java servlet是java包含html jsp请求到tomcat---tomcat封装了jsp到servlet实现. 所以jsp请求时候,会自动创建session 而不用在 ...

  9. JAVA 获取文件的MD5值大小以及常见的工具类

    1 /** 2 * 获取文件的MD5值大小 3 * 4 * @param file 5 * 文件对象 6 * @return 7 */ 8 public static String getMD5(Fi ...

最新文章

  1. java 获取init参数,Java如何读取servlet init参数?
  2. boost::geometry::reverse_dispatch用法的测试程序
  3. 【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?...
  4. 有关EMMC、Nandflash、SSD、HDD的科普类说明
  5. altera fpga sdi输出方案_高段位攻城狮是这样解决SI分析、DDR、FPGA国产化问题的! | 电巢直播答疑汇总...
  6. 【Shell】检查字符串大小
  7. 开启我的segmentfault之旅
  8. 51Nod 1002:数塔取数问题(DP)
  9. EntityFramework 元数据 设计分析
  10. 防关联超级浏览器(超级防关联浏览器)的应用场景和技术原理
  11. pdf增强锐化软件_分享一波图像处理软件神器,绝对牛皮!!
  12. Java音频格式转换,支持amr、aud、slk、silk转成mp3
  13. R语言IBM股票月对数收益率的Egarch模型
  14. flash firefox linux,Linux下安装firefox的flash插件
  15. 股票预测pythonlstm_LSTM预测股票涨跌--结合技术分析视角(一)
  16. 老子道德经原文加讲解
  17. 计算机鼠标老跳动,用win10系统,鼠标总是乱飞乱跳怎么回事,找到原因及解决方案了...
  18. linux 命令:cut 详解
  19. 【机器视觉】工业传统视觉和3D视觉算法
  20. 【RoCE】Flow Control

热门文章

  1. 全景丨0基础学习VR全景制作,后期篇第六章:拼接工具的教程
  2. 数学建模 --- 使用工具进行描述性统计
  3. 人工智能客服——迎宾机器人
  4. 计算机网络cdma的优点,cdma上网卡怎么样 cdma上网卡功能优点及报价
  5. android评分系统源码,工具:安卓恶意软件评分系统
  6. 日常好用直播软件系统分享(二)
  7. 根据stc89原理图画pcb_基于STC89C52单片机毕业设计(完整版) 附 原理图 pcb图 源程序 仿真图...
  8. vuex-persistedstate 在UniApp报错的问题(‘setItem‘ of undefined )
  9. 第三届移动互联网测试开发大会 PPT合集下载
  10. Spring Boot @PropertySource注解加载指定配置文件(五)