Ackermannfunktion

Wilhelm Ackermann

Die Ackermannfunktion ist eine 1926 von Wilhelm Ackermann gefundene, extrem schnell wachsende mathematische Funktion, mit deren Hilfe in der theoretischen Informatik Grenzen von Computer- und Berechnungsmodellen aufgezeigt werden können. Heute gibt es eine ganze Reihe von Funktionen, die als Ackermannfunktion bezeichnet werden. Diese weisen alle ein ähnliches Bildungsgesetz wie die ursprüngliche Ackermannfunktion auf und haben auch ein ähnliches Wachstumsverhalten.

Entstehungsgeschichte

1926 vermutete David Hilbert, dass jede berechenbare Funktion primitiv-rekursiv sei. Vereinfacht bedeutet dies, dass sich jede durch einen Computer berechenbare Funktion aus einigen wenigen, sehr einfachen Regeln zusammensetzen lässt und dass sich die Dauer der Berechnung im Voraus abschätzen lässt. Dies trifft auf nahezu alle in der Praxis vorkommenden Funktionen zu.

Ebenfalls 1926 konstruierte Ackermann eine Funktion, die diese Vermutung widerlegt, und veröffentlichte sie 1928.[1][2] Ihm zu Ehren wird diese Funktion heute Ackermannfunktion genannt. Sie kann von einem Computer in endlicher Zeit ausgewertet werden, ist aber nicht primitiv-rekursiv.

Ungefähr zur gleichen Zeit wie Ackermann publizierte G. Sudan ebenfalls ein Beispiel einer solchen Funktion.[2] 1935 konstruierte Rózsa Péter eine vereinfachte Version, die die gleichen Eigenschaften besitzt. Diese Funktion, gelegentlich auch als Ackermann-Péter-Funktion bezeichnet, wird heute vorwiegend benutzt.

Idee

Man betrachtet die Folge

Hierbei wird bei jedem Folgenglied die Operation des vorigen Folgenglieds -mal auf angewandt, also ist gerade , wobei die Variable -mal vorkommt und so weiter. Die Idee hinter der Ackermannfunktion ist es, diese Folge als Funktion aufzufassen.

Beispiel:

Setzt man in obiger Folge und , so erhält man die Folge:
die man auch die Ackermannfunktion zu und nennt. Die letztgenannte Zahl liegt bereits weit jenseits von allem Vorstellbaren.

Die Ackermannfunktion, notiert als , ist also eine Funktion, die die folgenden Gleichungen erfüllt:

Ab der vierten Zeile können die Funktionswerte nicht mehr mit herkömmlichen Operatoren formuliert werden; man braucht erweiterte Notationen, wie beispielsweise den Hyper-Operator.

Definition und Varianten

Die Ackermannfunktion definiert man üblicherweise rekursiv, d. h., man macht für einige Anfangswerte explizite Angaben und gibt eine Anleitung (das Rekursionsschema), wie man weitere Funktionswerte aus den bereits berechneten erhält.

Definition von Ackermann

Ackermann selbst definierte die Funktion auf recht umständliche Weise, gab aber kurz darauf die folgende äquivalente Definition an:

Dabei ist eine weitere Funktion, die Ackermann nicht weiter beschrieb. Sie liefert die Startwerte :

Beispiele:
  • Möchte man berechnen, so kann man die erste Zeile der Definition anwenden und erhält direkt: .
  • Möchte man berechnen, so kann man die zweite Zeile anwenden und erhält: .
  • Wenn weder das zweite noch das dritte Argument 0 ist, verwendet man die dritte Zeile der Definition. Beispiel: . Setzt man aus dem vorigen Beispiel ein, erhält man . Jetzt kann man wieder die dritte Zeile anwenden und dann zweimal die zweite. Alles zusammen ergibt:

Wenn man vom Wachstum der Ackermannfunktion spricht, meint man oftmals die Funktion .

Definition von Péter

Rózsa Péter definierte 1935 eine einfachere Version der Ackermannfunktion, die nur zwei Parameter besitzt und zudem ohne die Hilfsfunktion auskommt:[3]

