Удаление дубликатов в больших текстовых файлах

StackOverflow https://stackoverflow.com/questions/505545

  •  21-08-2019
  •  | 
  •  

Вопрос

Я пытался вычислить все уникальные перестановки для очень длинное слово (antidisestablishmentarianism), и хотя я могу вычислить перестановки для слов, у меня возникают проблемы с остановкой создания дубликатов.

Обычно я бы просто запустил List<T>.Contains() метод в моей строке, но список перестановок становится настолько большим, что я не могу сохранить его в памяти.Я допустил эту ошибку ранее и умудрился использовать все 8 ГБ памяти на своем компьютере.Чтобы предотвратить повторение этого, я изменил код, чтобы добавить вычисленную перестановку в файл и освободить ее из памяти.

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

Это не домашнее задание, мое домашнее задание по математике давало гипотетическую ситуацию, когда компьютер мог вычислять 30 перестановок в секунду, и заставляло меня прикидывать, сколько времени потребуется, чтобы вычислить все перестановки.Это не было проблемой, и мне не нужна помощь в этом, я просто хотел знать, сколько времени потребуется современному компьютеру для выполнения той же задачи.

Это было полезно?

Решение

Как насчет использования алгоритма, который генерирует все перестановки без дубликаты?Таким образом, вам не пришлось бы проверять их наличие в первую очередь.

Поиск в Google по запросу "algorithm generate permutations" выдает десятки ссылок, которые помогут вам начать.например , Методы генерации перестановок

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top