Hash其实就是一个优化过的桶,而这种优化是用玄学的 % \% % 运算实现的。
我来直观的讲一讲这个玩意。
就以排序来说,如果最大数是longlong范围,而个数是20000000,HASH就可以将桶排的空间复杂度 O ( 1 ∗ l o n g l o n g ) O(1*long long ) O(1∗longlong) 优化成 O (大于20000000的模数 ) O\text{(大于20000000的模数}) O(大于20000000的模数)。(我这样写对不对?)由于模数越大,得到的余数种类也就越多,在一定在大于数据个数的时候,它的余数种类一定是够塞的。(如果两个数模后余数相同,还有其他的空位够它塞,因为余数个数大于数据个数)。也就是说,用 h a s h hash hash 就相当于把桶排那些用不到的位置都给节约了。
我们先选择一个模数,这个模数最好应该是质数,这样能防止重复。并且这个模数还应该满足比数据总数大,越大越好,这样比较优,(但是我怀疑会较低 % \% %