散列表

作者: 愤怒小鸟飞呀飞 | 来源:发表于2018-07-11 11:51 被阅读0次
散列表
  • 认识
    散列表 是 字典(键 、值对)的一种实现方式。每次在字典中获取一个值,都需要重复遍历字典,如果用散列表,字典中每个key都对应一个位置,从而不需要遍历。

以电子邮件地址簿为例,每个名字(key)对应一个邮件地址,用散列函数计算每个key在散列表中的位置(这里使用key的所有字符的ASCII码值相加),如图:

image.png
  • 问题:
    1、问:这个散列值 跟 散列表 在内存中有固定的结构关系么?
    答:没有,散列表实际结构不需要是数组,也可以是列表、二叉树之类的,散列表的本质是从key直接计算出value的位置。
    问:明白了,就是这个索引可能是value的内存地址,可能是数组的一个下表,也可能是二叉树中的一个节点值?
    答:是的,我认为如此,比如,也可以是个分段列表,0-1000在第一块,1001-2000在第二块,这样。
    答案由窦老师提供
    2、有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 key 去查找数据,在哪个字典中速度更快?
    答案链接:http://ios.jobbole.com/87716/
    3、装有字符的数组,字符值都在ASCII表中,求数组中每个字符出现的次数?
    答题思路:新建散列表,索引为字符的ascii数值,值为出现数组下表,装有字符的数组遍历

  • iOS哈希表:

    哈希表(hash table,也叫散列表),是根据关键码值(key value)而进行直接访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找速度。这个映射函数叫散列函数,存放记录的数组叫做散列表。
    哈希表hash table(key value)就是把key 通过一个固定的算法函数即所谓哈希函数转换为一个整形数字即哈希值,然后就将该数字对数组的长度取余,取余结果当做数组的下标,将value存储在以改数字为下表的数组空间里。而当使用哈希表进行查询的时候,就是在此将哈希函数将key转换为对应数组下标,并定位到该空间获取value,如此一来,就可以充分利用数组定位性能进行数据定位

代码实现参见:https://draveness.me/hashtable

问题:哈希表与NSDictionary的区别与联系
NSDictionary是使用hash表来实现key和value之间的映射和存储的,hash函数设计的好坏直接影响数据的查找访问效率,数据在hash表中分布越均匀,其访问效率越高。而在Objective-C中,通常都是利用NSString 来作为键值,其内部使用的hash函数也是通过使用 NSString对象作为键值来保证数据的各个节点在hash表中均匀分布。

NSDictionary实现原理:https://blog.csdn.net/linshaolie/article/details/41494303
散列表原理:https://segmentfault.com/a/1190000008556414
哈希表 概念 https://www.jianshu.com/p/88dfc8f405ab

相关文章

  • 散列表

    1.啥是散列表及散列函数? 很多语言都提供了散列表的实现方式,python是用dict{ }来实现 2.有啥优势?...

  • 散列表

    基本概念(非严谨) 散列表:按照思考事物本质以及理想状态的思路,那么散列表从本质来讲就是一个表,而理想的散列表应该...

  • 散列表

    散列表:散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f...

  • 散列表

    转载请注明出处!https://www.jianshu.com/p/e325578eb512 链表实现 Githu...

  • 散列表

    一、定义 散列表(Hash Table,也叫哈希表),是通过把键值映射成整数来作为数组的索引,并进行访问记录的一种...

  • 散列表

    https://blog.csdn.net/pcwl1206/article/details/83582986

  • 散列表

    散列查找法的两项基本工作 计算位置:构造散列函数直接确定关键词存储位置散列函数的设计,主要目的是构造随机性:计算简...

  • 散列表

    散列表是一种基本的数据结构,那么散列表到底是什么样的一种数据结构呢?又有哪些应用场景呢? 假如我们要从一本电话本中...

  • 散列表

    散列表 认识散列表 是 字典(键 、值对)的一种实现方式。每次在字典中获取一个值,都需要重复遍历字典,如果用散列表...

  • 散列表

    散列函数将被查找的键转换为数组的索引 解决冲突的方法:拉链法和线性探测法 将整数散列最常见的方法是除留余数法,通常...

网友评论

      本文标题:散列表

      本文链接:https://www.haomeiwen.com/subject/wlwfpftx.html