如何在Java中查找Hashtable中的值的中值?

时间:2015-04-18 01:35:47

标签: java hashtable

我有Hashtable<String, Integer> ht

如何有效地在此哈希表中找到值'(整数)中位数?

2 个答案:

答案 0 :(得分:2)

哈希表中没有有意义的排序:哈希表的重点是根据密钥在桶中统一分散值。找到给出密钥的元素非常快,接近恒定时间(即O(1))但是基于不等式的算法,例如找到所有元素e使得密钥(e)<1。对于给定的键值K,K通常需要表扫描,即O(N)。

您可以在数组中加载所有键(以及仅键),然后使用(O(N))算法查找与中值对应的键。获得中值键后,可以使用它从哈希表中检索中值元素。

请注意,O(N)显然是找到无序集合中位数的最佳方法。如果你需要经常找到集合的中位数,那么有序表示,例如基于平衡的树木,是要走的路。红黑树通常用于实现这种有序地图。密钥查找将是O(log(N)),它比O(1)慢,但仍然非常快,但该集已经被排序并且找到中位数很容易,并且通常作为内置操作提供。

我所知道的快速中位数发现算法基于Quicksort中使用的相同旋转策略。这是我刚发现的另一个:

http://www.cs.cornell.edu/courses/cs2110/2009su/Lectures/examples/MedianFinding.pdf

答案 1 :(得分:0)

您可以使用The Apache Commons Mathematics Library

您可能需要的所有数学工具都有完整的API,例如medianmeanstandard deviation等等。

希望有所帮助。