Ich habe dieses Problem mit CLRS versucht (Seite 39, 2.3-4).
Wir können die Einfügesortierung als rekursive Prozedur wie folgt ausdrücken. Zum Sortieren sortieren
A[1... n]
wir rekursivA[1... n-1]
und fügen es dannA[n]
in das sortierte Array einA[1... n-1]
. Schreiben Sie eine Wiederholung für die Laufzeit dieser rekursiven Version der Einfügesortierung.
Die Wiederholung, die ich bildete, war
Meine Argumentation
- der Basisfall von Die Liste ist so sortiert, dass es keine Arbeit gibt, daher konstante Zeit.
- In allen anderen Fällen hängt die Zeit davon ab,
A[1...n-1]
ob die Sequenz sortiert und dann in diese Sequenz eingefügt wird. Daher sollte es ihre Summe sein, dh.
Ich wollte wissen, ob die Wiederholungsbeziehung korrekt ist. Wenn nicht, was sind die Fehler und wie kann eine Wiederholungsbeziehung richtig formuliert werden?
algorithm-analysis
runtime-analysis
recurrence-relation
sorting
Aseem Bansal
quelle
quelle
Antworten:
Gemäß der von Ihnen angegebenen Beschreibung ist die Wiederholung korrekt.
Sie könnten denken, es sollte
T (n) = sein
Da Sie die Einfügestelle mithilfe der Binärsuche finden können, müssen Sie im schlimmsten Fall alle Elemente entfernen, um das Element tatsächlich einzufügen.
quelle
O(n)
und durch binäre Suche ist esO(log n)
. Aber ist nicht der schlimmste Fall die Bewegung aller Elemente, die erforderlich sind,O(n)
um die Gesamtkomplexität zu erhöhenO(n)
? Warum ist der Begriff inn != 1
alsoO(log n)
statt zu seinO(n)
?