¿Es este método más rápido que Math.random ()?

Soy un principiante y actualmente he comenzado a trabajar en un juego para Android que utiliza un algoritmo de optimización de enjambre de partículas. Ahora estoy tratando de optimizar mi código un poco y tengo un montón de Math.random () en for-loops que se ejecuta casi todo el tiempo. Así que estaba pensando en una manera de moverse y saltar todas las llamadas Math.random ().

Mediante el uso de un método como este:

float random[] = new float[100]; static int randomIndex=0; private float myRandom(){ if(randomIndex >= 99) randomIndex = 0; else randomIndex = randomIndex+1; return random[randomIndex]; } 

… y también hacer esto una vez cuando la actividad comienza:

 for (int i=0; i< 100; i++) random[i]=(float) Math.random(); 

Mi pregunta es si esto será mejor (más rápido) que usando Math.random ()? ¿Alguien tiene una mejor sugerencia de cómo hacer?

También me pregunto si alguien sabe algún buen sitio donde puedo leer más acerca de cómo escribir eficiente código java / android. Me temo que me gusta chuparlo.

Aprenda a confiar en la API de Java: es potente y rápido. "La optimización temprana es la raíz de todo mal." Haga que su programa funcione antes de empezar a preocuparse por cosas como esta.

Para su propósito sin embargo, podría establecer su mente a gusto para comparar su método vs Java en un bucle de decir 30 millones, a continuación, comparar los tiempos.

Por no mencionar el llenado de una matriz de 100 números al azar, a continuación, utilizarlo un millón de veces no es al azar en absoluto.

Eso sin duda será más rápido, pero no será "mejor" en el sentido de que no generará números aleatorios muy buenos. Tal vez eso está bien para su juego; Tal vez no lo es.

Hay algunas implementaciones drop-in de java.util.Random que probablemente sean rápidas. Usted podría comprobar hacia fuera la biblioteca de las matemáticas de Uncommons pero allí está limitado para ser otros hacia fuera allí también. Uncommons tiene el "XORShiftRNG" que está diseñado para ser rápido.

Tenga cuidado de no hacer ninguna optimización prematura: si Math.random es lo suficientemente rápido en la práctica, entonces no se moleste en encontrar un reemplazo. Tomar esta decisión sólo después de hacer algún análisis del tiempo real gastado en esa sección del código.

Aquí hay un artículo sobre la optimización http://www.javaworld.com/javaworld/jw-04-1997/jw-04-optimize.html?page=1

Lo que usted está hablando es hacer una tabla de búsqueda para sus números al azar. La mayoría de las veces esto es más rápido, pero en este caso también cambiará los resultados.

En general mi enfoque siempre es encontrar lo que está tomando más tiempo, e investigar lo más profundamente que puedo. Asegúrese de que no está haciendo trabajo redundante, y buscar las cosas que parecen extrañamente lento. El código optimizado tiende a pasar la mayor parte del tiempo en operaciones matemáticas básicas. Trate de seguir adelante hasta que parece que pasa la mayor parte de su tiempo en sólo las operaciones de matemáticas.

Su código está haciendo algo, y puede muy bien ser una mejor manera de hacerlo. Así que mantener un oído a la tierra para el mejor algoritmo.

Y tenga en cuenta, hay todo tipo de dispositivos Android por ahí. Será difícil optimizar para todos ellos. A veces usted tiene que tomar un pase sólido en la optimización y luego asumir que es tan bueno como va a conseguir y empezar a reducir la cantidad de trabajo que ocurre o decidir que no es posible.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.