Berechnen Sie die Anzahl der Zeiten, der durch zwei teilen

Grüße.

Ich habe eine java-Methode, die ich als teuer, und ich bin versucht zu ersetzen, einige Anrufe, um es mit einem mathematischen Ausdruck. Problem ist, ich bin Scheiße in Mathe. Ich meine wirklich saugen.

Folgende sollte erklären, die Muster, die ich versuche zu nutzen.

f(x)   -> y
f(x*2) -> f(x)+1

Ist, wenn ich den doppelten Wert für x der Wert für y wird 1 größer als für x/2.
Hier sind einige Beispiel-Ausgabe:

f(5)   -> 6
f(10)  -> 7
f(20)  -> 8
f(40)  -> 9
f(80)  -> 10
f(160) -> 11
f(320) -> 12

Mein Aktueller Ansatz ist brute-force. Wechsele ich über die X-und testen Sie, wie viele Male kann ich halbieren, bevor ich es erreichen, 5, und schließlich habe ich Sie 6. Das funktioniert und ist schneller als der Aufruf der original-Methode. Aber ich war auf der Suche nach einer "eleganten" oder potenziell billigere Lösung.

Akzeptierte Antwort geht an den einen, der es schafft, mir zu helfen, ohne Hinweis darauf, wie dumm ich bin 🙂

(der Titel wahrscheinlich saugt, weil ich nicht weiß, was ich Suche)

  • was ist f(0), f(1), f(2) f(3) f(4)?
  • In Ihrem Beispiel, was würden Sie definieren f(6) als Entsprechung von (zum Beispiel). Oder ist Ihre Funktion nur gültig für die Werte von x sind insbesondere ein Vielfaches von Ihr ab x?
  • Das klingt wie einige seltsame Arsch Logarithmus.
  • Tut f(15) = 16?
  • f(0) ist illegal. f(1)=4, f(2)=2, f(3)=8, f(4)=3
  • f(15) = 18

InformationsquelleAutor Ronnis | 2010-12-20
Schreibe einen Kommentar