2015-04-18 4 views
0

У меня есть Hashtable<String, Integer> ht.Как найти медиану значений в Hashtable в Java?

Как эффективно найти значения (целочисленного) медианного в этой хэш-таблице?

+0

Что вы пробовали? Возникает вопрос, как найти медиану кучки чисел или как получить значения карты? – yshavit

+0

Я могу думать о том, чтобы перебирать все элементы и записывать их, а затем сортировать их, наконец, вычислять медиану. Но я считаю, что есть лучшие способы. – WindChaser

+0

Так это действительно о [поиске медианы несортированного списка] (http://stackoverflow.com/questions/10662013/finding-the-median-of-an-unsorted-array)? – yshavit

ответ

2

В хеш-таблице нет значимого порядка: вся точка хеш-таблицы должна равномерно распределять значения в ведрах в соответствии с их ключом. Поиск элемента, дающего ключ, очень быстро, почти постоянное время (т. Е. O (1)), но алгоритмы на основе неравенства, скажем, найдя все элементы e такие, что ключ (e) < 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

+0

Конечно, сортировка ключей - это еще один способ найти медианный ключ, но имеет O (N log (N)), который медленнее, чем O (N). Хорошо известно, что в информатике вы можете найти медианное значение в несортированном массиве в шагах O (N). Это не очевидно сначала. – Liondance

Смежные вопросы