A computação de um hash MD5 de cada arquivo (sugerido na pergunta e nos links das respostas) parece ser uma maneira bastante "cara" de resolver o problema. Ignorando o cálculo real de cada hash, basta ler cada um e cada arquivo completamente incorre em muito trabalho no disco rígido (extremamente lento).
Minha sugestão para um "algoritmo" seria algo que liga isso:
- Obtenha o tamanho exato de cada arquivo na unidade (ou diretório, ou qualquer outro). Isso deve ser relativamente barato, pois é provável que o tamanho seja armazenado na parte do índice do sistema de arquivos.
- Para cada tamanho de arquivo exclusivo com mais de um arquivo associado, calcule o MD5 de cada um deles e compare os valores de hash para detectar duplicatas. Embora não seja muito provável, dois arquivos com o mesmo tamanho podem ter o mesmo valor. Se você não quiser correr o risco de falsos positivos, compare os arquivos byte por byte ou após a comparação de hash.
- Para cada outro tamanho de arquivo exclusivo, você não tem duplicatas.