- 845 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 22:25:34.77 ID:MGzOS3+Z.net]
- Ruby のハッシュでは、データ数と共に、バケット数を増やしていく。
バケット数は、2 の累乗の次に現れる素数。 2^n + a, 2 <= n <= 30 8 + 3 = 11 16 + 3 = 19 32 + 5 = 37 64 + 3 = 67 128 + 3 = 131 256 + 27 = 283 512 + 9 = 521 データ数が、バケット数の5倍を超えると、ハッシュが再構成される。 再構成時には、極端に遅くなる 11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。 19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる バケット数は、2 の累乗で大きくなっていくから、 大きいほど、線形(全)探索に比べて、ハッシュが有利 増え方が、N に比例しなくて、log N に比例するから 例えば、2^20 = 百万で、2^21 = 2百万では、 線形探索では毎回、百万回増えるけど、 ハッシュでは、1回だけ再構築して、その後は、21回で見つかる
|

|