Auch hier meint man im Zusammenhang mit Wachstumsuntersuchungen oftmals die Funktion , wenn man von der Ackermannfunktion spricht.

Aus dieser Definition ist nicht sofort ersichtlich, dass die Funktion für alle nicht negativen, ganzzahligen und definiert ist, da teilweise auch erhöht wird. Man kann aber erkennen, dass zum einen für wohldefiniert ist; zum anderen ist unter der Voraussetzung, dass wohldefiniert ist, auch wohldefiniert, indem man die letzten beiden Rekursionsvorschriften iterativ benutzt.

Zu beachten ist allerdings, dass es bei einer Verringerung von keine obere Schranke für das Wachstum von in den folgenden Funktionsaufrufen gibt.

Modifizierte Ackermannfunktion

Häufig werden in der Komplexitätsanalyse leicht modifizierte Versionen der Ackermannfunktion verwendet, die jedoch das gleiche asymptotische Laufzeitverhalten aufweisen. Eine dieser Varianten, die eine Interpretation als „verallgemeinerte Exponentialfunktion“ erlaubt, kann wie folgt angegeben werden:[4]

Die so definierte Folge von Funktionen kann nun zu der Definition der modifizierten Ackermannfunktion verwendet werden, indem man

setzt.

Die Funktionen können nun als natürliche Fortsetzung der Addition, Multiplikation und Potenzierung interpretiert werden. So repräsentiert beispielsweise die -fache Addition der Zahl , die -fache Multiplikation der Zahl usw. Es gilt

Bedeutung in der theoretischen Informatik

Wie eingangs schon erwähnt, erfand Ackermann diese Funktion als Beispiel einer Funktion, die nicht primitiv-rekursiv, aber berechenbar ist.

Auf der Suche nach den Grenzen von Computern stößt man sehr schnell auf den Begriff der berechenbaren Funktionen. Das sind all die Funktionen, für deren Auswertung man einen Algorithmus angeben kann, also alle Funktionen, die ein Computer (insbesondere eine Turingmaschine) berechnen kann. Diese Definition stellt einen sehr schnell vor ein Problem, wenn man von einer konkreten Funktion entscheiden möchte, ob sie berechenbar ist. Findet man einen Algorithmus, der die Funktion berechnet, so ist sie offensichtlich berechenbar. Andernfalls ist ungewiss, ob die Funktion wirklich nicht berechenbar ist oder ob es zwar einen Algorithmus gibt, man ihn aber nicht gefunden hat.

Aus diesem Grund sucht man nach alternativen Definitionen, mit denen man einen solchen Nachweis einfacher führen kann. Ein erster Ansatz hierfür waren die primitiv-rekursiven Funktionen. Dies sind Funktionen, die sich durch einige wenige Regeln aus sehr einfachen Funktionen zusammensetzen lassen.

Einige Zeit vermutete man, dass alle berechenbaren Funktionen primitiv-rekursiv sind, mit den primitiv-rekursiven Funktionen also ein Werkzeug zur Lösung des oben geschilderten Problems gefunden sei. Diese Hoffnung zerstörte jedoch die Ackermannfunktion, von der man nachweisen kann, dass sie berechenbar, aber nicht primitiv-rekursiv ist. (Siehe nachfolgender Beweis.)

