Ich habe mich mit dynamischer Programmierung befasst und Folgendes gelesen:
Bei Verwendung einer naiveren Methode werden viele der Teilprobleme häufig generiert und viele Male gelöst.
Was ist eine naive Methode?
terminology
dynamic-programming
Chopper Draw Lion4
quelle
quelle
Antworten:
Es ist kein Fachbegriff mit einer genauen Bedeutung, es ist nur das englische Wort "naiv". In einem Informatikkontext bedeutet das Wort normalerweise so etwas wie "eines der Dinge, an die Sie zuerst denken würden, ohne jedoch eine weniger offensichtliche, aber wichtige Tatsache zu erkennen".
Wenn man zum Beispiel weiß, dass die Definition von Fibonacci-Zahlen , dann wäre eine "naive" Implementierung SeinFib(n)=Fib(n−1)+Fib(n−2)
Was ist das Problem? Wenn wir beispielsweise anrufen, werden am
Fib(7)
Ende immer wieder viele der gleichen Anrufe getätigt, z. B.Fib(4)
(weilFib(7)
AnrufeFib(6)
undFib(5)
undFib(6)
AnrufeFib(5)
undFib(4)
, und beide Male nennen wirFib(5)
es AnrufeFib(4)
undFib(3)
und so weiter).Hier wäre eine eher "ausgefeilte" als eine naive Lösung wie eine dynamische Programmierung und würde alle zusätzlichen Berechnungen vermeiden.
quelle
Im Allgemeinen können wir jedes Problem in NP in der Zeit durch rohe Gewalt lösen , was bedeutet, dass wir explizit alle Kandidaten für einen NP-Zeugen aufzählen, dessen Längenpolynom in der Eingabegröße . In diesem Zusammenhang kann die Methode "jede mögliche Lösung prüfen" als naiv angesehen werden.2Poly ( n ) n
quelle
Die naive Implementierung ist die Lösung, bei der sie unkompliziert und weniger schwierig wie möglich aussieht.
In einigen Fällen kann es sein, dass es kein gutes räumliches oder zeitliches Verhalten aufweist, wie die naive Implementierung der Fibonacci-Funktion (eher exponentiell als linear).
Aber in vielen Fällen kann es die meiste Zeit gut funktionieren. Mit dem naiven Ansatz ist also nichts falsch. Sie können dies in drei Schritten tun:
"Mach es möglich" (wie gewünscht) -> "Mach es elegant / schön" (Refactoring, besser lesbar) -> "Mach es schnell" (Leistungsoptimierung)
Für Programmiersprachen mit Traditionen der "Überentwicklung" wie Java würde ich jeden Tag die "einfachste Lösung" empfehlen.
quelle