JFC的HashMap和TreeMap之间的时间复杂性?

时间:2010-09-05 23:38:04

标签: algorithm

根据我的理解,

TreeMap :
1. Insert O( logN )
2. Delete O( logN )
3. Retrieve O( logN )
HashMap :
1. Insert O( 1 ) -> O( N )
2. Delete O( 1 ) -> O( N )
3. Retrieve O( 1 ) -> O( N )

我知道TreeMap使用Red-Black树作为内部数据结构。但是,我不太了解HashMap的内部数据结构。

  1. 使用是否实现了HaspMap 哈希表?
  2. 如果答案是“是”,那么它是否使用array-base的实现 或参考基础的实施?
  3. 如果它使用了array-base,那么它是排序还是未排序?
  4. 我正在开发一个使用Java来展示HashMap和TreeMap之间所有操作(插入,删除,检索)的运行时复杂性的小项目,但我真的不知道如何将理论公式与实际结果联系起来。运行程序。例如,从运行快速测试: 1.插入10,000个元素 2.删除100个元素 3.检索100个元素

    我收到了这个信息:

         HashMap
    Create time : 6348015 nano seconds.
    Remove time : 98458 nano seconds.
    Retrieve Found time : 59762 nano seconds.
    Retrieve Not Found time : 39097 nano seconds.
     --- end ---
    
         TreeMap
    Create time : 20518163 nano seconds.
    Remove time : 274221 nano seconds.
    Retrieve Found time : 112072 nano seconds.
    Retrieve Not Found time : 168442 nano seconds.
     --- end ---
    

    我想知道如何在理论时间复杂度(如O(N)或O(logN))中找到这些时间的链接? 这个结果让我感到惊讶,因为我一直认为TreeMap会严重打败HashMap。谁能给我一些关于这些事情的简短解释?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您想显示某些操作的复杂性,您不能只使用一个数据点,而是必须显示N更改时的时间变化。

此外,对于较小的数据集,通常具有更好理论复杂度的算法或数据结构的运行时间更短。

要考虑的另一件事是拥有代表性的价值观。例如,如果您将值1, 2, 3, …插入到RB树中,那么这是最糟糕的情况(我认为),因为它必须经常重新平衡。插入随机值可能会产生不同的结果。

答案 1 :(得分:0)

我在youtube上看到了通过动画和图表解释不同排序算法的视频。另请注意,Big-Oh是最坏情况运行时间,因此您可能需要对其进行装配,以便在最坏的情况下点击以突出显示差异。

我认为一个简单的图表最好,y轴上的时间和x轴上的元素数量。