python 字典为啥这么快
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 字典为啥这么快相关的知识,希望对你有一定的参考价值。
因为字典是通过键来索引的,关联到相对的值,理论上他的查询复杂度是O(1)。哈希表(也叫散列表),根据关键值对(Key-value)而直接进行访问的数据结构。它通过把key和value映射到表中一个位置来访问记录,这种查询速度非常快,更新也快。而这个映射函数叫做哈希函数,存放值的数组叫做哈希表。 哈希函数的实现方式决定了哈希表的搜索效率。 参考技术A hash查找是O(1)算法。。。普通的遍历O(n)
为啥比较运算符这么快?
【中文标题】为啥比较运算符这么快?【英文标题】:why comparisons operators are so quick?为什么比较运算符这么快? 【发布时间】:2018-11-03 16:29:52 【问题描述】:根据 Alexandrescu 的文章https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/
操作的速度层次是:
比较 (u)int 加、减、bitops、移位 浮点加、减(单独的单位!) 索引数组访问(警告:缓存效果) (u)int32 数 FP 多重 FP 除法,余数 (u)int 除法,余数
我不明白为什么比较这么快。
如何快速比较两个大数?算法是什么?
【问题讨论】:
恕我直言,(整数)比较与(整数)减法一样快,因为实际上它是带有丢弃结果的减法 - 除了处理器状态标志 Z、N、V、C。IMHO, (integer) comparsion is as fast as (integer) subtraction because effectively it is subtration
你说的是cmp
指令,还有另一个指令test
,它执行按位与。
@ReAl 我也猜到了。另一方面,它是亚历山德雷斯库。 (我的书架上有他的一本书。) ;-) 难道是 discarded result 使比较更快。 (它不需要写回结果。)查看机器命令循环表会有所帮助......
Agner Fog's website 是此类场合的好来源。他有Instruction tables for Intel, AMD, and VIA CPUs。
cmp
本身并不比 add
快,但是 arith-branch 对(包括 add+jz
!,而不仅仅是与 cmp
的组合)的成本与从这个意义上说,单独的分支有时可以“免费”添加cmp
【参考方案1】:
这些比较很快,因为它们很容易。有问题的文章正在谈论数值的比较。一般来说,它们分为两种类型:将一个整数与另一个格式相同的整数进行比较,以及比较两个浮点数。
在整数比较的情况下,使用的整数格式可以以非常直接的方式比较两个值,按特定顺序查看特定位(符号位、高位位,然后是低位-订单位)。
在浮点数的情况下,绝大多数值将表示为in a normalised form,因此您可以按顺序进行比较:
对应的符号位,如果它们相等 对应的指数,如果它们相等 对应的尾数(从高位到低位,按位)。此类比较在通用处理器中非常常见且非常重要,以至于它们将针对速度进行优化。
【讨论】:
以上是关于python 字典为啥这么快的主要内容,如果未能解决你的问题,请参考以下文章