Führt man auf der Klasse der primitiv-rekursiven Funktionen eine weitere Konstruktionsregel, die sogenannte µ-Rekursion, ein, erhält man eine größere Klasse ebenfalls berechenbarer Funktionen, die die Ackermannfunktion enthält. Man nimmt an, dass diese Klasse der µ-rekursiven Funktionen der Klasse der intuitiv berechenbaren Funktionen entspricht (Church'sche These).

Beweis

Der Beweis, dass die Ackermannfunktion berechenbar ist, aber nicht primitiv-rekursiv, nutzt im Wesentlichen aus, dass die Ackermannfunktion stärker wächst als jede primitiv-rekursive Funktion.[5]

Beweisskizze zur Behauptung, dass die Ackermannfunktion nicht primitiv-rekursiv ist:

  • Als erstes definiert man zu jeder primitiv-rekursiven Funktion die Funktion
    .
    Diese Funktion gibt das Maximum an, das man mit erreichen kann, wenn die Summe der Argumente nicht überschreitet.
  • Sodann zeigt man durch strukturelle Induktion über den induktiven Aufbau der primitiv-rekursiven Funktionen, dass es zu jeder primitiv-rekursiven Funktion eine natürliche Zahl gibt, sodass für alle gilt: . Anschaulich zeigt dies, dass die Ackermannfunktion stärker wächst als jede primitiv-rekursive Funktion.
  • Damit beweist man dann wie folgt, dass die Ackermannfunktion nicht primitiv-rekursiv ist:
    Angenommen, wäre primitiv-rekursiv, dann auch . Nach der Vorbemerkung gibt es aber ein , sodass für alle gilt . Setzt man hier , so erhält man den Widerspruch:

Anwendungen

Für die Ackermannfunktion gibt es nur sehr wenige Anwendungen. Die zwei wichtigsten sind Benchmarktests für rekursive Aufrufe in Programmiersprachen und Laufzeitabschätzungen der gewichteten Vereinigung und Pfadkompression bei der Union-Find-Struktur.

Benchmark für rekursive Aufrufe

Bei der Einführung von neuen Programmiersprachen, Compilern und Computern möchte man deren Leistungsfähigkeit untersuchen. Dazu werden u. a. mittels Benchmarking durch spezielle Programme festgelegte Eigenschaften überprüft.

In diesem Zusammenhang wird die Ackermannfunktion gerne als Benchmark zur Überprüfung von rekursiven Prozedur-Aufrufen benutzt, da ein Programm zur Berechnung der Ackermannfunktion im Wesentlichen nur aus solchen Prozeduraufrufen besteht. In der Definition von Péter wird ja nur direkt berechnet. Die Schwierigkeit bei der Berechnung der Funktionswerte sind also nicht allein deren Größe, sondern die tiefe Verschachtelung der Funktionsaufrufe, die leicht zu einem Stapelüberlauf (engl. Stack Overflow) führt, also dazu, dass dem System der Speicher ausgeht. Die Ackermann-Funktion ist daher eine einfache und sichere Methode, einen Stapelüberlauf zu provozieren, beispielsweise um zu testen, ob dieser Fehlerfall bearbeitet wird und ggf. wie dies erfolgt. Die Ackermann-Funktion hat dabei den Vorteil, dass sie immun gegen Compiler-Optimierungen ist und auch statische Quellcode-Analysen den (möglichen) Stapelüberlauf praktisch nicht detektieren können.

Diese Idee geht zurück auf Yngve Sundblad, der 1971 die Funktion benutzte, um diverse Programmiersprachen zu vergleichen. Um zu berechnen, werden Aufrufe getätigt.

Sundblad testete unter anderem, wie groß gewählt werden kann, damit der Computer noch in der Lage ist, diese Zahl zu berechnen. Damals erreichte er . Zum Vergleich hierzu: Mit Java 1.4.2 und den Standardspeichereinstellungen erreicht man heutzutage .

Im Laufe der Berechnung werden viele identische Aufrufe mehrfach ausgerechnet. Ein intelligenter Compiler kann dies ausnutzen und die Ergebnisse zwischenspeichern, um solche Aufrufe nur einmal durchführen zu müssen. Damit waren schon 1971 Aufrufe bis durchführbar. Einen bedeutenden Zeitvorteil erhält man auch, wenn man direkt berechnet, statt es rekursiv zu zu expandieren. Die direkte Berechnung von erfordert lineare Zeit in . Die Berechnung von erfordert quadratische Zeit, denn sie führt zu (also für eine Konstante ; siehe Landau-Symbole) verschachtelten Aufrufen von für verschiedene . Die Berechnung von erfordert schließlich eine zu proportionale Zeit ().

Laufzeitabschätzungen mit der Umkehrfunktion

Da die Funktion sehr schnell wächst, wächst ihre Umkehrfunktion sehr langsam. Sie ist für jede praktisch vorstellbare Eingabegröße kleiner als 5, weil der Funktionswert größer als die Anzahl der Atome im Universum ist, wie die Berechnung von weiter unten zeigt. In der praktischen Analyse von Algorithmen kann sie also als konstant betrachtet werden.

Diese Umkehrfunktion taucht in der Laufzeitanalyse bestimmter Algorithmen auf, zum Beispiel beim Union-Find-Problem und in Chazelles Algorithmus für minimale Spannbäume. In diesem und anderen Zusammenhängen wird die ursprüngliche Ackermannfunktion oft durch Weglassen additiver Konstanten oder andere Modifikationen leicht umdefiniert zu einer Funktion mit ähnlichem asymptotischen Verhalten. Diese modifizierten Funktionen sind nicht gleich der Ackermannfunktion, aber nach den Maßstäben der Laufzeitanalyse können sie als äquivalent betrachtet werden.

Implementierung

Die rekursive Implementierung der Ackermannfunktion (hier in Pseudocode) entspricht direkt der Definition:

 function ack(n, m)
     if n = 0
         return m + 1
     else if m = 0
         return ack(n - 1, 1)
     else
         return ack(n - 1, ack(n, m - 1))

Etwas effizienter ist die folgende, teilweise iterative Implementierung:

 function ack(n, m)
     while n ≠ 0
         if m = 0
             m:= 1
         else
             m:= ack(n, m - 1)
         n:= n - 1
     return m + 1

Noch effizientere Implementierungen verwenden Arrays zur Zwischenspeicherung bereits berechneter Werte, siehe auch Dynamische Programmierung.

Grossman & Zeitman publizierten einen Algorithmus, der ohne Zwischenspeicherung in Laufzeit berechnet, mit einem Speicherbedarf von .[6]

In Haskell, einer funktionalen Programmiersprache, spiegelt die Implementierung direkt die Definition wider:

ack 0 m = m+1
ack n 0 = ack (n-1) 1
ack n m = ack (n-1) (ack n (m-1))

In Prolog sieht die Implementierung so aus:

 ackermann(0,X,Y) :- X >= 0,!, Y is X + 1.
 ackermann(X,0,Z) :- X > 0,!, X1 is X - 1, ackermann(X1,1,Z).
 ackermann(X,Y,Z) :- X > 0, Y > 0, X1 is X-1, Y1 is Y - 1, ackermann(X,Y1,W), ackermann(X1,W,Z).

Im Lambda-Kalkül ist sogar eine rein iterative Implementierung möglich. 1 und succ verwenden die Church-Numerale zur Darstellung der natürlichen Zahlen. Die Gleichungen der Definition von Péter lassen sich direkt durch β-Konversion zeigen.

  ack ≡ λn. n (λf.λm. m f (f 1)) succ

Wertetabelle

Die folgende Tabelle zeigt einige Funktionswerte für kleine Werte von und . Die nicht vollständig ausgerechneten Werte sind zu groß, um sie dezimal darzustellen.

Werte von
n \ m 0 1 2 3 4 ...
0 1 2 3 4 5 ...
1 2 3 4 5 6 ...
2 3 5 7 9 11 ...
3 5 13 29 61 125 ...
4 13 65533
(Zahl mit 19729 Dezimalstellen)
...
(Potenzturm mit m+3 Zahlen)
5 65533
6

Trotz der unvorstellbar großen Zahlen, die schon in dieser Tabelle auftauchen, wurden rekursive Verfahren definiert, die noch schneller wachsende Werte liefern, so zum Beispiel Grahams Zahl.

Benötigter Speicher für , wenn als unsigned integer gespeichert.
m \ n 0 1 2 3 4 5
0 1 bit 2 bit 2 bit 3 bit 4 bit 16 bit
1 2 bit 2 bit 3 bit 4 bit 16 bit (24 bit)
2 2 bit 3 bit 3 bit 5 bit 8 KiB (216 bit)
3 3 bit 3 bit 4 bit 6 bit ≈2,504412...·1019727 Byte (265536 bit = 265533 Byte)
4 3 bit 3 bit 4 bit 7 bit
5 3 bit 3 bit 4 bit 8 bit
6 3 bit 4 bit 4 bit 9 bit
7 4 bit 4 bit 5 bit 10 bit
8 4 bit 4 bit 5 bit 11 bit
9 4 bit 4 bit 5 bit 12 bit
10 4 bit 4 bit 5 bit 13 bit
100 7 bit 7 bit 8 bit 103 bit
1'000 10 bit 10 bit 11 bit 125⅜ Byte
10'000 14 bit 14 bit 15 bit 1250⅜ Byte
100'000 17 bit 17 bit 18 bit ≈12,5 KB (105 bit)
1'000'000 20 bit 20 bit 21 bit ≈125 KB (106 bit)
10'000'000 24 bit 24 bit 25 bit ≈1,25 MB (107 bit)
100'000'000 27 bit 27 bit 28 bit ≈12,5 MB (108 bit)
232−1 33 bit 33 bit 34 bit ≈512 MiB (232 bit)
264−1 65 bit 65 bit 66 bit ≈2 EiB (264 bit)

Genauere Betrachtung

Anhand der Wertetabelle lässt sich ein Schema zur Berechnung der Funktionswerte herleiten, das leichter zu verstehen ist als die formale rekursive Definition. Es ist leicht zu erkennen, dass die Werte der ersten Zeile einfach eine Liste aller natürlichen Zahlen sind. Die jeweiligen Einträge können mit der Formel berechnet werden. Alle folgenden Zeilen enthalten einfach Anweisungen, in dieser Zeile einen Wert zu suchen. Im Falle der Zeile vereinfacht sich diese Anweisung dazu, den Wert in der Zeile zu suchen, aber diese Vereinfachung ist schon etwas schwieriger herzuleiten – zum Beispiel:

a(1, 2) = a(0, a(1,1))
        = a(0, a(0, a(1,0)))
        = a(0, a(0, 2))
        = a(0, 3)
        = 4

Wir betrachten nun einen komplexeren Fall, nämlich , den ersten Funktionswert, der so groß ist, dass er praktisch nicht dezimal aufgeschrieben werden kann.

a(4, 3) = a(3, a(4, 2))
        = a(3, a(3, a(4, 1)))
        = a(3, a(3, a(3, a(4, 0))))
        = a(3, a(3, a(3, a(3, 1))))
        = a(3, a(3, a(3, a(2, a(3, 0)))))
        = a(3, a(3, a(3, a(2, a(2, 1)))))
        = a(3, a(3, a(3, a(2, a(1, a(2, 0))))))
        = a(3, a(3, a(3, a(2, a(1, a(1, 1))))))
        = a(3, a(3, a(3, a(2, a(1, a(0, a(1, 0)))))))
        = a(3, a(3, a(3, a(2, a(1, a(0, a(0, 1)))))))
        = a(3, a(3, a(3, a(2, a(1, a(0, 2))))))
        = a(3, a(3, a(3, a(2, a(1, 3)))))
        = a(3, a(3, a(3, a(2, a(0, a(1, 2))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(1, 1)))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(0, a(1, 0))))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(0, a(0, 1))))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(0, 2))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, 3)))))
        = a(3, a(3, a(3, a(2, a(0, 4)))))
        = a(3, a(3, a(3, a(2, 5))))
        = ...

