b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

数据结构 二叉树遍历 关系型工作原理(3)

电脑杂谈  发布时间:2018-02-13 01:20:46  来源:网络整理

这里写图片描述

这个hash table有10组bucket。我只在图中画了5组bucket,另外5组 请自行脑补。Hash function我定义为除10求模(除以10求余数),换句话讲,我可以通过数值的最后一位数字确定bucket。

如果数字的最后一位是0,将数值存储到bucket 0中

如果数字最后一位是1,将数值存储到bucket 1中

如果数字最后一位是2,将数值存储到bucket 2中

…..

比较函数我采用判断两个整型数值是否相等的方法比较。

我们看一下如何找到hash table中找到元素78:

数据结构 二叉树遍历_数据结构二叉树编码_遍历二叉树应用

通过哈希函数计算得到哈希值8

在bucket 8中查找元素,第一个元素就是78

返回元素78

查询只需要执行两个步骤:第一步是计算哈希值,确定bucket位置;第二步在bucket中查看元素。

我们再看一下如何查找元素59:

计算哈希值,得到9

在bucket中查找元素59。第一个元素是99,99!=59,99不是要查找的元素。

采用同样的方式,查找第二个元素(9),第三个元素(79),… 最后一个元素(29)。

不存在59这个元素

本次查询执行了7步操作

如你所见,查询不同的值,时间复杂度是不同的。

如果你将哈希函数改为除以1000000取模(取数字的最后6位数,作为bucket标识)。上面的第二次查询只需要一步(在bucket 59中没有任何数据)。找一个好的哈希函数,保证每个bucket中存储尽可能少的数据,是非常困难的。

在上面的例子中找一个好的hash function非常容易。但这仅仅是一个简单的样例,如果关键字是如下数据类型,将非常困难:

1. 一个字符串(例如表示人的名)

2. 两个字符串(例如同时表示人的姓和名)

3. 两个字符串 + 一个日期(例如表示人的姓、名及生日)

设计一个好的hash function,哈希表的查询时间为O(1)。

为什么不使用数组? 问得好。

Hash table支持将部分内容加载到内存,另一部分保存在磁盘上。不必把整颗树加载到内存,节省内存空间。

数组必须使用连续的内存空间。如果要加载一张大表数据到内存,很难找到一大片连续的内存空间。内存分配失败的风险很大。

Hash table支持选择你想要的任意字段作为关键字(例如:人的所属国家,加上人的姓名。任意组合)。

想了解更多的信息,你可以读一下介绍Java如何实现hash map的文章,它是hash map高效实现的一个样例。理解本文中概念,你不需要懂JAVA。

已翻译的《How does a relational database work》其它章节链接:

1. 关系型工作原理-时间复杂度:

2. 关系型工作原理-归并排序:

3. 关系型工作原理-数据结构:

4. 关系型工作原理-高速缓存:

5. 关系型工作原理-事务管理(一):

6. 关系型工作原理-事务管理(二):


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-74529-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 王彦威
      王彦威

      康师傅跟鬼子有啥关系

    • 中宗朝优
      中宗朝优

      #杨洋icon##杨洋微微一笑很倾城##杨洋肖奈##杨洋轻奢young#

      • 刘云
        刘云

        有钱了说句屁话都被人捧为经典

    热点图片
    拼命载入中...