Denden87 Geschrieben 17. September 2015 Teilen Geschrieben 17. September 2015 Einen schönen guten Tag wünsche ich euch allen, ich habe noch eine offene Frage, wo ich mir nicht so sicher bin. Ich soll die Laufzeitkomplexität herausfinden. void func( int n ) { int h = 1; while ( h <= n ) { c= c + h; h= h * 2; }} Würde dann hier T(n) = 1*n+3 also O(n) rauskommen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 17. September 2015 Teilen Geschrieben 17. September 2015 Hi, deine Rechnung verstehe ich nicht ganz, aber meiner Meinung nach ist es sogar O(log_n). N wäre es, wenn n=10 ist und es 10 Berechnungen gäbe, was aber nicht der Fall ist. Die Variable "c" ist egal, aber da "h" ja bei jedem Durchgang verdoppelt wird, verringert sich dadurch die Laufzeit, weil die Bedingung schneller erfüllt ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Denden87 Geschrieben 17. September 2015 Autor Teilen Geschrieben 17. September 2015 was wäre hier die T(O)? :-/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 17. September 2015 Teilen Geschrieben 17. September 2015 Was meinst du mit T? Versuchst du, das Master-Theorem anzuwenden? Hast du bemerkt, dass die Funktion nicht rekursiv ist? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Denden87 Geschrieben 17. September 2015 Autor Teilen Geschrieben 17. September 2015 T(n) ist Aufwandfunktion Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Denden87 Geschrieben 17. September 2015 Autor Teilen Geschrieben 17. September 2015 Hi, deine Rechnung verstehe ich nicht ganz, aber meiner Meinung nach ist es sogar O(log_n). N wäre es, wenn n=10 ist und es 10 Berechnungen gäbe, was aber nicht der Fall ist. Die Variable "c" ist egal, aber da "h" ja bei jedem Durchgang verdoppelt wird, verringert sich dadurch die Laufzeit, weil die Bedingung schneller erfüllt ist. Also würde dann T(n)=1+2log(n) ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 17. September 2015 Teilen Geschrieben 17. September 2015 Hi, so würde ich das sehen: Du hast eine Operation die nur einmal ausgeführt wird (h = 1) , und zwei die eben solange ausgeführt werden, wie die Bedingung erfüllt ist. Also quasi 2 * ((((n/2)/2)/2)....), was eben der Logarithmus zur Basis 2 von n ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.