Das ist für einige Zeit der einfachste Fall einer solchen Expansion, und es ist anhand der Tabelle offensichtlich, warum Funktionswerte wie dieser selten direkt berechnet werden. Es ist auch interessant festzustellen, wie viele Schritte nötig sind, um schon sehr einfach aussehende Ackermann-Ausdrücke zu vereinfachen. Jede Zeile im vorigen Beispiel ist eine einzige Anwendung eines der drei Teile der Definition der Ackermannfunktion.

    … = a(3, a(3, a(3, 13)))
        = ...
        = a(3, a(3, 65533))

Wenn wir an dieser Stelle mehrere logische Schritte überspringen, könnten wir zu 13 auswerten und dann versuchen, auszuwerten – das ist 65533. Doch schon der nächste Funktionsaufruf liefert mit eine Zahl, die weit über die geschätzte Anzahl der Atome im Universum hinausgeht. Diese Zahl wird schließlich in die Berechnung eingesetzt, die irgendwann zu einem Ausdruck der Form ausgeschrieben würde, die aber mit unseren Mitteln nicht mehr aufgeschrieben werden kann.

Ein weiterer interessanter Aspekt der Ackermann-Funktion ist, dass die einzige Berechnung, die neben den rekursiven Aufrufen tatsächlich auftaucht, die Berechnung von ist, die einfach um 1 erhöht.

