heapsort



  • hallo,

    hab grade bei wikipedia gelesen dass man einen heap mit O(n) bauen kann.
    wenn ich n-Elemente habe muss ich den heap doch n mal bauen.
    Nach meiner Rechnung ergibt das dann O(n*n).

    Aber tatsächlich ist es ja O(n*log n ) . Wo lieg ich falsch ?



  • Die Sortierung dauert O(n*log n), der Speicherverbrauch jedoch nur O(n).



  • blurry333 schrieb:

    hallo,

    hab grade bei wikipedia gelesen dass man einen heap mit O(n) bauen kann.
    wenn ich n-Elemente habe muss ich den heap doch n mal bauen.
    Nach meiner Rechnung ergibt das dann O(n*n).

    Aber tatsächlich ist es ja O(n*log n ) . Wo lieg ich falsch ?

    Aufbauen kannst du den Heap tatsaechlich in O(N). Anschliessend musst du N mal das groesste/kleinste Element entfernen O(1) und nachher die Heapordnung wieder herstellen O(log N).
    Ergibt in Summe O(N) + N*(O(1) + O(log N)) = O(N * log N)

    (EDIT: Klammer)



  • blurry333 schrieb:

    hallo,

    hab grade bei wikipedia gelesen dass man einen heap mit O(n) bauen kann.
    wenn ich n-Elemente habe muss ich den heap doch n mal bauen.
    Nach meiner Rechnung ergibt das dann O(n*n).

    Aber tatsächlich ist es ja O(n*log(n)) . Wo lieg ich falsch ?

    Du musst, nachdem du den Heap gemacht hast, n mal ein Element nach unten wandern lassen. Dieses Element wandert ungefähr O(log(n)) mal (weil es ja ein Baum ist).
    Also: n * O(log n) -> O(n * log(n))



  • Ist eigentlich der linke Kindknote größer als der rechte ?
    z.B.
    9
    / \
    1 7



  • blurry333 schrieb:

    Ist eigentlich der linke Kindknote größer als der rechte ?
    z.B.

    9
               /   \
              1      7
    

    Nö, gar nicht nötig.



  • hmm,

    aber so muss ich ja immer beide Kindknoten vergleichen.
    Wenn ich wüßte dass der linke größer ist , wäre es doch irgendwie einfacher ?



  • Aber die offizielle Heap Definition sieht das ja auch nicht vor,
    dass der linke Sohn größer sein muss als der rechte.

    Was bedeutet eigentlich Zeitkomplexität.
    Was beinhaltet das alles ? Neben Kopieraufwand auch Vergleiche ?



  • blurry333 schrieb:

    Was bedeutet eigentlich Zeitkomplexität.
    Was beinhaltet das alles ? Neben Kopieraufwand auch Vergleiche ?

    Ich würde sagen, Operationen.
    Ein Introsort mit Binary-Search, die eine Komplexität von O(log n) hat, hat trotzdem O(n²)


Anmelden zum Antworten