Praktische Grenzen der Berechenbarkeit - Informatik

Praktische Grenzen der Berechenbarkeit - Informatik Praktische Grenzen der Berechenbarkeit - Informatik

informatik.bildung.rp.de
von informatik.bildung.rp.de Mehr von diesem Publisher
05.08.2013 Aufrufe

Dabei bezeichnet ggt(n, a) den größten gemeinsamen Teiler und J(a, n) die Jacobifunktion, die wie folgt rekursiv definiert ist: ⎧ 1 falls a = 1 ⎪⎨ J J(a, n) = ⎪⎩ a 2 , n falls a mod 2 = 0 und n2−1 8 mod 2 = 0 −J a 2 , n falls a mod 2 = 0 und n2−1 8 mod 2 = 0 J(n mod a, a) falls a mod 2 = 0 und (a−1)·(n−1) 4 mod 2 = 0 −J(n mod a, a) falls a mod 2 = 0 und (a−1)·(n−1) 4 mod 2 = 0 . Ist n jedoch keine Primzahl, so ist für mindestens die Hälfte der möglichen Werte für a mindestens eine der beiden Bedingungen nicht erfüllt. Daraus lässt sich der in Abbildung 21 angegebene Algorithmus konstruieren, der eine ungerade natürliche Zahl n daraufhin testet, ob sie eine Primzahl ist oder nicht. Ist n eine Primzahl, so erkennt der Algorithmus dies immer korrekt. Ist n keine Primzahl, so erkennt er das manchmal nicht. Die Wahrscheinlichkeit für ein falsches Ergebnis beträgt 1 2x. Für x = 20 ist das bereits weniger als ein Millionstel. Die Zuverlässigkeit des Algorithmus kann über den Parameter x also beliebig erhöht werden — allerdings zu Lasten der Laufzeit. Algorithmus Prim (Gegeben: eine ungerade natürliche Zahl n und eine natürliche Zahl x) begin i←1 prim←true while i≤x and prim=true do a←random(n) if ggt(a,n)= 1 or a^((n-1)/2) mod n=J(a,n) then prim←false i←i+1 if prim=true then Ausgabe: n ist Primzahl else Ausgabe: n ist keine Primzahl end Abbildung 21: Probabilistischer Algorithmus Prim Dieser letzte Abschnitt hat gezeigt, dass es oft Wege gibt, mit NP–vollständigen Problemen in der Praxis fertig zu werden. Andererseits kann für viele NP– vollständige Probleme bewiesen werden, dass es unmöglich ist, eine akzeptable Näherungslösung zu finden — es sei denn, es gilt P = NP. 38

Literatur — Dewdney A. K.: The (new) Turing Omnibus. New York: Henry Holt and Company 2001 — Engelmann L. (Hrsg.): Kleiner Leitfaden Informatik und ihre Anwendungen. Berlin: Paetec, Ges. für Bildung und Technik 2000 — Gasper F., Leiß I., Spengler M., Stimm H.: Technische und theoretische Informatik. München: Bayerischer Schulbuch-Verlag 1992 — Goldschlager L., Lister A.: Informatik: eine moderne Einführung. München, Wien: Carl Hanser Verlag 1990 — Gumm H.-P., Sommer M.: Einführung in die Informatik. München: Oldenbourg Wissenschaftsverlag 2002 — Knuth D. E.: The Art of Computer Programming, 2. Ed., Vol. 1/Fundamental Algorithms. Reading (Mass.): Addison-Wesley Publishing Company 1973 — Knuth D. E.: The Art of Computer Programming, 2. Ed., Vol. 2/Seminumerical Algorithms. Reading (Mass.): Addison-Wesley Publishing Company 1981 — Knuth D. E.: The Art of Computer Programming, Vol. 3/Sorting And Searching. Reading (Mass.): Addison-Wesley Publishing Company 1973a — Mayr U.: Komplexität/NP–vollständige Probleme. Skript zum SIL-Kurs Informatik VI, ohne Datum — Rechenberg P.: Was ist Informatik? München, Wien: Carl Hanser Verlag 2000 — Schöning U.: Theoretische Informatik – kurzgefasst. Heidelberg, Berlin: Spektrum Akademischer Verlag 2001 — Socher R.: Theoretische Grundlagen der Informatik. München, Wien: Fachbuchverlag Leipzig im Carl Hanser Verlag 2003 39

Dabei bezeichnet ggt(n, a) den größten gemeinsamen Teiler und J(a, n) die Jacobifunktion,<br />

die wie folgt rekursiv definiert ist:<br />

⎧<br />

1 falls a = 1<br />

⎪⎨ J<br />

J(a, n) =<br />

⎪⎩<br />

a<br />

2 , n falls a mod 2 = 0 und n2−1 8 mod 2 = 0<br />

−J a<br />

2 , n falls a mod 2 = 0 und n2−1 8 mod 2 = 0<br />

J(n mod a, a) falls a mod 2 = 0 und (a−1)·(n−1)<br />

4 mod 2 = 0<br />

−J(n mod a, a) falls a mod 2 = 0 und (a−1)·(n−1)<br />

4 mod 2 = 0 .<br />

Ist n jedoch keine Primzahl, so ist für mindestens die Hälfte <strong>der</strong> möglichen Werte<br />

für a mindestens eine <strong>der</strong> beiden Bedingungen nicht erfüllt. Daraus lässt sich<br />

<strong>der</strong> in Abbildung 21 angegebene Algorithmus konstruieren, <strong>der</strong> eine ungerade<br />

natürliche Zahl n daraufhin testet, ob sie eine Primzahl ist o<strong>der</strong> nicht. Ist n eine<br />

Primzahl, so erkennt <strong>der</strong> Algorithmus dies immer korrekt. Ist n keine Primzahl,<br />

so erkennt er das manchmal nicht. Die Wahrscheinlichkeit für ein falsches Ergebnis<br />

beträgt 1<br />

2x. Für x = 20 ist das bereits weniger als ein Millionstel. Die<br />

Zuverlässigkeit des Algorithmus kann über den Parameter x also beliebig erhöht<br />

werden — allerdings zu Lasten <strong>der</strong> Laufzeit.<br />

Algorithmus Prim<br />

(Gegeben: eine ungerade natürliche Zahl n und eine natürliche Zahl x)<br />

begin<br />

i←1<br />

prim←true<br />

while i≤x and prim=true do<br />

a←random(n)<br />

if ggt(a,n)= 1 or a^((n-1)/2) mod n=J(a,n) then<br />

prim←false<br />

i←i+1<br />

if prim=true then<br />

Ausgabe: n ist Primzahl<br />

else<br />

Ausgabe: n ist keine Primzahl<br />

end<br />

Abbildung 21: Probabilistischer Algorithmus Prim<br />

Dieser letzte Abschnitt hat gezeigt, dass es oft Wege gibt, mit NP–vollständigen<br />

Problemen in <strong>der</strong> Praxis fertig zu werden. An<strong>der</strong>erseits kann für viele NP–<br />

vollständige Probleme bewiesen werden, dass es unmöglich ist, eine akzeptable<br />

Näherungslösung zu finden — es sei denn, es gilt P = NP.<br />

38

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!