专业课复习笔记 8
前言
因为电脑一直连着电源,然后我把电脑改成了五分钟息屏,之前一直非常苦恼,不敢碰鼠标,因为我有时候确实想要电脑息屏。现在总算赶上平均进度了,我是说专业课。但是感觉自己还是啥都不会。内心非常慌。所以加油。。。怕啥,学就完了。
尽人事知天命
向量/数组的 rank 直接换成关键字,然后就直接实现了和具体有效字的对应,更加简单直观,就像我们说 xxx 就知道对应的是谁。快速反应体现了熟练度,篮球比赛的时候那些运动员说的外人不知道他们在大声吼些啥,但是他们自己人是知道的。这就是词典。散列是循对象访问的,对象就是比如说,循着关羽,直接访问到云长了,associative 表示结合的,关联的,associative array 可以翻译为联合数组,可以实现更直接有效的访问。
map and dictionary
底层都是用 hash table 来进行实现的,本质上是同一个东西的两种命名。都是表示键值对的集合,前面说的关羽就是唯一的 key ,后面的云长是 value ,是可以出现重复的。map 可以翻译为映射。无序标量 scalar 也映射,词典也是一个意思。词典支持的操作是,或者说定义的这个结构体里面包含的定义了的操作是,词条总数,插入词条,读取词条,删除词条,感觉词典这个东西非常好用,我们用的搜索引擎,感觉很可能就是用的这样一个数据结构,当然肯定有很大程度上的优化。
笑死
——“如果是活着的人,想谁,找谁一趟不就完了?”
——“找不得,找不得,当年就是因为个找,我差点丢了命。”
存电话号码
确实是,假设我们从 00000000000(11 个零)一直到 1 x x x x x x x x x x 十一位数字 1xx xxxx xxxx\text{ 十一位数字 } 1xxxxxxxxxx 十一位数字 作为关键码,实际上是造成了很大的浪费的,所以我们把名字作为关键码是更加合适的,因为我们需要用到的电话号码的数量相对于电话号码可能的取值的数量来说是一个非常小的数字,我是说这个数量,比如说十一位数,是百亿这个级别的。但是我生活中经常联系的就不超过十个电话号码,百亿分之十,十亿分之一的这个利用率,未免太奢侈了。
随机访问
random access ,数组可以通过索引访问数据结构的任意元素,时间复杂度是 O ( 1 ) O(1) O(1)
,之前还以为是啥呢,还是得把一个东西学透彻,不然一知半解心里没有任何底气。
hashing 压缩
通过 h a s h ( k e y ) hash(key) hash(key) 的操作,把一个范围很大的关键码,映射到一个可以接受的比较小的范围内,散列的英文实际上就是 hash, 当然是大写的,但是我这里直接小写了,大写难以阅读,阅读困难,学这个东西本来逻辑上就有难度了,还卡语言的话真不用学了。呜呜呜。还是前面存电话号码的问题,我们还是需要保证查找速度,估计是因为我们只知道电话号码,不知道其他的东西,那么就是要把大范围的数字映射到小范围里面去,提高空间的利用率。桶就是 bucket , 直接存放或者间接指向一个词条,bucket array 和 hashtable
的关系类似于引擎和汽车的关系。
最后
好好加油。