概述
散列表/哈希表Hash Table
数组中保存着许多数据['apple','banana',...'milk',...'lemon']
如果希望找到'milk'
的位置(下标index),有以下几种查找方式
- 简单查找:O(n),对于字符串,相当于数据都是无序的,需要一个一个对比,看当前的数据是否是目标数据
- 二分查找:O(log2n),数据有序排列,每次将数据分为两半,提高查找效率
- 散列表:O(1),对于要查找的数据,用散列函数直接映射为一个独一无二的数字,这个数字就是目标数据的存储位置(下标index),这样可以直接取出数据
散列函数必须满足:①有相同输入,一定有相同输出②不同的输入映射到独一无二的数字上
平均情况下,散列表的查找(获取特定元素的值)和数组一样快,查找性能优于链表;而插入和删除与链表的速度一样快,性能优于数组;因此,散列表兼具数组和链表的优点
Pyhton中散列表的实现
大多语言都提供了散列表实现,Python的散列表实现就是字典dict
对于散列表,检查一个元素是否存在、访问一个元素,速度非常快
算法不能脱离数据结构,各种算法本质上都是将基本的数据结构进行组合,把握好链表、二叉树等基本的数据结构的特性,进而构建上层算法
Python中的内置数据结构
列表list
理解为数组
访问复杂度O(1),在尾部append复杂度O(1)
判断元素x in list
需要逐项对比,复杂度O(n)
缺点:在中间部分插入和删除的复杂度O(n)
字典dict
理解为Python中的哈希表HashMap
实现
访问、删除复杂度O(1)
判断元素x in dict
复杂度O(1)
缺点:元素无序
注意,从Python 3.6开始,普通字典dict也保证插入顺序不变
dict可直接实现有序字典OrderedDict的功能;
若只关注key而忽略value,dict可直接实现有序集的功能
集合set
理解为Python中的哈希集合HashSet
实现,底层实现基于哈希表dict
访问、删除复杂度O(1)
判断元素x in dict
复杂度O(1)
缺点:元素无序
参考:【python】list,dict,set的时间复杂度
最后
以上就是受伤含羞草为你收集整理的算法学习笔记——底层数据结构:哈希表、列表、集合的全部内容,希望文章能够帮你解决算法学习笔记——底层数据结构:哈希表、列表、集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复