2011-07-25 18:21:16Morris

Hash table %& 結論

簡單的Hash, 就只是拿一個數字N%M, 存在 Hash[N%M], 發生碰撞, 就鏈結
那麼之前可能會看過 & 的運算, 會比 % 快 ? 我也不知道我在哪裡看到過了
判斷偶數, 只要用 N&1 來做判斷, 真的會比較快, 不過速度到底差多少 ?
我們拿一題 a064. SPOJ 4580.ABCDEF 來做測試
Hash 若要使用 N&M, 則必須 M = 2^N - 1 (也就是 1111111...)

N%524288
*** 第 1 點 (10%):AC (256ms, 10MB)
*** 第 2 點 (10%):AC (20ms, 3.3MB)
*** 第 3 點 (10%):AC (32ms, 2.3MB)
*** 第 4 點 (10%):AC (36ms, 2.6MB)
*** 第 5 點 (10%):AC (8ms, 2.3MB)
*** 第 6 點 (10%):AC (32ms, 2.3MB)
*** 第 7 點 (10%):AC (40ms, 2.3MB)
*** 第 8 點 (10%):AC (32ms, 2.4MB)
*** 第 9 點 (10%):AC (36ms, 2.4MB)
*** 第 10 點 (10%):AC (252ms, 10MB)

N&524287
*** 第 1 點 (10%):AC (248ms, 10MB)
*** 第 2 點 (10%):AC (20ms, 3.3MB)
*** 第 3 點 (10%):AC (24ms, 2.3MB)
*** 第 4 點 (10%):AC (32ms, 2.6MB)
*** 第 5 點 (10%):AC (8ms, 2.3MB)
*** 第 6 點 (10%):AC (28ms, 2.3MB)
*** 第 7 點 (10%):AC (24ms, 2.3MB)
*** 第 8 點 (10%):AC (28ms, 2.5MB)
*** 第 9 點 (10%):AC (28ms, 2.4MB)
*** 第 10 點 (10%):AC (248ms, 10MB)

如以上看到的, 速度確實是 & 比較快, 但是好像也沒有差多少