Literatur

Einzelnachweise

  1. Claude Sureson: The Inverse of Ackermann Function is Computable in Linear Time. In: Fundamenta Informaticae. Band 182, Nr. 4, 27. November 2021, S. 345–361, doi:10.3233/FI-2021-2077.
  2. a b Cristian Calude, Solomon Marcus, Ionel Tevy: The first example of a recursive function which is not primitive recursive. In: Historia Mathematica. Band 6, Nr. 4, November 1979, S. 380–384, doi:10.1016/0315-0860(79)90024-7.
  3. Péter Rózsa: Konstruktion nichtrekursiver Funktionen. In: Mathematische Annalen. Band 111, 1935, S. 42–60 (uni-goettingen.de).
  4. Pankaj K. Agarwal, Micha Sharir: Davenport-Schinzel sequences and their geometric applications. In: Jörg-Rüdiger Sack, Jorge Urrutia (Hrsg.): Handbook of computational geometry. Elsevier, Amsterdam u. a. 2000, ISBN 0-444-82537-1, S. 1–47.
  5. Für Details zum Beweis siehe z. B.: Uwe Schöning: Theoretische Informatik – kurzgefasst. 4. Auflage. Spektrum Akademischer Verlag, Heidelberg u. a. 2001, ISBN 3-8274-1099-1.
  6. Jerrold W. Grossman, R. Suzanne Zeitman: An inherently iterative computation of Ackermann’s function. In: Theoretical Computer Science. Band 57, Nr. 2/3, Mai 1988, S. 327–330, doi:10.1016/0304-3975(88)90046-1.

