
Originariamente inviata da
jabjoint
Buonasera a tutti,
Ho provato a fare un confronto tra un programma creato da me ed uno ben noto: il "
Nashorn".
Non so se posso ottimizzare il mio Algoritmo:
- Infatti esso richiama ricorsivamente il
costruttore, e dai fatti, ossia dai tempi calcolati risulta ben più rapido per poche operazioni, ma ben più lento quando le operazioni aumentano (cicli for/while)
Ecco qui ad esempio, un confronto quasi equo per un valore di circa 50 cicli:
Se i cicli son minori, il mio algoritmo è più veloce ma nella situazione più conveniente di maggior numero(>50) inizia a decrescere in favore del Nashorn.
codice:
package run;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory;
import expression.*;
publicclass Run {
publicstaticvoid main(String[] args) {
NashornScriptEngineFactory nse = new NashornScriptEngineFactory();
ScriptEngine s = nse.getScriptEngine("Nashorn");
String expression = "10.6*(x - 15.0)*(x - 14.9)*(x - 14.8)/((15.2 - 15.0)*(15.2 - 14.9)*(15.2 - 14.8))+20.6*(x - 15.0)*(x - 14.9)*(x - 14.8)/((5.2 - 15.0)*(5.2 - 14.9)*(15.2 - 14.8))";
Bindings b = s.createBindings();
Object result = null;
try {
longtimeX = System.currentTimeMillis();
for(intx=0; x<5; x++) {
b.put("x", x);
result = s.eval(expression, b);
}
System.out.println(result);
longtimeY = System.currentTimeMillis();
longdt = timeY-timeX;
System.out.println("Tempo impiegato: " + dt);
} catch (ScriptException e) {
e.printStackTrace();
}
longtimeX = System.currentTimeMillis();
ValuteExpression ve = new ValuteExpression(expression);
ve.setVariable("x");
for(intx=0; x<5; x++) {
ve.put(x);
result = ve.solveExp();
}
System.out.println(result);
longtimeY = System.currentTimeMillis();
longdt = timeY-timeX;
System.out.println("Tempo impiegato: " + dt);
}
}
Concludo che ricreare una risorsa come una classe(ricorsione) consuma molto, o sono altre qui le motivazioni?
Avete idee per migliorare?