То, что мы оптимизируем здесь, это время, потраченное на задачу.
К сожалению, мы недостаточно знаем о поставленной задаче, чтобы понять, каким должно быть оптимальное решение.
Это для одноразового сравнения 2 произвольных файлов?
Затем сравните размер, и после этого просто сравните файлы, побайтные (или мб на мб), если это лучше для вашего ввода-вывода.
Если это для 2 больших наборов файлов или множества наборов файлов, и это не разовое упражнение. но что-то случается часто, тогда нужно хранить хэши для каждого файла. Хеш-код никогда не бывает уникальным, но хэш с числом, скажем, 9 цифр (32 бита) был бы хорош для примерно 4-миллиардной комбинации, а 64-битное число было бы достаточно для различения 16 * 10 ^ 18 квинтиллионов различных файлов .
Приличным компромиссом было бы создание 2 32-битных хэшей для каждого файла, один для первых 8 КБ, другой для 1 МБ + 8 КБ, соединяя их вместе как одно 64-битное число. Каталогизация всех существующих файлов в БД должна быть достаточно быстрой, и поиск файла-кандидата по этой БД также должен быть очень быстрым. После совпадения единственный способ определить, совпадают ли они, - сравнить файлы целиком.
Я верю в предоставление людям того, что им нужно, что не всегда никогда не то, что они думают, что им нужно, или что хотят.