之所以会接触到散列,是因为在学习中遇到这么一个问题:“根据课堂中所介绍的散列索引原理,实现一个自增长散列索引的原型。”
那么就根据上面这个问题,来探讨下关于散列的一些基础知识。
一、什么是散列?散列“牛”在哪里?
1.1 什么是散列
这里说下传统的查找操作,设计如下场景:
角色:班主任、校长、学生
需求:找学生中的“张三”
那么场景1:校长要找“张三”,笨的一种方式,是获取学生名单,然后进行比对,发现“张三”,则找人成功。
场景2:还是校长找“张三”,通过班主任找,班主任可以直接找到自己的学生“张三”,则找人成功。
这里的场景1与场景2,则是传统的查找操作与“散列”的对比:
传统查找通过给定的key,通过比对获取相应的value,这个比对的过程是不可省略的。
散列查找,则是通过某种关系f,直接找到相应的key对应的value,其中没有比对的过程,因此效率非常高。
那么给出一个散列的小概念:存储位置 = f( key ),同时我们称这个关系f为散列函数,又称哈希函数。
1.2 散列牛在哪里
散列牛在:我们通过查找关键字,不需要比较就可以获得需要记录的存储位置。这个也称之为散列技术。
下面为散列技术与散列表做一个简单的定义:
"散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f ( key )"
查找时,根据这个确定的对应关系找到给定值key的映射f(key