Was folgt, ist mein Algorithmus, um dies in einer Zeit zu tun, von der ich glaube, dass sie ist, und mein Beweis dafür. Mein Professor ist anderer Meinung, dass es in läuft und denkt stattdessen, dass es in läuft . Alle Kommentare bezüglich des Beweises selbst oder des Stils (dh meine Ideen mögen klar sein, die Präsentation jedoch nicht).
Die ursprüngliche Frage:
Gegeben Zahlen, finden Sie die größte unter ihnen in der Zeit . Sie dürfen nichts anderes über annehmen .
Meine Antwort:
- Sortieren Sie die ersten Elemente des Arrays. Dies dauert , da dies vollständig von und nicht von abhängt .
- Speichern Sie sie in einer verknüpften Liste (unter Beibehaltung der sortierten Reihenfolge). Dies dauert aus dem gleichen Grund wie oben auch .
- Testen Sie für jedes andere Element im Array, ob es größer als das kleinste Element der verknüpften Liste ist. Dies dauert Zeit, da Vergleiche durchgeführt werden müssen.
- Wenn die Anzahl tatsächlich größer ist, löschen Sie das erste Element der verknüpften Liste (das niedrigste) und fügen Sie die neue Nummer an der Stelle ein, an der die Liste in sortierter Reihenfolge gehalten werden soll. Dies dauert da es durch eine Konstante ( ) oben begrenzt ist, da die Liste nicht wächst.
- Daher ist die Gesamtkomplexität für den Algorithmus .
Mir ist bewusst, dass die Verwendung eines rot-schwarzen Baums im Gegensatz zu einer verknüpften Liste in konstanter Hinsicht effizienter ist (da die konstante Obergrenze im Gegensatz zu und das Problem, einen Zeiger zu behalten Das unterste Element des Baumes (um die Vergleiche zu erleichtern) ist hervorragend machbar, es ist mir damals einfach nicht in den Sinn gekommen.
Was fehlt mein Beweis? Gibt es eine Standardmethode für die Darstellung (auch wenn sie falsch ist)?