我编写了一个Hashtable的java实现,我想测试它的复杂性。哈希表的结构为双链表的广告数组(总是由我实现)。数组的维数是m。我实现了一个划分哈希函数,乘法一个和通用一个。现在我正在测试第一个哈希值。 我用这种方式开发了一个测试套件:
U (maximum value for a key) = 10000;
m (number of position in the hashkey) = 709;
n (number of element to be inserted) = variable.
所以我做了多次插入,逐渐插入了不同n的数组。我用System.nanoTime()
检查了执行时间。
出来的图表是下一个: http://imgur.com/AVpKKZu
假设插入是O(1),n插入是O(n)。那么该图应该是O(n)吗?
如果我改变我的价值观:
U = 1000000
m = 1009
n = variable-> ( I inserted once for time, array with incrementally dimension by 25000 elements, from the one with 25000 elements to the one with 800000 elements ).
我得到的图看起来有点奇怪:
要插入的元素的唯一键是在关键U的宇宙之间伪随机选择的。 但是,对于不同的执行,如果我在文件中存储相同的键,图表的行为总会随着某些峰值而变化。
希望你能帮助我。如果有人需要代码,可以发表评论,我很乐意展示。