Read other articles:

لينغولشيم    شعار الاسم الرسمي (بالفرنسية: Lingolsheim)‏    الإحداثيات 48°33′27″N 7°40′59″E / 48.5575°N 7.6830555555556°E / 48.5575; 7.6830555555556[1]  [2] تقسيم إداري  البلد فرنسا[3]  التقسيم الأعلى الراين الأسفل (1920–)الراين الأسفل (4 مارس 1790–1871)ستراسبورغ (1 يناير 2015...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Maret 2016. Ñeembucú Department Departamento de ÑeembucúDepartment BenderaÑeembucu shown in redCountry ParaguayRegionEastern RegionEstablished1776CapitalPilarLargest cityPilarPemerintahan • GovernorPedro Alliana Rodriguez (National Republican A...

 

Campeonato AsiáticoAtletismo 2017 Provas de pista 100 m masc fem 200 m masc fem 400 m masc fem 800 m masc fem 1500 m masc fem 5000 m masc fem 10000 m masc fem 100 m com barreiras fem 110 m com barreiras masc 400 m com barreiras masc fem 3000 mcom obstáculos masc fem Revezamento 4×100 m masc fem Revezamento 4×400 m masc fem Provas de campo Salto em distância masc fem Salto triplo masc fem Salto em altura masc fem Salto com vara masc fem Arremesso de peso masc fem Lançamento de da...

鶴岡一人 日本プロ野球の監督の勝利数一覧(にほんプロやきゅうのかんとくのしょうりすういちらん)は、日本プロ野球において監督を務めた人物の勝利数一覧である。 2022年現在、1000勝以上勝利した監督は13人、500勝以上勝利した監督は31人、100勝以上勝利した監督は151人である。 南海ホークスで監督を務めた、鶴岡一人は2022年現在も最多勝監督である。 1000勝以上し

 

Florence Sally Horner Información personalNacimiento 16 de abril de 1937 Camden (Estados Unidos) Fallecimiento 18 de agosto de 1952 (15 años)Nueva Jersey (Estados Unidos) Causa de muerte Accidente de tránsito Nacionalidad Estadounidense[editar datos en Wikidata] Florence Sally Horner (16 de abril de 1937 - 18 de agosto de 1952) fue una niña estadounidense secuestrada en 1948 por el pederasta Frank La Salle. Secuestro En 1948, a los 11 años, mientras Sally Horner intentaba robar...

 

Coordenadas: 45° 16' N 9° 3' E Trivolzio    Comuna   Localização TrivolzioLocalização de Trivolzio na Itália Coordenadas 45° 16' N 9° 3' E Região Lombardia Província Pavia Características geográficas Área total 3 km² População total 1 201 hab. Densidade 400 hab./km² Altitude 97 m Outros dados Comunas limítrofes Battuda, Bereguardo, Marcignago, Torre d'Isola, Trovo Código ISTAT 018163 Código cadastral L440 Código pos...

Koordinat: 4°52′37″S 119°47′40″E / 4.8769555°S 119.7943407°E / -4.8769555; 119.7943407 PatanyamangDesaKantor Desa PatanyamangNegara IndonesiaProvinsiSulawesi SelatanKabupatenMarosKecamatanCambaKode pos90562[1]Kode Kemendagri73.09.02.2006 Luas27,91 km² tahun 2017Jumlah penduduk1.304 jiwa tahun 2017Kepadatan46,72 jiwa/km² tahun 2017Jumlah RT9Jumlah RW3 Patanyamang (Lontara Bugis: ᨄᨈᨎᨆ, transliterasi: Patanyamang; Lontara Makassar: ᨄᨈ

 

Cinema of Egypt List of Egyptian films Pre 1920 1920s 1920 1921 1922 1923 19241925 1926 1927 1928 1929 1930s 1930 1931 1932 1933 19341935 1936 1937 1938 1939 1940s 1940 1941 1942 1943 19441945 1946 1947 1948 1949 1950s 1950 1951 1952 1953 19541955 1956 1957 1958 1959 1960s 1960 1961 1962 1963 19641965 1966 1967 1968 1969 1970s 1970 1971 1972 1973 19741975 1976 1977 1978 1979 1980s 1980 1981 1982 1983 19841985 1986 1987 1988 1989 1990s 1990 1991 1992 1993 19941995 1996 1997 1998 1999 2000s 200...

 

بشارة واكيم معلومات شخصية الميلاد 5 مارس 1890(1890-03-05)الفجالة-بالقاهرة-الخديوية المصرية الوفاة 30 نوفمبر 1949 (59 سنة)القاهرة، المملكة المصرية الجنسية  مصر الديانة المسيحية الحياة العملية المهنة مخرج أفلام،  وممثل  اللغة الأم اللهجة المصرية  اللغات العربية،  واللهجة ...

This article is part of a series on theHistory of the United States Timeline and periodsPrehistoric and Pre-Columbian Erauntil 1607Colonial Era 1607–17651776–1789    American Revolution 1765–1783    Confederation Period 1783–17881789–1849    Federalist Era 1788–1801    Jeffersonian Era1801–1817    Era of Good Feelings 1817–1825    Jacksonian Era1825–1849184...

 

English footballer and coach (born 1982) Not to be confused with the politician, Leon Brittan. Leon Britton Britton playing for Swansea City in 2010Personal informationFull name Leon James Britton[1]Date of birth (1982-09-16) 16 September 1982 (age 41)[1]Place of birth Merton, EnglandHeight 5 ft 4 in (1.63 m)[2]Position(s) MidfielderYouth career1991–1998 Arsenal1998–1999 West Ham UnitedSenior career*Years Team Apps (Gls)1999–2003 West Ham Unit...

 

Protein family Transcription factor II BCrystallographic structure of transcription factor II B (top; rainbow colored, N-terminus = blue, C-terminus = red) complexed with double stranded DNA (bottom).IdentifiersOrganismPyrococcus woeseiSymboltfbPDB1d3uUniProtP61999Search forStructuresSwiss-modelDomainsInterPro Archaeal transcription factor B (ATFB or TFB) is a protein family of extrinsic transcription factors that guide the initiation of RNA transcription in organisms that fall under the doma...

كاس البرازيل 2019 البلد البرازيل  الرياضه كورة قدم  الموسم 31  تاريخ 2019  عدد المشاركين الفايز اتلتيكو باراناينسى  عدد المباريات تعديل  كاس البرازيل 2019 (بالانجليزى: 2019 Copa do Brasil) هوا موسم رياضى فى كورة قدم اتعمل فى البرازيل سنة 2019. معلومات الموسم كاس البرازيل 2019 هو...

 

Ecoregion in Western Australia Great Western WoodlandsThe Great Western WoodlandsLocation within AustraliaEcologyBiomeTemperate woodlandGeographyArea160,000 km2 (62,000 sq mi)CountryAustraliaClimate typePredominantly semi-arid Mediterranean (southern fringe) The Great Western Woodlands is located in the southwest of Australia. The woodlands cover almost 16,000,000 hectares (40,000,000 acres), a region larger in size than England and Wales. The boundary of the Great Western Wood...

 

Ugandan hurdler John Akii-BuaJohn Akii-Bua c. 1972Personal informationBorn3 December 1949Lira, UgandaDied20 June 1997 (aged 47)Kampala, UgandaHeight1.88 m (6 ft 2 in)Weight77 kg (170 lb)SportSportAthleticsEvent(s)400 m, 400 m hurdlesAchievements and titlesPersonal best(s)400 m – 45.82 (1976)400 mH – 47.82 (1972) Medal record Representing  Uganda Olympic Games 1972 Munich 400 m hurdles All-Africa Games 1973 Lagos 400 m hurdles 1978 Algiers 400 m hurdles John A...

Faneuil Hall in 1776. The Artillery Company is headquartered on the fourth floor of Faneuil Hall.The Ancient and Honorable Artillery Company of Massachusetts is the oldest chartered military organization in North America[1] and the third oldest chartered military organization in the world.[2] Its charter was granted in March 1638 by the Great and General Court of Massachusetts Bay and signed by Governor John Winthrop as a volunteer militia company to train officers enrolled in...

 

Geologic feature in California This article is about the continental fault in California. For other uses, see San Andreas (disambiguation). San Andreas FaultThe fault (right)and the Carrizo Plain (left)Arrows show relative motion of the North American Plate (southeastward) and the Pacific Plate (northwestward)Named byAndrew LawsonYear defined1895Coordinates35°07′N 119°39′W / 35.117°N 119.650°W / 35.117; -119.650CountryUnited States, MexicoStateCalifornia, Baja ...

 

This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Component content management system – news · newspapers · books · scholar · JSTOR (March 2009) A component content management system (CCMS) is a content management system that manages content at a granular level (component) rather than at the document...

1986 film by Tobe Hooper Invaders from MarsTheatrical release posterDirected byTobe HooperScreenplay byDan O'BannonDon JakobyRichard Blake (original film)Based onInvaders from Mars1953 film remakeby John Tucker BattleProduced byEdward L. Alperson Jr.Yoram GlobusMenahem GolanDavid RodgersWade H. Williams IIIStarring Karen Black Hunter Carson Timothy Bottoms Laraine Newman James Karen Bud Cort Louise Fletcher CinematographyDaniel PearlEdited byAlain JakubowiczMusic byDave StorrsChristopher Youn...

 

Northern Irish indie rock band Two Door Cinema ClubTwo Door Cinema Club performing at the 2012 Bonnaroo Music Festival. From left to right: Sam Halliday, touring drummer Benjamin Thompson, and Alex Trimble. Kevin Baird is off the photo.Background informationOriginBangor, County Down, Northern IrelandGenres Indie pop[1] indie rock[1] dance-punk[2][3] synth-pop post-punk revival[4] Years active2007–presentLabels Kitsuné Glassnote Cooperative Parlophone...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!