zoukankan      html  css  js  c++  java
  • 转(哈希查找)

    哈希查找因何快?我们使用它需要付出什么代价

    哈希表和哈希函数是大学数据结构中的课程,实际开发中我们经常用到Hashtable这种结构,当遇到键-值对存储,采用Hashtable比ArrayList查找的性能高。为什么呢?我们在享受高性能的同时,需要付出什么代价(这几天看红顶商人胡雪岩,经典台词:在你享受这之前,必须受别人吃不了的苦,忍受别人受不了的屈辱),那么使用Hashtable是否就是一桩无本万利的买卖呢?就此疑问,做以下分析,希望能抛砖引玉。
    1)hash它为什么对于键-值查找性能高
    学过数据结构的,都应该晓得,线性表和树中,记录在结构中的相对位置是随机的,记录和关键字之间不存在明确的关系,因此在查找记录的时候,需要进行一系列的关键字比较,这种查找方式建立在比较的基础之上,在.net中(Array,ArrayList,List)这些集合结构采用了上面的存储方式。
    比如,现在我们有一个班同学的数据,包括姓名,性别,年龄,学号等。假如数据有



    姓名 性别 年龄 学号
    张三 15 1
    李四 14 2
    王五 14 3
    假如,我们按照姓名来查找,假设查找函数FindByName(string name);
    1)查找“张三”
    只需在第一行匹配一次。
    2)查找"王五"
       在第一行匹配,失败,
       在第二行匹配,失败,
       在第三行匹配,成功
    上面两种情况,分别分析了最好的情况,和最坏的情况,那么平均查找次数应该为 (1+3)/2=2次,即平均查找次数为(记录总数+1)的1/2。
    尽管有一些优化的算法,可以使查找排序效率增高,但是复杂度会保持在log2n的范围之内。
    如何更更快的进行查找呢?我们所期望的效果是一下子就定位到要找记录的位
  • 相关阅读:
    Django之模板
    Web框架的原理
    mysql 索引
    pymysql模块的使用
    MySQl创建用户和授权
    php去除h5标签
    phpcms_完整版
    快速上手Linux 玩转典型应用_慕课网笔记
    php 微擎
    二维码接口
  • 原文地址:https://www.cnblogs.com/zwei1121/p/860143.html
Copyright © 2011-2022 走看看