Die Autoren geben die Antwort:
Der Fehler ist, dass wir die genaue Form der induktiven Hypothese nicht bewiesen haben , das heißtT.( n ) ≤ c n.
Zugegeben, das ist schwer zu verstehen, wenn Sie nicht an Induktionen gewöhnt sind (rechts), weil sie die Induktion nicht explizit / rigoros machen. Kurz gesagt: Sie müssen eine Konstante habenc für alle n, aber dieser (un) Beweis konstruiert viele (eine pro n).
Erinnern Sie sich lange an was T.( n ) ∈ O ( n ) meint:
∃ c ∈ N .∃n0∈ N .∀ n ≥n0.T.( n ) ≤ c n
oder äquivalent,
∃ c ∈ N .∀ n ∈ N T.( n ) ≤ c n.
Die zweite Form funktioniert besser für eine Induktion, da Sie den Anker kennen. Sie brauchen also eine Konstantecdas bietet eine Obergrenze für alle n.
Lassen Sie uns untersuchen, was die Induktion bewirkt:
- Induktionsanker: Der Anker von T. ist nicht explizit angegeben, aber es ist konstant, so dass wir eine geeignete finden c.
- Induktionshypothese: Es gibt einige c damit T.( k ) ≤ c n für alle k ≤ n, für einige willkürlich aber fest n.
- Induktiver Schritt: Wie in der Frage gezeigt, konstruieren d> c damit T.( n + 1 ) ≤ dn.
Tatsächlich konstruieren wir also für jeden eine neue Konstanten. Das passt nicht zur Definition vonÖüberhaupt! Und schlimmer noch, es ist völlig bedeutungslos: Jede Funktion kann durch jede andere Funktion "begrenzt" werden, wenn Sie den Faktor mit einstellen könnenn.
In Bezug auf den Induktionsnachweis, c muss Teil des Anspruchs sein (und es ist in der versteckt Ö), das ist "außerhalb" der Induktion gebunden. Dann das gleicheczeigt sich in Anker, Hypothese und Schritt. Ein Beispiel finden Sie im letzten Teil dieser Antwort .