Our question - RISC-Linz

Werbung
Formale Grundlagen der
Wirtschaftsinformatik
Nikolaj Popov
Research Institute for Symbolic Computation
[email protected]
Komplexität
Komplexität
• Die Komplexität eines Algorithmus ist die
Abschätzung des Aufwandes seiner
Realisierung bzw. Berechnung auf einem
Computer.
• Komplexität wird daher auch rechnerische
Komplexität (computational complexity)
genannt.
Komplexität
• Die algorithmische Komplexität eines Problems
ist also die "Geschwindigkeit" die ein optimaler
Algorithmus für dieses Problem im
schlechtesten Fall (worst case) benötigt.
Komplexität
• Beispiel:
Komplexität
• Die Effizienz eines Algorithmus ist seine
Sparsamkeit bezüglich der Ressourcen wie
Rechenzeit und Speicherplatz, die er zur Lösung
eines festgelegten Problems braucht.
• Dabei geht es einerseits darum für ein konkretes
Problem ein effizientes Verfahren anzugeben
und dann den Rechenaufwand zu analysieren.
Komplexität
• Dadurch erhält man sowohl einen Algorithmus
zur Lösung des Problems als auch eine obere
Schranke für die Komplexität des Problems.
• Es kann aber auch ein Berechnungsverfahren
geben, das schneller als der gefundene
Algorithmus ist.
Komplexität
• Man kann auch umgekehrt versuchen eine
untere Schranke für die Komplexität eines
Problems zu finden.
• Eine triviale untere Schranke für ein Problem
mit Eingabe der Grösse n ist n, da zumindest die
Eingabe gelesen werden muss.
Komplexität
• Definition: Es seien f, g: ℕ→ ℝ+ Funktionen.
• Es gilt f(n) = O(g(n)), wenn eine reelle Zahl
c > 0 und n0 ∈ ℕ existieren, sodass für alle
natürlichen Zahlen n ≥ n0 gilt
f (n) ≤ c . g(n)
Komplexität
• Definition: Es seien f, g: ℕ→ ℝ+ Funktionen.
• Es gilt f(n) =  (g(n)), wenn eine reelle Zahl
c > 0 und n0 ∈ ℕ existieren, sodass für alle
natürlichen Zahlen n ≥ n0 gilt
f (n) ≥ c . g(n)
Komplexität
• Die O-Notation erlaubt es, Algorithmen auf
einer höheren Abstraktionsebene miteinander zu
vergleichen.
• Algorithmen können mit Hilfe der O-Notation
unabhängig von Implementierungsdetails, wie
Programmiersprache, Compiler und HardwareEigenschaften, verglichen werden.
Komplexität
• Beispiel: T(n) = O(g(n)), wenn es c und n0 gibt,
so dass T (n) ≤ c . g(n) für alle n ≥ n0 .
Komplexität
• Beispiel: für T(n) = n2 +2n gilt T(n) = O(n2).
• Begründung: Sei c=3 und n0=1
2n + n2 ≤ 3n2
2n + n2 ≤ 2n2 + n2
2n ≤ 2n2
1≤ n
Komplexität
• Beispiel: für T(n) = n2 +2n gilt T(n) = O(n2).
• Die Funktion T(n) liegt
in der Komplexitätsklasse O(n2).
• Die Größenordnung der Funktion T(n) ist O(n2).
Komplexität
• Die O-Notation betont die dominante Größe
• Beispiel: 5n3 + 55n2 +66n +33 = O(n3).
• Die Funktion T(n) liegt
in der Komplexitätsklasse O(n2).
• Die Größenordnung der Funktion T(n) ist O(n2).
Komplexitätsklassen
Komplexitätsklassen
• Ein zentrales Thema der Komplexitätstheorie ist
die Stärke verschiedener Maschinenmodelle.
• Wir unterscheiden im wesentlichen die zwei
Klassen P und NP:
• P = Klasse aller Probleme, die durch
deterministische Algorithmen in polynomieller
Zeit lösbar sind.
Komplexitätsklassen
• NP = Klasse aller Probleme, die durch
nichtdeterministische Algorithmen in
polynomieller Zeit lösbar sind.
• Jeder deterministische Algorithmus ist auch
nichtdeterministisch, daher gilt P ⊆ NP.
Komplexitätsklassen
• Ein nichtdeterministischer Algorithmus für ein
Problem aus NP kann mit Hilfe eines
deterministischen Algorithmus mit
exponentiellem Zeitbedarf simuliert werden.
• Offensichtlich P ⊆ NP gilt. Bis jetzt ist nicht
bekannt, ob P = NP gilt.
Komplexitätsklassen
• Diese Frage wird das P–NP Problem genannt.
• Für viele Probleme ist bekannt, dass sie in NP
liegen, aber man kennt keine (deterministisch)
polynomiellen Algorithmen zur Lösung dieser
Probleme.
Komplexitätsklassen
• Definition: Seien L1 und L2 Sprachen.
• Dann heisst L1 auf L2 polynomiell reduzierbar,
falls es eine totale, mit polynomieller
Komplexität berechenbare Funktion f gibt
sodass für alle x gilt
x ∈ L1 ⇔
in Zeichen L1 ≤ p L2
f(x) ∈ L2
Komplexitätsklassen
• Falls L1 auf L2 polynomiell reduzierbar ist, dann
liegt L1 zumindest in der gleichen Klasse wie
L2.
• Lemma: Falls L1 ≤ p L2 und L2 ∈ P
(bzw. L2 ∈ NP), dann ist auch L1 ∈ P
(bzw. L1 ∈ NP)
Komplexitätsklassen
• Definition: Eine Sprache A heisst NP-hart, falls
für alle Sprachen L ∈ NP gilt: L ≤ p A .
• Definition: Eine Sprache A heisst
NP-vollständig, falls A NP-hart ist und A ∈ NP
gilt.
Komplexitätsklassen
• F: Wann ist ein Problem in P?
• A: Wenn es eine deterministische TM gibt, die
das Problem in Polynomialzeit entscheidet.
• D.h. es gibt ein Polynom p, so dass bei Eingabe
w mit |w| = n die TM maximal p(n) Schritte
macht und dann entscheidet, ob w in der
Sprache ist oder nicht.
Komplexitätsklassen
• F: Wann ist ein Problem in NP?
• A: Wenn es eine nichtdeterm. TM gibt, die das
Problem in Polynomialzeit entscheidet. Man
beachte, dass dafür nur verlangt wird, dass die
kürzeste Erfolgsrechnung innerhalb der
Zeitschranke ist.
Komplexitätsklassen
• F: Wann ist ein Problem NP-schwierig?
• A: Wenn sich jedes Problem r, das in NP liegt,
in deterministisch polynomieller Zeit auf p
reduzieren lässt.
Komplexitätsklassen
• F: Wann ist ein Problem NP-vollständig?
• A: Wenn es NP-schwierig ist und zusätzlich
noch selbst in NP liegt.
Komplexitätsklassen
• F: Was müssen wir machen, wenn wir ein
Problem als NP-vollständig nachweisen wollen?
• A: Zeigen, dass es in NP ist und zeigen, dass
jedes Problem aus NP sich auf dieses Problem
in Polynomialzeit reduzieren lässt.
Komplexitätsklassen
• F: Was wissen wir, wenn ein Problem
NP-vollständig ist?
• A: Wir wissen dann, dass es aller
Wahrscheinlichkeit nach nicht in P liegt.
Herunterladen