Не совсем так. Хэши считать - дело накладное. Я в аналогичной ситуации сортировал по длине, искал файлы с одинаковой длиной, и сравнивал только их (причём просто командой cmp, без всякого md5 - это тоже гораздо быстрее, так как разные файлы оказываются разными в самом начале).
Я думаю мы говорим про типичную ситуацию, типа куча музыки или картинок с некоторым бардаком и совпадениями. А если есть вероятность, что у многих файлов одинаковый размер, тогда конечно может оказаться удобнее хэшами. Вообще, я больше практик. :) С теоретической точки зрения, оба подхода имеют право на существование при различных начальных условиях, а без их указания задача вообще некорректна. :) Так что прошу считать, что я включил телепатию, чтобы угадать более подробно условия задачи. :)
А то можно ещё порассуждать, что для одинаковых файлов мы начнём хэши считать, причём не md5, а что-нибудь попроще, и не от всего файла, а от первого килобайта (у меня в роли контрольной суммы собственнно и выступала длина файла, при моих допущениях число совпадений по этой контрольной сумме невилико, а проверять при совпадении контрольной суммы надо всё равно), и так далее...
Короче говоря тут спор по сути только о том, какую конкретно выбрать контрольную сумму для первого прохода. :) Длина файла считается гораздо быстрее, чем md5, вот. :)