1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Abschätzen von Laufzeiten

  • Roflkopf
  • 10. Juli 2015 um 13:18
  • Unerledigt
  • Roflkopf
    2
    Roflkopf
    Mitglied
    Punkte
    40
    Beiträge
    6
    • 10. Juli 2015 um 13:18
    • #1

    Hi zusammen,

    bin gerade dabei für Programmiertechnik zu lernen und bin jetzt bei der Komplexitätsanalyse angelangt. Habe allerdings große Probleme damit, die Laufzeit von Funktionen richtig abzuschätzen.
    Folgendes Beispiel:

    Code
    Set<Integer> fun(List<Integer> 1) {
         Set<Integer> s = new TreeSet<Integer>();
         for (int x : 1)
              s.add(x);
         return s;
    }


    Die Funktion schreibt alle Elemente der Liste 1 in die neue Menge s und gibt diese zurück.
    Nun soll die Laufzeit T(n) (worst case) abgeschätzt werden. n ist dabei die Größe der Liste 1.
    Ich hätte jetzt die Laufzeit T(n) = O(n) abgeschätzt, aber laut Lösungen ist die Laufzeit T(n) = O(n*log(n)).
    Kann mir jemand erklären, wie man auf diese Laufzeit kommt?

    MfG
    Roflkopf

  • maethor
    3
    maethor
    Mitglied
    Reaktionen
    1
    Punkte
    86
    Beiträge
    12
    • 10. Juli 2015 um 13:49
    • #2

    Auf den ersten Blick ist n mal richtig.
    Wieso? --> n schleifen durchläufe.
    Das ist aber nur ein Teil der Laufzeit.
    In jedem Schleifendurchlauf wird das jeweilige Element in das TreeSet eingefügt.
    Du hast also Teta(n) (es sind ja genau n Elemente) * O(einfügen in den Tree)
    das ergibt O(n*log n)
    ist das halbwegs verständlich?

  • Roflkopf
    2
    Roflkopf
    Mitglied
    Punkte
    40
    Beiträge
    6
    • 10. Juli 2015 um 16:48
    • #3

    Ok, also das mit den n Schleifendurchläufen war ja genau mein Gedanke. Dass das Einfügen auch noch Laufzeit kostet, habe ich wohl irgendwie verdrängt.
    Trotzdem bleibt es mir unklar, warum das Einfügen log(n) ist...

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 10. Juli 2015 um 19:17
    • #4

    Weil es sich wahrscheinlich um einen binären Baum handelt. Du traversierst den Baum Ebene für Ebene und entscheidest, ob du nach links oder nach rechts gehst. Wenn der Baum noch kein Item enthält, ist die Laufzeit für das Einfügen gleich 0, bei einem Item 1, bei zwei Items 1 bis 2, bei drei Items 2, bei vier Items 2 bis 3 usw. (mach dir eine Skizze, um es zu veranschaulichen). Die Laufzeit ist immer ungefähr gleich dem dualen Logarithmus der bereits eingefügten Anzahl von Items. So kommt insgesamt n * log n zustande. Es ist eine sehr grobe Abschätzung, vergiss nicht, dass die Big-O-Notation ja bedeutet, dass die tatsächliche Laufzeit bis zu einem (konstanten) Vielfachen des in den Klammern angeführten Terms betragen kann!

  • Roflkopf
    2
    Roflkopf
    Mitglied
    Punkte
    40
    Beiträge
    6
    • 10. Juli 2015 um 19:51
    • #5

    Top, jetzt hab ich's verstanden!
    Danke euch beiden für eure Antworten, hat mir sehr weitergeholfen! :)
    Jetzt muss ich in der Klausur nur noch selbst drauf kommen :face_with_tongue:

    Danke nochmal und Mfg
    Roflkopf

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung