码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--散列排序--散列表

时间:2015-09-01 12:30:01      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

散列表

 散列查找,我们又回到了查找,

 编译的时候,涉及变量及属性的管理:

  • 插入:新变量的定义
  • 查找:变量的引用

 实际上是动态查找问题,查找树AVL树。

两个变量名(字符串)比较效率不高。字符串的比较要一个一个的比下去,时间会比较长,

是否可以把字符串转换成数字,再处理,就快多了。就是散列查找的思想。

已知的查找方法:

  • 顺序查找                                          O(N)
  • 二分查找(静态查找,不适合动态查找)   O(log2N)
  • 二叉搜索数        适合动态查找               O(h) h为树的高度
  • 平衡二叉树        适合动态查找               O(log2n)

二叉树呢要比每个字符,所以AVL树用在刚才的场景中不太合适,还有什么方法

技术分享

下面是二分查找

技术分享

插入和删除是一个动态的数据,所以不能用二分查找,那么用什么?

查找的本质:给你这个对象,让你找这个对象的位置。

  • 有序安排对象:全序(二分查找),半序(某些关键字 ,查找树(左子树小,右子树大))。
  • 直接“算出”对象的位置:散列

散列查找法的两项基本工作:

  • 计算位置构造散列函数确定关键词存储的位置
  • 解决冲突应用某种策略解决多个关键词位置相同的问题

时间复杂度几乎是常量O(1),即查找时间与是问题规模无关!

散列表的抽象数据结构

技术分享

主要是 3 5 6   Find   insert  delete

例题 1 

散列表在这个例题中是数组,

技术分享

 

例题 2 

技术分享

如果没有冲突,三个都可以在线性时间内完成,

总结

散列(Hashing)查找的基本思想:

  1. 以关键字key为自变量,通过一个确定的函数h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址。
  2. 可能不通的关键字会映射到同一散列地址上,即h(key i) = h(key j)(当key i !=key j )称为冲突 ---需要某种冲突解决策略。

 

数据结构--散列排序--散列表

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4775262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!