[JAVA] Bloodys Mathe-/Optimierungsrunde

  • So, das ganze ist in die Main Methode verschoben und abgespeckt worden, mal sehen wie lange er braucht.

  • Man MUSS diese gleichung RÜCKWIRKEND lösen, ich hab da aber kein plan wie, denn über ausprobieren kommt man immer ans ziel ABER vlt. gehts ja mit anderen hilfmitteln aus dem allseitsbekanntem mathe unterricht. (Quadratische gleichung o.ä ich wei noch nicht ganz :D)

  • Nene, ausprobieren ist ausdrücklich erwünscht!


    Nur halt....relativ schnell soll das ganze funktionieren.



    Nochmal ein Tipp von meiner Seite: Jede Variablendeklaration, jede Variablenzuweisung, jede Variablenabfrage und jede Rechenoperation kostet Zeit.


    Wieso also zum Beispiel bei jedem Durchlauf 3^3 rechnen, anstatt einfach direkt 27 zu addieren? (Als Beispiel)

  • Das folgende Programm benötigt (auf meinem Rechner) um die 810 Sekunden, das entspricht 13,5 Minuten.


  • Ich vermute jetzt einfach mal, dass es aus 2 Gründen enorm langsam ist:


    -Du nutzt die Power Funktion, statt dir selbst eine zu schreiben und diese zu optimieren
    -Du schließt keine Zahl irgendwie aus, die auf jeden Fall zu groß ist



    Mit solchen Abfragen solltest du das Ganze auf jeden Fall unter 2 Minuten (bei ner vernünftigen CPU) bringen, danach gehts wirklich ans Eingemachte (und ist dann auch so langsam der Teil, wo ich selbst noch Hilfe brauche)

  • Neues Programm, neue Bestzeit 36 Sekunden:
    //edit: Mit hinzufügen von "if(finalValue > i) break;" noch 29 Sekunden:


  • Schöne Sache :)


    Jetzt ist der Punkt, an dem ich auch nicht so wirklich weiterkomme: 90% der Zeit, die die Sache verbraucht, geht für das Dividieren bzw die MOD Operation drauf. Ich bin seit gestern am Überlegen, wie man das umgehen kann, womit man das endgültig schnell haben sollte...

  • Ich habe es geschafft, mein Intel Core i3 braucht um die 5 Sekunden!
    Der folgende Code enthält die Main, eine zusätzliche Methode und eine Zeitauswertung:


  • Also, Ich habe mir gedacht ich gehe nicht von den Zahlen aus, sondern generiere die Zahlen selber. So erstellt jede for-Schleife eine neue Ziffer. Darrum kann Ich auch auf die Werte der letzten Ziffer zurückgreifen ohne Sie neu berrechnen zu müssen. Das ist alles...

  • Nicht so wie es auf der ersten Seite war, habs gerade mal implementiert, aber komme auch nur auf rund 22561ms, hätte jetzt nicht gedacht, dass es so extrem langsamer wäre.


    Dann will ich nichts gesagt haben :D

  • if(integer==1) return 1;
    if(integer==2) return 4;
    if(integer==3) return 27;
    if(integer==4) return 256;
    if(integer==5) return 3125;
    if(integer==6) return 46656;
    if(integer==7) return 823543;
    if(integer==8) return 16777216;
    if(integer==9) return 387420489;
    return 0;
    wäre das nicht theoretisch schneller?


    und statt < !=
    bsp: for(int i = 0; i != 10; i++)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen