Sería un buen primer paso, suponiendo que solo intente encontrar coincidencias * EXACT * hasta el nivel de píxeles. Si hago un hash de un archivo una vez, y luego lo hago un poco por cada copia, obtendré el mismo hash cada vez. Si los archivos realmente son idénticos, puedo comparar los hashes mucho más rápido que los archivos.
El método tiene un inconveniente: el archivo en sí mismo puede considerarse como un entero entero; de hecho, así es como lo ve el algoritmo hash. El hash (en sí) es casi siempre más pequeño que el archivo. Las colisiones son una posibilidad; dos archivos diferentes producirán el mismo hash.
Con un algoritmo de hashing decente, esto es poco probable, pero sigue siendo un problema potencial, por lo que debe ser lo más pequeño posible. La pequeñez es uno de los principales objetivos de diseño de los hashes de criptografía. Por ejemplo, SHA-3 [vea mi biografía] es / era necesario debido a un equipo chino que publicó un artículo teórico sobre cómo forzar colisiones (SHA-2 / SHA-256 / SHA-512).
- ¿Qué algoritmo siguen las historias de Instagram para mostrar a los espectadores?
- ¿Cuál es la estructura de datos utilizada para realizar la recursividad?
- ¿Bajo qué escenarios son apropiados los siguientes algoritmos de ruta más corta?
- ¿Qué hay de malo con este código básico de Python?
- ¿Qué tan buena es la calidad de los problemas de HackerRank en comparación con los problemas de Topcoder, Codeforces, Codechef?
La prueba matemática es un subconjunto contable y adecuado de un conjunto contable en el que los miembros incluyen: los enteros y el valor hash de todos los enteros. Esto no puede ser biyectivo [1] (existe un mapeo uno a uno en ambas direcciones entre todas las versiones posibles de ambos conjuntos). Hay otro inconveniente: si los archivos difieren, un hash no me dirá en qué se diferencian, solo que lo hacen.
Notas al pie
[1] Biyección