Was ist eine naive Methode?


Antworten:


15

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(n1)+Fib(n2)

def Fib(n):
  if n <= 1:
    return 1
  else:
    return 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)(weil Fib(7)Anrufe Fib(6)und Fib(5)und Fib(6)Anrufe Fib(5)und Fib(4), und beide Male nennen wir Fib(5)es Anrufe Fib(4)und Fib(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.


0

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


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.