Optimización del algoritmo recursivo en Java

También debe memorizar flos primeros 2 argumentos (el tercero siempre se pasa, por lo que no debe preocuparse por eso). Esto reducirá la complejidad temporal de su código de O (2 ^ n) a O (n).

Respuesta 1

ACTUALIZADO:

Como se comenta a continuación, no se puede utilizar el orden para ayudar a optimizar otro método. Dado que la mayoría de los valores de P se calcularán varias veces (y como se señaló, esto es costoso), una optimización sería almacenarlos en caché. No estoy seguro de cuál sería la mejor clave, pero podrías imaginar cambiar el código de la siguiente manera:

....
private Map<String, Double> previousResultMap = new ....


private Double p(DataPoint right, Event rightEvent, DataPoint left, Event leftEvent) {
   String key = // calculate unique key from inputs
   Double previousResult = previousResultMap.get(key);
   if (previousResult != null) {
      return previousResult;
   } 

   // do some stuff
   previousResultMap.put(key, result);
   return result;
}

Este enfoque debería reducir efectivamente muchos de los cálculos redundantes; sin embargo, como conoce los datos mucho más que yo, deberá determinar la mejor manera de establecer la clave (e incluso si String es la mejor representación para eso).

Respuesta: 2

Mi clase de árbol: clase pública BT <E> {valor E; BT <E> izquierda, derecha; BT público (valor E) {this.value = value; } público BT (valor E, BT izquierda, BT derecha) {...

Soy un principiante de Java y estoy teniendo problemas con una simple animación de swing que creé. La animación se retrasa cuando se ejecuta a menos que ocurra algo más, como el movimiento del mouse o una tecla presionada. ...

Estamos utilizando Spring Batch para algunas operaciones de back-end. Necesitamos conocer la forma auténtica de 1) ¿Cómo cerrar con gracia un proceso por lotes de primavera en ejecución? 2) Cómo asegurarse de que un lote de primavera en particular ...

Necesito sumar todos los bytes de datos en ByteArrayOutputStream, agregando +1 al resultado y tomando los 2 bytes menos significativos. int checkum = 1; para (byte b: byteOutputStream.toByteArray ()) {...