2010-08-21 5 views
-1

Два файла с размерами терабайт. Средство сравнения файлов сравнивает i-я строка файла1 с, который подходит для размещения данных

i-я строка файла2. если они одинаковы, он печатает. какая структура данных подходит.

  1. B-дерево
  2. связанный список
  3. хэш-таблицы
  4. ни один из них
+1

Это, очевидно, вопрос о домашнем задании, поэтому мы поможем вам ответить на вопрос самостоятельно. Можете ли вы придумать какие-либо преимущества/недостатки этих решений? Почему один метод должен быть подходящим, а другие нет? – Wolph

+0

Очевидно, что в массиве памяти было бы лучше. это позволяет вам напрямую обращаться к каждой строке файла. – Polaris878

+0

Это даст ответ, но я не хочу, чтобы кто-то слишком долго боролся :) Ключом к этому вопросу является тот факт, что входные файлы имеют размер _terabytes_. –

ответ

2

Вы должны быть в состоянии буфера до по крайней мере построчно. Вот один из способов:

While neither file is at EOF: 
    Read lines A and B from files one and two (each) 
    If lines are identical, print one of them 

Перевести на подходящий язык программирования, и проблема решена.

Обратите внимание, что в них нет привлекательных структур данных.

+0

Не обязательно. Если вы можете искать назад в файле, вы можете сравнить персонаж за раз, пока не найдете EOL в обоих файлах (в этом случае вы копируете из метки здесь на вывод), или вы обнаружите несоответствие, и в этом случае вы ищете вперед в каждый файл, пока последний символ не был EOL. Затем вы сбросите свой знак. Относитесь к EOF как EOL, и вы ничего не забуферировали, кроме пары смещений файлов. – Ian