Hay una secuencia de comandos llamada svnmerge.py que estoy tratando de modificar y optimizar un poco. Aunque soy completamente nuevo en Python, no es fácil.Cómo optimizar las operaciones en grandes (75,000 elementos) conjuntos de booleanos en Python?
El problema actual parece estar relacionado con una clase llamada RevisionSet
en el script. En esencia, lo que hace es crear una gran tabla hash (?) De valores booleanos de enteros. En el peor de los casos, uno para cada revisión en nuestro repositorio SVN, que ahora está cerca de 75,000.
Después de eso, realiza operaciones de conjunto en tales matrices enormes: suma, resta, intersección, etc. La implementación es la implementación más simple de O (n), que, naturalmente, se vuelve bastante lenta en tales conjuntos grandes. Toda la estructura de datos podría optimizarse debido a que existen largos períodos de valores continuos. Por ejemplo, todas las claves de 1 a 74,000 pueden contener true
. También el script está escrito para Python 2.2, que es una versión bastante antigua y estamos usando 2.6 de todos modos, por lo que también podría haber algo que ganar allí.
Podría tratar de improvisar esto, pero sería difícil y tomaría mucho tiempo, sin mencionar que ya podría estar implementado en alguna parte. Aunque me gustaría la experiencia de aprendizaje, el resultado es más importante en este momento. ¿Qué sugieres que haga?
¿Qué operaciones desea realizar en la lista de booleanos? ¿Te ayudaría un conjunto nudoso de booleanos? – eumiro
Esta implementación del conjunto parece que es O (n), no O (n * m). 'if r in rs' donde' rs' es un dict es una operación O (1), no O (len (rs)). –
@Baffe Boyois - cierto, ahora que lo pienso. Se corrigió el texto de la pregunta. –