Título: Optimización programa básico Publicado por: HelThunder en 23 Octubre 2013, 19:05 pm public static int numeroDivisores(int n){
int n =0 ; for (int i=1;i<=n;++i){ if (n%i==0){ ++n; } } return n; } He hecho ese método para hallar el número de divisores de un número. Pero necesita hacerlo de alguna forma mejor que lleve menos tiempo para compilar. Ya que invoco muchas veces este método en otro método y con cifras grandes tarda mucho tiempo. ¿Alguien sabria alguna forma de optimizar este metodo? Un saludo, gracias. Título: Re: Optimización programa básico Publicado por: 1mpuls0 en 23 Octubre 2013, 20:32 pm Código
Título: Re: Optimización programa básico Publicado por: HelThunder en 23 Octubre 2013, 22:40 pm Muchísimas gracias Darhius, pero el nuevo método no me mejora el problema, me explico. Por lo que entiendo, tu codigo reduce el tiempo ya que descarta los numeros con pocos divisores ahorrando operaciones. Lo que pasa, es que en el programa en que utilizo este método, tengo que ir mirando los divisores de millones de numeros, y todos ellos son muy grandes, por lo que la condición que has puesto, tan apenas quita procesos.
Incluso tarda más el programa en ejecutarse. Los tiempos de ejecución han sido los siguientes; Aclaro que me refiero a la ejecución del programa completo, que invoca a este método y a otro.
No acabo de entender a que se debe esto siendo que independentientes, el 2º es más rapido. Muchas gracias ;) Título: Re: Optimización programa básico Publicado por: 1mpuls0 en 23 Octubre 2013, 23:19 pm Me imaginé que no solo era para contar los divisores.
Seguiré analizando una alternativa para ver que se puede hacer. Saludos. Título: Re: Optimización programa básico Publicado por: kaostias en 24 Octubre 2013, 18:35 pm Si los números que utilizas pueden repetirse y tienen alta tendencia a hacerlo, puedes crear una tabla hash que vaya guardando los resultados para cada número, la primera vez que lo ejecutes siempre hará el cálculo, pero a partir de ahí el acceso tiene coste constante.
Título: Re: Optimización programa básico Publicado por: egyware en 4 Noviembre 2013, 16:19 pm **coff** **coff*
Programación dinámica (http://es.wikipedia.org/wiki/Programaci%C3%B3n_din%C3%A1mica) **coff** **coff* |