根据我的理解,
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的内部数据结构。
我正在开发一个使用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。谁能给我一些关于这些事情的简短解释?提前谢谢。
答案 0 :(得分:1)
如果您想显示某些操作的复杂性,您不能只使用一个数据点,而是必须显示N
更改时的时间变化。
此外,对于较小的数据集,通常具有更好理论复杂度的算法或数据结构的运行时间更短。
要考虑的另一件事是拥有代表性的价值观。例如,如果您将值1, 2, 3, …
插入到RB树中,那么这是最糟糕的情况(我认为),因为它必须经常重新平衡。插入随机值可能会产生不同的结果。
答案 1 :(得分:0)
我在youtube上看到了通过动画和图表解释不同排序算法的视频。另请注意,Big-Oh是最坏情况运行时间,因此您可能需要对其进行装配,以便在最坏的情况下点击以突出显示差异。
我认为一个简单的图表最好,y轴上的时间和x轴上的元素数量。