算法学习笔记——底层数据结构:哈希表、列表、集合

散列表/哈希表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的时间复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值