Эффективность: какую структуру данных использовать ...? - PullRequest
2 голосов
/ 18 февраля 2010

Я работаю с очень большим набором данных. По сути, я буду работать с миллионами записей и сохранять значения в наборе данных.

Каждый раз, когда я сохраняю значение, я должен сначала проверить, чтобы убедиться, что значение еще не находится в структуре данных. Если значение находится в структуре данных, я должен обновить (или удалить / добавить) запись, чтобы обновить счетчик.

В наборе данных есть повторы, и я не хочу использовать неправильную структуру данных и получать скорость O (n), так как я хотел бы иметь возможность запускать это ночью и входить утром с этим сделано!

Какой совет?

Ответы [ 4 ]

3 голосов
/ 18 февраля 2010

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

0 голосов
/ 18 февраля 2010

Вы можете попробовать двоичное дерево. log_2 (1,000,000) - около 20. Это может быть лучше, если вы не знаете, какие ключи будут заблаговременно.

0 голосов
/ 18 февраля 2010

Использовать хеш-таблицу

0 голосов
/ 18 февраля 2010

Звучит так, будто вам нужна хеш-таблица в сочетании с (возможно) списком или какой-то определенной структурой. Для меня это звучит как база данных .

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