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

Unterscheidung der Komplexität von zwei Algorithmen

  • Blubberblase
  • 6. Januar 2008 um 14:50
  • Unerledigt
  • Blubberblase
    4
    Blubberblase
    Mitglied
    Punkte
    100
    Beiträge
    14
    • 6. Januar 2008 um 14:50
    • #1

    Hallo Forum!
    Ich habe die Laufzeiten zweier Algorithmen in Abhängigkeit von der Eingabegröße gemessen und die Messwerte anschließend in einem Diagramm abgetragen (und jeweils eine Kurve generiert).
    Die Kurve von Algorithmus 1 wächst steiler als von Algorithmus 2 (beide Algorithmen haben eine kubische Komplexität).

    Beim Ausrechnen der Komplexität gibt es ja einen konstanten Faktor c, der hardwarespezifisch ist. Je nach Prozessor kann ein Algorithmus ja schneller oder langsamer laufen und das c kann somit kleiner oder größer sein.
    Algorithmus 1 und 2 wurden jeweils unter selben Bedinungen gemessen. Der hardwarespezifische Faktor c müsste also bei beiden gleich sein. Da Algorithmus 1 jedoch schneller wächst (meinetwegen 3n^3) als Algorithmus 1(z.B. 1n^3), kann man doch behaupten, dass die Komplexität von Algorithmus 1 größer ist als von Algorithmus 2, oder? Ich habe bis jetzt immer nur gesehen, dass die Komplexität durch den Exponenten festgelegt wird. Dann wäre sie ja bei beiden Algorithmen gleich...

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 6. Januar 2008 um 15:06
    • #2

    Der Faktor 3 ist nur eine Beobachtung, könnte auf anderer Hardware, mit anderem Compiler,... anders aussehen.
    Die Komplexität ist interessanter und auch eindeutig zu bestimmen. Dabei geht es nur um die Größenordnung, welche hier gleich ist. Der Faktor ist egal.

  • Blubberblase
    4
    Blubberblase
    Mitglied
    Punkte
    100
    Beiträge
    14
    • 6. Januar 2008 um 15:27
    • #3

    Okay, bei den Messungen mag das vllt. nicht funktionieren.
    Ich habe durch Berechnungen folgendes festgestellt:

    Sei B als Blockgröße definiert. (Größe einer Speicherzelle).

    Es werden genau (1/B) * N^3 Operationen ausgeführt.

    Die Laufzeit hat also die Komplexität von:

    c * (1/B) * N^3

    Nun bringe ich 1/B einfach in den Exponenten.
    1/B = N^(log von 1/B zur Basis N)

    Einsetzen:

    c * N^(log von 1/B zur Basis N) * N^3

    Zusammenfassen:

    c * N^(3 + log von 1/B zur Basis N)

    EDIT: Vereinfacht: c * N^(3 - log von B zur Basis N)

    Leider weiß ich nicht ganz wie ich das N aus dem exponenten bekomme aber damit kann ich doch zeigen, dass für große Blockgrößen (z.B. 64 Bit) die Komplexität verringert werden kann(denn die Ordnung verringert sich ja), oder?

    Beispielrechnung für N = 800

    Ohne Faktor (1/B): N^3

    Mit Faktor (1/B): N^2,48

    Wenn ich also nachweisen möchte, dass die Komplexität durch einen Faktor gesenkt wird, sollte ich dann diesen Faktor einfach in den Exponenten bringen um so den Unterschied in der Ordnung nachzuweisen, statt den Faktor vor das N zu schreiben?

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    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

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung