Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » rekursiv

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
24.09.2002, 08:00 Uhr
virtual
Sexiest Bit alive
(Operator)


Der qsort ist nicht schnell, weil er rekursiv ist. Der qsort ist rekursiv und schnell. Man kann ihn auch iterativ implementieren und er bleibt schnell.
Unter www.google.de/search?q=quicksort+iterativ&hl=de&lr=&ie=UTF-8&start=0&sa=N wirst Du wohl fündig werden
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
24.09.2002, 09:13 Uhr
~0xdeadbeef
Gast


Hmmm...ok, du hast recht. Mit nem Stack kriegt man das hin.
Allerdings geht dabei der Vorteil einer iterativen Lösung verloren. Im Grunde ersparst du damit nur dem Comiler etwas Arbeit...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.09.2002, 10:21 Uhr
virtual
Sexiest Bit alive
(Operator)


Es geht mir nicht darum zu behaupten, daß eine iterative Lösung besser sei, sie ist eben einfach nur möglich. Ich denke, dass es Vor- und Nachteile gibt, die von der Problemstellung abh.
Wenn die Problemstellung sich nur mit Mühe in einen iterativen Algo umsetzen läßt, der letztlich schwerer zu verstehen ist, würde ich einen rekursiven Ansatz vorziehen. Wenn der Algo jetzt besonders schnell sein muss und der Overhead eines rekursiven Funktionsaufrufs sehr teuer ist (im Verhältnis zum Rest der Funktion), vielleicht eher die iterative Variante.

Bei Fibonacci ist zB der Algo leicht durchschaubar, wenn er Rekursiv implementiert ist:

C++:
unsigned fibonacci(unsigned n)
{
    if (n<3) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}


Aber der Overhead des Funktionsaufrufe ist fast unerträglich hoch. Dann schon eher was iteratives der Form:

C++:
unsigned fibonacci(unsigned n)
{
    unsigned n1 = 1;
    unsigned n2 = 1;
    unsigned s = 1;

    for(unsigned i=3; i<=n; ++i)
    {
        s = n1+n2;
        n1 = n2;
        n2 = s;
    }
    
    return s;
}


Hier ist zwar der Rekursive Gedanke vom Fibonacci nicht klar erkennbar, aber die Funktion sollte deutlich schneller sein weil die Funktionsaufrufe teurer sind als die beiden zuweisungen an n1 und n2- (Frage: lauten die ersten Zahl der Fibonacci Folge wirklich 1 und 1, oder vertue ich mich da`?)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
27.09.2002, 16:06 Uhr
JWA



Also ich habe im Studium mal nen Algorithmus gelernt, mit dem man JEDE Rekursion in eine Iteration umwandeln kann.

Allerdings ware der sowas von kompliziert, dass ich den inzwischen wieder vergessen habe.
Aber er hat funktioniert.


Jürgen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
27.09.2002, 22:17 Uhr
Hans
Library Walker
(Operator)



Zitat:
JWA postete
Also ich habe im Studium mal nen Algorithmus gelernt, mit dem man JEDE Rekursion in eine Iteration umwandeln kann.

Allerdings ware der sowas von kompliziert, dass ich den inzwischen wieder vergessen habe.
Aber er hat funktioniert.



Hallo Jürgen,
weist Du zufällig noch, in welchem Informatikbuch man das auch nachlesen kann?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: