Hay chance ;) On 9/1/07, NachoKB <[EMAIL PROTECTED]> wrote: > > Y si le das una oportunidad a la de hacer los primeros 64k nada más? y > cuando detectas una colisión, recién ahí vas probando con más?? > Entonces, en el caso de que sean todos distintos, tarda un tiempo que > sería mínimo. Cuando hay "sospechas" puede tardar un poco más... Me parece > que así mantendrías un muy buen nivel de performance sin el compromiso que > hay que aceptar cuando incorporás alguna heurística. Es muy difícil decidir > alguna heurística que sirva, y peor aún, varía mucho entre distintos casos. > Como ejercicio estaría bueno hacerlo configurable (el hashing por > "niveles", digo). Por ejemplo, que si lo configurás con > > niveles = [ 64 ] > > hashee apenas los 64kb primeros de cada archivo, y recién en una segunda > instancia los archivos completos para despejar las dudas (sólo si coincidió > el hash de primer nivel con algún otro, hasheo el archivo completo). > Pero si lo configurás con > > niveles = [ 64, 10240 ] > > primero intente con 64kb, luego si hay sospechas con 10mb y recién si > todavía pueden llegar a ser iguales con los archivos completos (esto > serviría para el caso de tener muchos archivos muy grandes pero con > probabilidad de que tengan un comienzo igual, se me ocurre que no es tan > loco). > > Lo que hay que mantener es siempre todos los niveles de hash calculados > (para comparar también incrementalmente) para todos los archivos (acá se cae > el uso de un Hash, al menos como está usado actualmente). > > Por otro lado, si un hash (de primer nivel) da igual, pero las longitudes > de los archivos son distintas, descartarlo (en este caso, tampoco sirve un > Hash, al menos como está planteado), considerarlos archivos distintos (esto > implicaría que en el caso de que tengas dos archivos uno siendo el otro > truncado los consideraría distintos, cosa que de la otra forma se podría > llegar a manejar). > > O quizá sea hora de largar la paja mental... :) > > On 9/1/07, nelson fernandez <[EMAIL PROTECTED] > wrote: > > > > Porque en vez de hacer un hash de 'todos' los archivos no solo hacerlo > > de los que se podrian 'parecer' ?... agregarle más inteligencia al > > algoritmo de búsqueda. > > > > por ejemplo, ver si hay 2 nombres iguales de archivos y usar el método > > de hash para resolverlo. pero si los nombres son distintos y las > > extensiones son distintas (comparar un ubuntu.iso con > > mafalda_naked.jpg tiene sentido ?) no compararía. luego por cada grupo > > de archivos (agrupados por extensiones ?) se podría usar el algoritmo > > de levenshtein [1][2] para ver si tienen nombres parecidos y solo con > > los que se acerquen mucho usar el método de calcular el hash. > > me parece que en lotes grandes vas a obtener mejores resultados > > > > [1] http://www.merriampark.com/ld.htm > > [2] http://rubyforge.org/projects/text > > > > > > -- > > :: nelson :: > > artesano de software > > http://netflux.com.ar > > _______________________________________________ > > Ruby mailing list > > [email protected] > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > >
-- Martín Sagastume 094-575846 Montevideo - Uruguay http://musicapastillera.blogspot.com
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
