Как и большинство вопросов на собеседовании, это больше предназначено для того, чтобы зажечь разговор, чем иметь один ответ.
Если файлов очень мало, может быть быстрее просто провести побайтовое сравнение, покаВы достигаете байтов, которые не совпадают (при условии, что вы делаете).Если файлов много, то, возможно, будет быстрее вычислять хэши, поскольку вам не придется переключаться между чтениями диска в виде фрагментов из нескольких файлов.Этот процесс можно ускорить, захватывая все большие фрагменты каждого файла по мере прохождения файлов, исключая потенциальные возможности.Также может быть необходимо распределить проблему между несколькими серверами, если их достаточно файлов.
Я бы начал с гораздо более быстрой и простой хэш-функции, чем SHA-1.SHA-1 криптографически безопасен, что не обязательно требуется в этом случае.В моих неофициальных тестах Adler 32, например, работает в 2-3 раза быстрее.Вы также можете использовать более слабый предполагаемый тест, чем повторно тестировать любые файлы, которые соответствуют.Это решение также зависит от соотношения между пропускной способностью ввода-вывода и мощностью ЦП. Если у вас более мощный ЦП, используйте более конкретный хеш, чтобы сэкономить необходимость перечитывать файлы в последующих тестах, если у вас более быстрый ввод-вывод, повторные чтения могут быть дешевле, чем выполнениедорогие хеши излишне.
Другой интересной идеей будет использование эвристики для файлов при их обработке для определения оптимального метода на основе размера файлов, скорости компьютера и энтропии файла.