我了解哈希表数据结构的基本原理。如果我有一个大小为N的哈希表,我必须尽可能均匀地将我的数据分配到这些N个桶中。
但实际上,大多数编程语言都具有内置的哈希表类型。当我使用它们时,我无需预先知道哈希表的大小。我可以随意将任何东西放入其中。例如,在Ruby
中:
h = {}
10000000.times{ |i| h[i]=rand(10000) }
它如何实现这个功能?
我了解哈希表数据结构的基本原理。如果我有一个大小为N的哈希表,我必须尽可能均匀地将我的数据分配到这些N个桶中。
但实际上,大多数编程语言都具有内置的哈希表类型。当我使用它们时,我无需预先知道哈希表的大小。我可以随意将任何东西放入其中。例如,在Ruby
中:
h = {}
10000000.times{ |i| h[i]=rand(10000) }
它如何实现这个功能?
hash % current_size
开始,然后再依次为hash % current_size/2
,以此类推。 当您找到该值时,可以重新哈希它。这样,您就可以进行懒惰重哈希而不会失去太多性能,因为常访问的值会自动被重哈希。 - Not_a_Golfer