感谢某位粉丝的来信,小夕在该系列文章中有如下错误,请已经读过该系列文章的同学务必留意一下。
1、C++中的向量的写法是vector,而不是Vector!首字母不要大写!
2、在《小夕说,xxxx(下)》中,浮点运算速度不会发生变化!大脑短路了T_T在计算位数不变的情况下,浮点运算的开销不会随着有效位数的增加而变大!
3、在《小夕说,xxxx(下)》中,Java中的HashTable系列的扩容倍率选择2的原因有更深层次的考虑,不仅仅是底层用数组实现的原因这么简单:
哈希之所以采用2倍的扩容倍率(更准确的说哈希的扩容倍率应采用2的幂次),是处于哈希表元素找位置的角度考虑的。
一般来说,hash表元素找位置的办法是元素的hash值对表大小取模。
理论上表大小是个正数就可以,不过对于一般的数字,计算机的整数除法是很慢的。
如果表大小是2的幂,则可以用位运算来代替除法,比如表大小为1024,则K%1024可以优化为K&0x3FF,速度就快很多,所以hash表大小最好保持为2的幂,因此扩容时候只能乘以2,或乘以2的幂。
因为这个原因,java的hash表扩容,才是翻两倍。当然,在有的语言,比如python中,hash表扩容倍率则为四倍。总之成熟的设计一定要服从2的幂次。