Наиболее часто повторяющиеся цифры в огромном списке номеров - PullRequest
7 голосов
/ 10 сентября 2009

У меня есть файл, в котором много случайных целых чисел (около миллиона), каждое из которых разделено пробелом. Мне нужно найти топ-10 наиболее часто встречающихся номеров в этом файле. Каков наиболее эффективный способ сделать это в Java? Я могу думать о 1. Создайте хэш-карту, ключом является целое число из файла, а значением - количество. Для каждого числа в файле проверьте, существует ли этот ключ в хэш-карте, если да, значение ++, в противном случае введите новую запись в хеш 2. Сделайте BST, каждый узел является целым числом из файла. Для каждого целого числа из файла посмотрите, есть ли в BST узел, если да, укажите значение ++, значение является частью узла.

Я чувствую, что хэш-карта - лучший вариант, если я могу придумать хорошую функцию хеширования, Может кто-нибудь подскажет мне, как лучше всего это сделать? Есть ли еще какой-нибудь эффективный алгоритм, который я могу использовать?

Ответы [ 11 ]

0 голосов
/ 10 сентября 2009

Это источник для java.lang.Integer.hashCode(), который является функцией хеширования, которая будет использоваться, если вы сохраните свои записи как HashMap<Integer, Integer>:

public int hashCode() {
return value;
}

Таким образом, другими словами, (по умолчанию) значение хеша java.lang.Integer является само целым числом.

Что может быть эффективнее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...