MIT Labor für Informatik und Künstliche Intelligenz

MIT-Labor für Informatik und künstliche Intelligenz ( CSAIL ) ist ein Forschungsinstitut am Massachusetts Institute of Technology, das 2003 aus dem Zusammenschluss des Labors für Informatik und des Labors für künstliche Intelligenz hervorgegangen ist. CSAIL befindet sich im Stata Center und ist gemessen am Forschungsumfang und der Mitgliederzahl das größte Labor auf dem Campus.

Forschungsaktivitäten [ ]

Die Forschungsaktivitäten von CSAIL sind auf eine Reihe von halbautonomen Forschungsgruppen ausgerichtet, die jeweils von einem oder mehreren Professoren oder Wissenschaftlern geleitet werden. Diese Gruppen sind in sieben allgemeine Forschungsbereiche unterteilt:

Darüber hinaus hostet CSAIL das World Wide Web Consortium (W3C).

Geschichte Bearbeiten

Die Computerforschung am MIT begann mit der Erforschung eines Differentialanalysators durch Vannevar Bush und Claude Shannons elektronischer Boolescher Algebra in den 1930er-Jahren, dem Kriegs- Kriegsprojekt Wirbelwind und Forschungslabor für Elektronik (RLE) und SAGE des Lincoln Laboratory in den frühen 1950er Jahren. Am MIT begannen Ende der 1950er Jahre Forschungen auf dem Gebiet der künstlichen Intelligenz. [1]

Projekt MAC

Am 1. Juli 1963 wurde das Projekt MAC (das Projekt für Mathematik und Berechnung) ins Leben gerufen (später auf Computer mit Mehrfachzugriff, maschinenunterstütztes Erkennen oder Mensch und Computer zurückgeführt) wurde mit einem Zuschuss von 2 Mio. USD von der Defense Advanced Research Projects Agency (DARPA) ins Leben gerufen. Der ursprüngliche Direktor von Project MAC war Robert Fano vom Research Laboratory of Electronics (RLE) des MIT. Fano beschloss, MAC aus Gründen der internen MIT-Politik als "Projekt" und nicht als "Labor" zu bezeichnen. Wenn MAC als Labor bezeichnet worden wäre, wäre es schwieriger gewesen, andere MIT-Abteilungen für Forschungsmitarbeiter zu durchsuchen. Der für das DARPA-Stipendium verantwortliche Programmmanager war J. C. R. Licklider, der zuvor am MIT in RLE geforscht hatte und später Fano als Direktor des Projekts MAC folgte.

Das Projekt MAC wurde berühmt für bahnbrechende Forschungen zu Betriebssystemen, künstlicher Intelligenz und der Theorie der Berechnung. Zu den Zeitgenossen gehörten Project Genie in Berkeley, das Stanford Artificial Intelligence Laboratory und das Information Sciences Institute der University of Southern California (USC).

Eine "AI-Gruppe" mit Marvin Minsky (dem Regisseur), John McCarthy (dem Erfinder von Lisp) und einer talentierten Gemeinschaft von Computerprogrammierern wurde in das neu gegründete Projekt MAC aufgenommen. Sie interessierte sich hauptsächlich für die Probleme des Sehens, der mechanischen Bewegung und Manipulation sowie der Sprache, die sie als Schlüssel für intelligentere Maschinen betrachteten. In den 1960er bis 1970er Jahren teilte sich die AI Group einen Computerraum mit einem Computer (anfangs ein PDP-6 und später ein PDP-10), für den sie ein Time-Sharing-Betriebssystem namens Inkompatibles Timesharing-System (ITS) erstellte. [2]

Die frühe Projekt-MAC-Community umfasste Fano, Minsky, Licklider, Fernando J. Corbató und eine Community von Computerprogrammierern und Enthusiasten, die sich unter anderem von dem ehemaligen Kollegen John McCarthy inspirieren ließen. Diese Gründer planten die Schaffung eines Computer-Versorgungsunternehmens, dessen Rechenleistung genauso zuverlässig ist wie die eines Elektrizitätsversorgungsunternehmens. Zu diesem Zweck brachte Corbató das erste Computer-Timesharing-System, das Compatible Time-Sharing-System (CTSS), aus dem MIT-Rechenzentrum mit, das mit DARPA-Mitteln einen IBM 7094 für Forschungszwecke erwarb. Einer der frühen Schwerpunkte des Projekts MAC wäre die Entwicklung eines Nachfolgers von CTSS, Multics, dem ersten Hochverfügbarkeits-Computersystem, das im Rahmen eines Industriekonsortiums entwickelt wurde, zu dem General Electric und Bell Laboratories gehören.

Scientific American stellte 1966 das Projekt MAC in der September-Ausgabe vor, die der Informatik gewidmet war und später in Buchform veröffentlicht wurde. Zu der Zeit wurde das System mit ungefähr 100 TTY-Terminals beschrieben, hauptsächlich auf dem Campus, einige davon jedoch in Privathäusern. Es konnten nur 30 Benutzer gleichzeitig angemeldet sein. Im Rahmen des Projekts wurden Schüler verschiedener Klassen angewiesen, die Terminals gleichzeitig für Problemlösungen, Simulationen und die Kommunikation mit mehreren Terminals als Tests für die zu entwickelnde Multi-Access-Computersoftware zu verwenden.

LCS und AI Lab

In den späten 1960er-Jahren suchte Minskys Gruppe für künstliche Intelligenz nach mehr Platz und konnte vom Projektleiter Licklider keine Befriedigung finden. Minsky stellte fest, dass die Allokationspolitik der Universität so ist, wie sie ist. Obwohl das Projekt MAC als einzelne Einheit nicht den von ihm gewünschten zusätzlichen Raum erhalten konnte, konnte er sich aufteilen, um ein eigenes Labor zu gründen, und dann Anspruch auf mehr Büroräume haben. Infolgedessen wurde 1970 das MIT AI Lab gegründet, und viele von Minskys AI-Kollegen verließen Project MAC, um sich ihm im neuen Labor anzuschließen, während die meisten verbleibenden Mitglieder das Labor für Informatik (LCS) gründeten. Talentierte Programmierer wie Richard Stallman, der mit TECO EMACS schrieb, blühten in dieser Zeit im AI Lab auf.

Diejenigen Forscher, die nicht am kleineren AI Lab teilnahmen, gründeten das Labor für Informatik und forschten weiter an Betriebssystemen, Programmiersprachen, verteilten Systemen und der Theorie der Berechnung. Zwei Professoren, Hal Abelson und Gerald Jay Sussman, entschieden sich dafür, neutral zu bleiben – ihre Gruppe wurde in den nächsten 30 Jahren verschiedentlich als Schweiz und Projekt MAC bezeichnet. [ Zitat erforderlich [19659012] Unter anderem führte das AI Lab in den 1980er Jahren zur Erfindung von Lisp-Maschinen und dem Versuch, diese zu vermarkten, durch zwei Unternehmen: Symbolics und Lisp Machines Inc. Dies teilte das AI Lab in "Lager" auf, was zur Einstellung vieler von ihnen führte die talentierten Programmierer. Der Vorfall inspirierte Richard Stallmans spätere Arbeit am GNU-Projekt. "Niemand hatte sich vorgestellt, dass die Hackergruppe des KI-Labors ausgelöscht werden würde, aber das war es." … "Das ist die Grundlage für die freie Softwarebewegung – die Erfahrung, die ich gemacht habe, das Leben, das ich im MIT AI-Labor verbracht habe -, um an menschlichem Wissen zu arbeiten und niemandem im Wege zu stehen, der es weiter nutzt und die weitere Verbreitung menschlichen Wissens ". [3]

CSAIL [ edit

Am 40. Jahrestag der Gründung von Project MAC am 1. Juli 2003 wurde LCS mit dem AI Lab zusammengelegt, um das MIT Labor für Informatik und Künstliche Intelligenz oder CSAIL. Diese Fusion schuf das größte Labor (über 600 Mitarbeiter) auf dem MIT-Campus [ und wurde als Zusammenführung der diversifizierten Elemente des Projekts MAC angesehen. [[19659028] nach wem? ]

Büros [

Von 1963 bis 2004 hatten Project MAC, LCS, AI Lab und CSAIL ihre Büros bei 545 Technologieplatz, der im Laufe der Jahre immer mehr Stockwerke des Gebäudes einnimmt. Im Jahr 2004 zog CSAIL in das neue Stata Center um, in dem es und andere Abteilungen untergebracht waren.

Outreach-Aktivitäten

Die IMARA-Gruppe (aus dem Swahili für "Macht") sponsert eine Vielzahl von Outreach-Programmen, die die globale digitale Kluft überbrücken. Ziel ist es, langfristige und nachhaltige Lösungen zu finden und umzusetzen, die die Verfügbarkeit von Bildungstechnologien und -ressourcen für nationale und internationale Gemeinschaften erhöhen. Diese Projekte werden unter der Schirmherrschaft von CSAIL durchgeführt und von MIT-Freiwilligen besetzt, die im Großraum Boston, Massachusetts, Kenia, in Indianerreservaten der amerikanischen Ureinwohner im Südwesten wie der Navajo Nation, dem Nahen Osten, Schulungen durchführen, Computerinstallationen durchführen und Computer spenden. und Fidschi-Inseln. Das CommuniTech-Projekt ist bestrebt, unterversorgte Gemeinden durch nachhaltige Technologie und Bildung zu stärken. Dies geschieht durch die MIT Used Computer Factory (UCF), die überholte Computer für unterversorgte Familien bereitstellt, und durch die FACT-Klassen (Families Accessing Computer Technology) schult diese Familien, um sich mit Computertechnologie vertraut zu machen und sich darin zurechtzufinden. [4][5][6]

Bemerkenswerte Forscher

(Einschließlich Mitglieder und Absolventen der CSAIL-Vorgängerlabors)

  • MacArthur-Stipendiaten Tim Berners-Lee, Erik Demaine, Dina Katabi, Daniela L. Rus, Regina Barzilay, Peter Shor und Richard Stallman
  • Turing-Preisträger Leonard M. Adleman, Fernando J. Corbató, Shafi Goldwasser, Butler W Lampson, John McCarthy, Silvio Micali, Marvin Minsky, Ronald L. Rivest, Adi Shamir, Barbara Liskov, Michael Stonebraker und Tim Berners-Lee
  • Empfänger des IJCAI-Preises für Computer und Gedanken Terry Winograd, Patrick Winston, David Marr, Gerald Sussman, Rodney Brooks
  • Rolf Nevanlinna-Preisträger Madhu Sudan, Peter Shor, Constantinos Daskalakis
  • Gödel-Preisträger Shafi Goldwasser (zweifacher Preisträger), Silvio Micali, Maurice Herlihy, Charles Rackoff, Johan Håstad, Peter Shor und Madhu Sudan
  • Grace Murray Hopper-Preisträger Robert Metcalfe, Shafi Goldwasser, Guy L. Steele, Jr., Richard Stallman und W. Daniel Hillis
  • Lehrbuchautoren Harold Abelson und Gerald Jay Sussman, Richard Stallman, Thomas H. Co Rmen, Charles E. Leiserson, Patrick Winston, Ronald L. Rivest, Barbara Liskov, John Guttag, Jerome H. Saltzer, Frans Kaashoek und Clifford Stein
  • David D. Clark, ehemaliger Chef-Protokollarchitekt für das Internet; Co-Autor mit Jerome H. Saltzer (ebenfalls CSAIL-Mitglied) und David P. Reed des einflussreichen Artikels "End-to-End-Argumente im Systemdesign"
  • Eric Grimson, Experte für Computer Vision und seine Anwendungen in der Medizin, zum Kanzler des MIT ernannt März 2011
  • Bob Frankston, Mitentwickler von VisiCalc, dem ersten Computer-Spreadsheet
  • Seymour Papert, Erfinder der Logo-Programmiersprache
  • Joseph Weizenbaum, Schöpfer des computer-simulierten ELIZA-Therapeuten [19659051] Bemerkenswerte Absolventen [ bearbeiten ]

    Mehrere MAC-Absolventen des Projekts revolutionierten die Computerindustrie weiter.

    Direktoren Bearbeiten

    Direktoren des Projekts MAC
    Direktoren des AI Lab
    Direktoren des Labors für Informatik
    Direktoren von CSAIL

    Siehe auch [ bearbeiten ]

    Referenzen [ bearbeiten ]

    1. ^ Marvin Minsky. "Bibliographie".
    2. ^ Eastlake, Donald E. (1969). ITS-Referenzhandbuch, Version 1.5 (PDF (groß)) . MIT AI Laboratory. Permanent Dead Link
    3. ^ Abschrift von Richard Stallmans Rede vom 28. Oktober 2002 auf der International Lisp Conference von gnu.org, abgerufen im September 2012 [19659074] ^ Outreach-Aktivitäten bei CSAIL Archiviert am 02.06.2010 auf der Wayback Machine – CSAIL-Homepage, MIT.
    4. ^ IMARA-Projekt am MIT
    5. ^ Fizz, Robyn ; Mansur, Karla (04.06.2008), "Hilfe für MIT-Nachbarn bei der Überwindung der 'digitalen Kluft' " (PDF) MIT Tech Talk Cambridge: MIT, p. 3

    Weiterführende Literatur

    Externe Links

    • Offizielle Website von CSAIL, Nachfolger der AI Labor
    • Oral History Interview mit Robert M. Fano. Charles Babbage Institute, Universität Minnesota, Minneapolis.
    • Interview mit Lawrence G. Roberts über die Oral History. Charles Babbage Institute, Universität Minnesota, Minneapolis.
    • Interview mit J. C. R. Licklider über die Oral History. Charles Babbage Institute, Universität Minnesota, Minneapolis.
    • Interview mit Marvin L. Minsky über die Oral History. Charles Babbage Institute, Universität Minnesota, Minneapolis.
    • Interview mit Terry Allen Winograd über die Oral History. Charles Babbage Institute, Universität Minnesota, Minneapolis.
    • Interview mit Wesley Clark über die Oral History. Charles Babbage Institute, Universität Minnesota, Minneapolis.
    • Interview mit Fernando J. Corbató, Universität Minnesota, Minneapolis.
    • "Eine Ehe der Annehmlichkeit: Die Gründung des MIT Artificial Intelligence Laboratory", Chious et al. – Enthält wichtige Informationen zum inkompatiblen Timesharing-System.
    • Die 1975 vom MIT Lab for Computer Science (ehemals Project Mac) herausgegebene Broschüre gibt einen kurzen historischen Einblick in ihre Aktivitäten und stellt sich zwanzig Jahre zuvor.


Leon – Enzyklopädie

Leon Léon (Französisch) oder León (Spanisch) können sich beziehen auf:

Europa [ bearbeiten ]

  • León, Spanien, Hauptstadt der Provinz León
  • Provinz León, Spanien
  • Königreich León, ein unabhängiger Staat im Iberische Halbinsel von 910 bis 1230 und erneut von 1296 bis 1301
  • León (historische Region), bestehend aus den spanischen Provinzen León, Salamanca und Zamora
  • Viscounty of Léon, ein Feudalstaat in Frankreich im 11. bis 13. Jahrhundert
  • Léon, Landes, eine französische Gemeinde
  • Isla de León, eine spanische Insel
  • Leon (Bucht von Souda), eine kleine Insel in der Bucht von Souda, Chania, auf der Insel Kreta

Nordamerika [19659003] [ bearbeiten ]

  • León, Guanajuato, Großstadt in Mexiko
  • Leon, Kalifornien, USA, Geisterstadt
  • Leon, Iowa, USA
  • Leon, Kansas, Vereinigte Staaten
  • Leon, New York, Vereinigte Staaten
  • Leon, Oklahoma, Vereinigte Staaten
  • Leon, Virginia, Vereinigte Staaten
  • Leon, West Virginia, Vereinigte Staaten
  • Leon, Wisconsin (Begriffsklärung), Vereinigte Staaten, mehrere Orte
  • Neues Königreich León, ein Gebiet Spaniens (1582-1821) in Mexiko, das in etwa dem heutigen Nuevo León entspricht
  • Nuevo León (New Leon), ein Staat im Nordosten Mexikos
  • Leon County (Begriffsklärung)
  • Leon Township (Begriffsklärung)

Mittelamerika [ Bearbeiten

Andere Orte [19659003] [ bearbeiten ]

Personen mit Spitznamen oder Künstlernamen [ bearbeiten

  • Leon (japanischer Wrestler), (* 1980), japanischer Wrestler [19659005] Leon Robinson (* 1962), afroamerikanischer Schauspieler und Sänger, normalerweise als "Leon" anerkannt
  • Leon (* 1969), deutscher Interpret beim Eurovision Song Contest 1996
  • Léon (schwedischer Sänger) (* 1993), schwedischer Sänger
  • El León (* 1975), puertoricanischer Wrestler
  • Frère León (1871-1955), Franco -Kubanischer Botaniker, geb. Joseph Sylvestre Sauget, bekannt unter dem botanischen Autorenkürzel León
  • Leon Russell (1942–2016) Sänger und Songwriter

Personen mit dem Namen [ ] [19659042KunstUnterhaltungundMedien [ Bearbeiten

Titelwerke [ Bearbeiten

Fiktive Einheiten Bearbeiten ]

  • Leon ( Dead or Alive )
  • Leon ( Squirrel Boy )
  • Leon, eine Figur in The Andy Griffith Show
  • Leon Garcia de Asturias, eine Figur auf Trinity Blood
  • Léon, ein junger männlicher Zyklop, erschaffen von Annie Groovie
  • Leon, eine Battle Arena Toshinden Figur [19659005] Leon, ein F-Zero Charakter
  • Leon Elliott ein Black Cat Charakter
  • Leon D. Geeste, ein Star Ocean 2 Charakter [19659005] Leon Karp, ein Roseanne Charakter
  • Leon S. Kennedy, ein Resident Evil Charakter
  • Leon Belmont, ein Castlevania Charakter
  • Leon Kowalski, ein Klingenläufer Charakter
  • Leon Kuwata, ein Charakter aus dem Spiel Danganronpa: Trigger Happy Havoc
  • Squall Leonhart, aka Leon, ein Final Fantasy Charakter
  • Leon Magnus, ein Schicksalsgeschichten Charakter
  • Leone "Léon" Montana, der Titelprotagonist von Léon: Der Profi
  • Leon Powalski, eine Star Fox Figur
  • Leon, eine Figur aus dem Spiel Rune Factory 4
  • Leon Jefferson III, eine Figur in Baby Driver

Organizations [19659003] [ bearbeiten ]

Technologie [ bearbeiten ]

Siehe auch [ bearbeiten [19659074]

Akitaro Daichi – Enzyklopädie

Akitaro Daichi ( 大地 丙 丙 Daichi Akitarō geboren am 13. Januar 1956) ist ein Anime-Regisseur, Produzent und Kameramann.

Akitaro Daichi stammt aus der Präfektur Gunma und ist Absolvent der Tokyo Polytechnic University. Ursprünglich wollte er Bühnenfotograf werden, wechselte aber zu Tokyo Animation Film, einem Anime-Fotografen.

Seine erste Arbeit in der Branche war als Fotoregisseur für den Film Doraemon Die Geschichte von Nobitas Weltraum bahnbrechend ((ド ラ も ん ん び び び 開拓 史).

Nach fünf Jahren wechselte Daichi den Job und arbeitete für eine Videoproduktionsfirma, machte unter anderem Karaoke-Videos, kehrte aber später in die Anime-Branche zurück und konzentrierte sich auf Regie.

1994 machte er mit seiner Storyboard-Arbeit zu Akazukin Chacha auf sich aufmerksam und debütierte 1995 als Regisseur bei Nurse Angel Ririka SOS .

Vorwürfe wegen sexueller Belästigung

In den Jahren 2018 und 2019 behauptete die Synchronsprecherin Hiroko Konishi, dass sie von ihrem Manager vorgeschlagen worden sei, mit Daichi in ein gemischtes Bad einzutreten Als sie dies ablehnte, wurde sie von der Sprachindustrie auf die schwarze Liste gesetzt. [1][2]

Werke (als Regisseur) [ Bearbeiten

Bearbeiten [ Extern Links [ bearbeiten ]

Johann Simon Hermstedt – Enzyklopädie

Johann Simon Hermstedt (29. Dezember 1778 – 10. August 1846) war einer der bekanntesten Klarinettisten des 19. Jahrhunderts. Als Deutscher diente er Herzog Günther I. von Schwarzburg-Sondershausen als Hofklarinettist und brachte dem Herzog das Klarinettenspiel bei. Alle vier Klarinettenkonzerte von Louis Spohr und einige seiner anderen Klarinettenwerke wurden unter Berücksichtigung von Hermstedts Fähigkeiten geschrieben und waren ihm gewidmet. Hermstedt komponierte auch selbst einige Werke für Blasinstrumente.

Referenzen Bearbeiten

  • Pamela Weston: 'Hermstedt, Simon', Grove Music Online, Hrsg. L. Macy (abgerufen am 18. Mai 2006), [1]

Fibonacci-Haufen – Enzyklopädie

Fibonacci-Haufen
Typ Haufen
Erfunden 1984
Erfunden von Michael L. Fredman und Robert Endre Tarjan
Zeitkomplexität in Big O-Notation
Algorithmus Durchschnitt Schlimmster Fall
Einfügen Θ (1)
Find-min Θ (1)
Delete-min O (log n )
Verkleinerungsschlüssel Θ (1)
Zusammenführen Θ (1)

In der Informatik ist ein Fibonacci-Heap eine Datenstruktur für Prioritätswarteschlangenoperationen, die aus einer Sammlung von Heap-geordneten Bäumen besteht . Die Laufzeit ist amortisierter als bei vielen anderen Warteschlangendatenstrukturen mit Priorität, einschließlich Binär- und Binomial-Heap. Michael L. Fredman und Robert E. Tarjan entwickelten 1984 Fibonacci-Haufen und veröffentlichten sie 1987 in einer wissenschaftlichen Zeitschrift. Fibonacci-Haufen sind nach den Fibonacci-Zahlen benannt, die in ihrer Laufzeitanalyse verwendet werden.

Für den Fibonacci-Heap dauert die Find-Minimum-Operation eine konstante ( O (1)) amortisierte Zeit. [1] Die Tastenoperationen Einfügen und Verringern funktionieren auch in einer konstanten amortisierten Zeit. [2] Löschen Ein Element (das am häufigsten im Sonderfall des Löschens des Minimalelements verwendet wird) arbeitet in O (log n ), wobei n die Größe von ist der Haufen. [2] Dies bedeutet, dass ausgehend von einer leeren Datenstruktur jede Folge von a Einfügen und Verringern von Schlüsseloperationen und b Löschen von Operationen O ( a + b log n ) Worst-Case-Zeit, wobei n die maximale Heap-Größe ist. In einem binären oder binomialen Haufen würde eine solche Folge von Operationen 0 ( a + b ) log n ) Zeit in Anspruch nehmen. Ein Fibonacci-Heap ist also besser als ein binärer oder binomischer Heap, wenn b um einen nicht konstanten Faktor kleiner als a ist. Es ist auch möglich, zwei Fibonacci-Heaps in konstanter, amortisierter Zeit zusammenzuführen, wodurch die logarithmische Zusammenführungszeit eines Binomial-Heaps und Binär-Heaps, die Zusammenführungen nicht effizient verarbeiten können, verbessert werden.

Die Verwendung von Fibonacci-Heaps für Prioritätswarteschlangen verbessert die asymptotische Laufzeit wichtiger Algorithmen, z. B. des Dijkstra-Algorithmus zur Berechnung des kürzesten Pfads zwischen zwei Knoten in einem Diagramm, im Vergleich zum gleichen Algorithmus unter Verwendung anderer Warteschlangendatenstrukturen mit niedrigerer Priorität.

Struktur [ Bearbeiten

Abbildung 1. Beispiel eines Fibonacci-Haufens. Es hat drei Bäume der Grade 0, 1 und 3. Drei Eckpunkte sind markiert (blau dargestellt). Daher beträgt das Potenzial des Haufens 9 (3 Bäume + 2 × (3 markierte Scheitelpunkte)).

Ein Fibonacci-Haufen ist eine Sammlung von Bäumen, die die Minimum-Heap-Eigenschaft erfüllen, dh der Schlüssel eines Kindes ist Immer größer oder gleich dem Schlüssel des übergeordneten Elements. Dies impliziert, dass sich der Mindestschlüssel immer an der Wurzel eines der Bäume befindet. Im Vergleich zu Binomialhaufen ist die Struktur eines Fibonacci-Haufens flexibler. Die Bäume haben keine vorgeschriebene Form und im Extremfall kann der Haufen jedes Element in einem separaten Baum haben. Durch diese Flexibilität können einige Vorgänge auf träge Weise ausgeführt werden, wodurch die Arbeit für spätere Vorgänge verschoben wird. Das Zusammenführen von Heaps erfolgt beispielsweise einfach durch Verketten der beiden Baumlisten, und die Operation Schlüssel verringern schneidet manchmal einen Knoten von seinem übergeordneten Knoten aus und bildet einen neuen Baum.

Irgendwann muss jedoch eine Reihenfolge in den Heap eingefügt werden, um die gewünschte Laufzeit zu erreichen. Insbesondere werden Knotengrade (Grad bedeutet hier die Anzahl der Kinder) relativ niedrig gehalten: Jeder Knoten hat höchstens einen Grad O (log n ) und die Größe eines Teilbaums, der verwurzelt ist in einem Gradknoten k ist mindestens F k +2 wobei F k das k ist die Fibonacci-Nummer. Dies wird durch die Regel erreicht, dass wir höchstens ein Kind von jedem Nicht-Root-Knoten schneiden können. Wenn ein zweites untergeordnetes Element ausgeschnitten wird, muss der Knoten selbst von seinem übergeordneten Element abgeschnitten werden und wird zur Wurzel eines neuen Baums (siehe Nachweis von Gradgrenzen unten). Die Anzahl der Bäume wird in der Operation minimale Streichung verringert, bei der Bäume miteinander verbunden werden.

Aufgrund einer entspannten Struktur können einige Operationen sehr lange dauern, während andere sehr schnell ausgeführt werden. Für die Analyse der amortisierten Laufzeit verwenden wir die potenzielle Methode, indem wir vorgeben, dass sehr schnelle Vorgänge etwas länger dauern als sie tatsächlich dauern. Diese zusätzliche Zeit wird dann später kombiniert und von der tatsächlichen Laufzeit langsamer Operationen abgezogen. Die Zeitersparnis für eine spätere Verwendung wird zu jedem Zeitpunkt durch eine mögliche Funktion gemessen. Das Potenzial eines Fibonacci-Haufens ist gegeben durch

Potential = t + 2 m

wobei t die Anzahl der Bäume im Fibonacci-Haufen ist und m die Anzahl ist von markierten Knoten. Ein Knoten ist markiert, wenn mindestens eines seiner untergeordneten Knoten abgeschnitten wurde, da dieser Knoten zu einem untergeordneten Knoten eines anderen Knotens gemacht wurde (alle Wurzeln sind nicht markiert).
Die amortisierte Zeit für eine Operation ergibt sich aus der Summe der tatsächlichen Zeit und c mal der Potentialdifferenz, wobei c eine Konstante ist (gewählt, um den konstanten Faktoren in O Notation für die aktuelle Zeit).

Somit hat die Wurzel jedes Baums in einem Haufen eine gespeicherte Zeiteinheit. Diese Zeiteinheit kann später verwendet werden, um diesen Baum zum amortisierten Zeitpunkt 0 mit einem anderen Baum zu verknüpfen. Außerdem sind in jedem markierten Knoten zwei Zeiteinheiten gespeichert. Man kann verwendet werden, um den Knoten von seinem Elternknoten zu trennen. In diesem Fall wird der Knoten zur Wurzel und die zweite Zeiteinheit bleibt wie in jeder anderen Wurzel gespeichert.

Implementierung von Operationen [ Bearbeiten

Um ein schnelles Löschen und Verketten zu ermöglichen, werden die Wurzeln aller Bäume über eine kreisförmige, doppelt verknüpfte Liste verknüpft. Die untergeordneten Elemente jedes Knotens werden ebenfalls mithilfe einer solchen Liste verknüpft. Für jeden Knoten pflegen wir die Anzahl der untergeordneten Knoten und ob der Knoten markiert ist. Außerdem pflegen wir einen Zeiger auf die Wurzel, die den Mindestschlüssel enthält.

Die Operation find minimum ist jetzt trivial, da der Zeiger auf den Knoten, der sie enthält, beibehalten wird. Das Potenzial des Haufens ändert sich nicht, daher sind sowohl die tatsächlichen als auch die fortgeführten Anschaffungskosten konstant.

Wie oben erwähnt, wird Merge einfach durch Verketten der Baumwurzellisten der beiden Haufen implementiert. Dies kann in konstanter Zeit erfolgen und das Potenzial ändert sich nicht, was wiederum zu einer konstanten Amortisationszeit führt.

Operation insert erstellt einen neuen Heap mit einem Element und führt die Zusammenführung durch. Dies dauert konstant und das Potenzial steigt um eins, da die Anzahl der Bäume zunimmt. Die fortgeführten Anschaffungskosten sind somit weiterhin konstant.

Operation Mindestauszug (wie Mindestauszug ) erfolgt in drei Phasen. Zuerst nehmen wir die Wurzel, die das minimale Element enthält und entfernen es. Seine Kinder werden Wurzeln neuer Bäume. Wenn die Anzahl der Kinder d war, dauert es O ( d ), um alle neuen Wurzeln zu verarbeiten, und das Potenzial steigt um d −1. Daher beträgt die abgeschriebene Laufzeit dieser Phase O ( d ) = O (log n ).

Um die Operation zum Extrahieren des Minimums abzuschließen, müssen wir den Zeiger auf den Stamm mit dem Minimumschlüssel aktualisieren. Leider kann es bis zu n Wurzeln geben, die wir überprüfen müssen. In der zweiten Phase verringern wir daher die Anzahl der Wurzeln, indem wir nacheinander Wurzeln gleichen Grades miteinander verbinden. Wenn zwei Wurzeln u und v den gleichen Grad haben, machen wir eine von ihnen zu einem Kind der anderen, so dass die mit dem kleineren Schlüssel die Wurzel bleibt. Sein Grad erhöht sich um eins. Dies wird wiederholt, bis jede Wurzel einen anderen Grad hat. Um Bäume des gleichen Grades effizient zu finden, verwenden wir ein Array der Länge O (log n ), in dem wir einen Zeiger auf eine Wurzel jedes Grades behalten. Wenn ein zweiter Stamm mit dem gleichen Grad gefunden wird, werden die beiden verknüpft und das Array aktualisiert. Die tatsächliche Laufzeit beträgt O (log n + m ), wobei m die Anzahl der Wurzeln zu Beginn der zweiten Phase ist . Am Ende werden wir höchstens O (log n ) Wurzeln haben (weil jede einen anderen Grad hat). Daher ist der Unterschied in der Potentialfunktion von vor dieser Phase zu danach: O (log n ) – m und die amortisierte Laufzeit ist dann höchstens O (log n + m ) + c ( O (log n ) – m ). Bei einer ausreichend großen Auswahl von c vereinfacht sich dies zu O (log n ).

Abbildung 2. Fibonacci-Haufen aus Abbildung 1 nach der ersten Phase des Extraktminimums. Knoten mit Schlüssel 1 (das Minimum) wurde gelöscht, und seine Kinder wurden als separate Bäume hinzugefügt.

Abbildung 3. Fibonacci-Haufen aus Abbildung 1, nachdem das Extraktionsminimum abgeschlossen wurde. Zunächst werden die Knoten 3 und 6 miteinander verbunden. Anschließend wird das Ergebnis mit dem auf Knoten 2 verwurzelten Baum verknüpft. Schließlich wird das neue Minimum gefunden.

Abbildung 4. Fibonacci-Heap von Abbildung 1 nach dem Verringern des Schlüssels von Knoten 9 auf 0. Dieser Knoten sowie seine beiden markierten Vorfahren sind aus dem bei 1 wurzelnden Baum schneiden und als neue Wurzeln setzen.

In der dritten Phase prüfen wir jede der verbleibenden Wurzeln und finden das Minimum. Dies dauert O (log n ) und das Potenzial ändert sich nicht. Die amortisierte Gesamtlaufzeit des Extraktminimums beträgt daher O (log n ).

Operation Schlüssel verkleinern übernimmt den Knoten, verkleinert den Schlüssel und wird die Heap-Eigenschaft verletzt (der neue Schlüssel ist kleiner als der Schlüssel des übergeordneten Elements), wird der Knoten von seinem übergeordneten Element entfernt. Wenn das übergeordnete Element kein Stamm ist, wird es markiert. Wenn es bereits markiert wurde, wird es ebenfalls ausgeschnitten und sein übergeordnetes Element wird markiert. Wir fahren weiter aufwärts, bis wir entweder die Wurzel oder einen nicht markierten Knoten erreichen. Jetzt setzen wir den Minimalzeiger auf den verringerten Wert, wenn es sich um das neue Minimum handelt. Dabei erzeugen wir eine Anzahl von neuen Bäumen, sagen wir k . Jeder dieser neuen Bäume, außer möglicherweise der erste, wurde ursprünglich markiert, aber als Wurzel wird er nicht markiert. Ein Knoten kann markiert werden. Daher ändert sich die Anzahl der markierten Knoten um – ( k – 1) + 1 = – k + 2. Durch Kombination dieser beiden Änderungen ändert sich das Potenzial um 2 (- k + 2) + k = – k + 4. Die tatsächliche Zeit für die Durchführung des Schnitts betrug O ( k ), daher ist (wiederum mit einer ausreichend großen Auswahl von c ) die amortisierte Laufzeit konstant.

Schließlich kann die Operation delete einfach durch Verringern des Schlüssels des zu löschenden Elements auf minus unendlich implementiert werden, wodurch es in das Minimum des gesamten Heaps verwandelt wird. Dann rufen wir das minimale Extrakt auf, um es zu entfernen. Die amortisierte Laufzeit dieses Vorgangs beträgt O (log n ).

Nachweis von Gradgrenzen Bearbeiten

Die amortisierte Leistung eines Fibonacci-Haufens hängt vom Grad (Anzahl der Kinder) eines Baumwurzels ab, der O ist. (log n ), wobei n die Größe des Haufens ist. Hier zeigen wir, dass die Größe des (Unter-) Baums, der an einem beliebigen Knoten x Grad d im Heap wurzelt, mindestens F d [19659060betragenmuss] +2 wobei F k die k te Fibonacci-Zahl ist. Der Grad der Bindung folgt daraus und der Tatsache (leicht durch Induktion bewiesen), dass

F d + 2 φ d { displaystyle F_ {d + 2} geq varphi ^ {d}}

für alle ganzen Zahlen

d 0 { displaystyle d geq 0}

wobei

φ = ( 1 ] + 5 ) / 2 1.618 { displaystyle varphi = (1 + { sqrt {5}}) / 2 doteq 1.618}

. (Wir haben dann

n F d + 2 φ d { displaystyle n geq F_ {d + 2} geq varphi ^ {d}}

und das Protokoll zur Basis nehmen

φ { displaystyle varphi}

auf beiden Seiten ergibt

d log φ n displaystyle d leq log _ { varphi} n}

nach Bedarf.)

Betrachten Sie einen Knoten x irgendwo auf dem Haufen ( x muss nicht die Wurzel eines der Hauptbäume sein). Definieren Sie Größe ( x ) als die Größe des Baumes, dessen Wurzel x ist (die Anzahl der Nachkommen von x einschließlich ) ] x selbst). Wir beweisen durch Induktion auf der Höhe von x (der Länge eines längsten einfachen Weges von x zu einem nachkommenden Blatt), dass Größe ( x ) ≥ F d +2 wobei d der Grad von x ist.

Basisfall: Wenn x die Höhe 0 hat, dann d = 0 und Größe ( x ]) = 1 = F 2 .

Induktiver Fall: Angenommen, x hat eine positive Höhe und einen positiven Grad d > 0. Sei y 1 y 2 y d die Kinder von x indiziert nach der Zeit, in der sie zuletzt Kinder von x ( y 1 wurden, wobei y d der früheste war spätestens), und seien c 1 c 2 c d ihre jeweiligen Grade. Wir behaupten dass c i i -2 für jedes i mit 2 ≤ i d : Kurz vor y i wurde ein Kind von x y 1 y i −1 waren bereits Kinder von x und so hatte x einen Abschluss von mindestens i −1 zu dieser Zeit. Da Bäume nur dann kombiniert werden, wenn die Grade ihrer Wurzeln gleich sind, muss es gewesen sein, dass y i zu dem Zeitpunkt, als es a wurde, auch einen Grad von mindestens i -1 hatte Kind von x . Von dieser Zeit bis zur Gegenwart kann y i nur höchstens ein Kind verloren haben (wie durch das Markierungsverfahren garantiert), und daher ist sein derzeitiger Abschluss c i ] ist mindestens i −2. Dies beweist die Behauptung .

Da die Höhen aller y i streng kleiner sind als die von x können wir die induktive Hypothese auf sie anwenden, um Größe [19459016zuerhalten] ( y i ) ≥ F c i +2 F ( i – 2) + 2 = F i . Die Knoten x und y 1 tragen jeweils mindestens 1 zur Größe ( x ) bei

Größe ( x ) 2 + i = 2 d size ( y i ) ] ≥ 2 + i = 2 d F i = 1 19659082] + i = 0 d F i . { displaystyle { textbf {size} (x ) geq 2+ sum _ {i = 2} ^ {d} { textbf {size}} (y_ {i}) geq 2+ sum _ {i = 2} ^ {d} F_ {i} = 1 + sum _ {i = 0} ^ {d} F_ {i}.}

Eine Routineinduktion beweist, dass

1 + i = 0 d F i = ] F d + 2 { displaystyle 1+ sum _ {i = 0} ^ {d} F_ {i} = F_ {d + 2}}

für jeden

d 0 { displaystyle d geq 0}

was die gewünschte Untergrenze für die Größe ( x ) ergibt.

Worst Case [ Bearbeiten

Obwohl Fibonacci-Haufen sehr effizient aussehen, weisen sie die folgenden zwei Nachteile auf (wie in der Veröffentlichung "The Pairing Heap: A new form of Self Adjusting" erwähnt) Heap "):" Sie sind kompliziert in der Codierung. Außerdem sind sie in der Praxis weniger effizient als die theoretisch weniger effizienten Formen von Heaps, da sie in ihrer einfachsten Version die Speicherung und Bearbeitung von vier Zeigern pro Knoten erfordern. im Vergleich zu den zwei oder drei Zeigern pro Knoten, die für andere Strukturen benötigt werden ". [3] Diese anderen Strukturen werden als Binärhaufen, Binomialhaufen, Paarungshaufen, Brodalhaufen und Rangpaarungshaufen bezeichnet.

Obwohl die Gesamtlaufzeit einer Sequenz von Operationen, die mit einer leeren Struktur beginnen, durch die oben angegebenen Grenzen begrenzt ist, können einige (sehr wenige) Operationen in der Sequenz sehr lange dauern, bis sie abgeschlossen sind (insbesondere müssen Lösch- und Löschminimum linear sein Laufzeit im schlimmsten Fall). Aus diesem Grund sind Fibonacci-Heaps und andere amortisierte Datenstrukturen möglicherweise nicht für Echtzeitsysteme geeignet. Es ist möglich, eine Datenstruktur zu erstellen, die die gleiche Leistung im ungünstigsten Fall aufweist, wie der Fibonacci-Heap die Leistung amortisiert hat. Eine solche Struktur, die Brodal-Warteschlange [4] ist nach den Worten des Schöpfers "ziemlich kompliziert" und "[not] in der Praxis anwendbar". Der 2012 erstellte strenge Fibonacci-Haufen [5] ist eine einfachere (im Vergleich zu Brodals) Struktur mit denselben Worst-Case-Grenzen. Es ist nicht bekannt, ob der strenge Fibonacci-Haufen in der Praxis effizient ist. Die von Driscoll et al. eine gute Worst-Case-Leistung für alle Fibonacci-Heap-Operationen mit Ausnahme von Merge liefern.

Zusammenfassung der Laufzeiten [ ]

Hier sind Zeitkomplexitäten [6] verschiedener Heap-Datenstrukturen. Funktionsnamen setzen einen Min-Heap voraus. Zur Bedeutung von " O ( f )" und " Θ ( f )" siehe Big O-Notation.

Praktische Überlegungen Bearbeiten ]

Fibonacci-Heaps gelten in der Praxis als langsam [14] da sie viel Speicher pro Knoten und eine hohe Konstante benötigen Faktoren für alle Operationen. [15] Jüngste experimentelle Ergebnisse legen nahe, dass Fibonacci-Haufen in der Praxis effizienter sind als die meisten späteren Derivate, einschließlich Beben-Haufen, Verstoß-Haufen, strenger Fibonacci-Haufen, Rang-Paar-Haufen, aber weniger effizient als entweder Paar-Haufen oder Array-basierte Haufen. [16]

Referenzen [ edit ]

  1. ^ Cormen, Thomas H .; Leiserson, Charles E .; Rivest, Ronald L .; Stein, Clifford (2001) [1990]. "Kapitel 20: Fibonacci-Haufen". Einführung in Algorithmen (2. Aufl.). MIT Press und McGraw-Hill. S. 476–497. ISBN 0-262-03293-7 . Dritte Auflage S. 518.
  2. ^ a b c Fredman, Michael Lawrence; Tarjan, Robert E. (Juli 1987). "Fibonacci-Heaps und ihre Verwendung in verbesserten Algorithmen zur Netzwerkoptimierung" (PDF) . Zeitschrift der Association for Computing Machinery . 34 (3): 596–615. CiteSeerX 10.1.1.309.8927 . doi: 10.1145 / 28869.28874.
  3. ^ Fredman, Michael L .; Sedgewick, Robert; Sleator, Daniel D .; Tarjan, Robert E. (1986). "Der Paarungshaufen: eine neue Form des sich selbst anpassenden Haufens" (PDF) . Algorithmica . 1 (1): 111–129. doi: 10.1007 / BF01840439.
  4. ^ Gerth Stølting Brodal (1996), "Worst-Case Efficient Priority Queues", Proc. 7. ACM-SIAM-Symposium zu diskreten Algorithmen Gesellschaft für industrielle und angewandte Mathematik: 52–58, CiteSeerX 10.1.1.43.8133 doi: 10.1145 / 313852.313883, ISBN 0-89871- 366-8
  5. ^ Brodal, GSL; Lagogiannis, G; Tarjan, R. E. (2012). Strenge Fibonacci-Haufen (PDF) . Vorträge des 44. Symposiums zur Theorie des Rechnens – STOC '12. p. 1177. doi: 10.1145 / 2213977.2214082. ISBN 978-1-4503-1245-5 .
  6. ^ a b c d Cormen, Thomas H .; Leiserson, Charles E .; Rivest, Ronald L. (1990). Einführung in Algorithmen (1. Aufl.). MIT Press und McGraw-Hill. ISBN 0-262-03141-8 .
  7. ^ Iacono, John (2000), "Verbesserte Obergrenzen für die Paarung von Haufen", Proc. 7. Skandinavischer Workshop zur Algorithmentheorie (PDF) Lecture Notes in Computer Science, 1851 Springer-Verlag, S. 63–77, arXiv: 1110.4428 CiteSeerX 10.1.1.748.7812 doi: 10.1007 / 3-540-44985-X_5, ISBN 3-540-67690-2
  8. ^ Fredman, Michael Lawrence (Juli 1999). "Über die Effizienz der Paarung von Haufen und verwandten Datenstrukturen" (PDF) . Zeitschrift der Association for Computing Machinery . 46 (4): 473–501. doi: 10.1145 / 320211.320214.
  9. ^ Pettie, Seth (2005). Auf dem Weg zu einer endgültigen Analyse von Paarungshaufen (PDF) . FOCS '05 Proceedings of the 46. Annual IEEE Symposium on Foundations of Computer Science. S. 174–183. CiteSeerX 10.1.1.549.471 . doi: 10.1109 / SFCS.2005.75. ISBN 0-7695-2468-0 .
  10. ^ Brodal, Gerth S. (1996), "Worst-Case Efficient Priority Queues" (PDF) Proc. 7. jährliches ACM-SIAM-Symposium über diskrete Algorithmen S. 52–58
  11. ^ Goodrich, Michael T .; Tamassia, Roberto (2004). "7.3.6. Bottom-Up-Heap-Konstruktion". Datenstrukturen und Algorithmen in Java (3. Aufl.). S. 338–341. ISBN 0-471-46983-1 .
  12. ^ Haeupler, Bernhard; Sen, Siddhartha; Tarjan, Robert E. (November 2011). "Rangpaarungshaufen" (PDF) . SIAM J. Computing . 40 (6): 1463–1485. doi: 10.1137 / 100785351.
  13. ^ Brodal, Gerth Stølting; Lagogiannis, George; Tarjan, Robert E. (2012). Strenge Fibonacci-Haufen (PDF) . Vorträge des 44. Symposiums zur Theorie des Rechnens – STOC '12. S. 1177–1184. CiteSeerX 10.1.1.233.1740 . doi: 10.1145 / 2213977.2214082. ISBN 978-1-4503-1245-5 .
  14. ^ http://www.cs.princeton.edu/~wayne/kleinberg-tardos/pdf/FibonacciHeaps.pdf, p . 79
  15. ^ http://web.stanford.edu/class/cs166/lectures/07/Small07.pdf, p. 72
  16. ^ Larkin, Daniel; Sen, Siddhartha; Tarjan, Robert (2014). "Eine empirische Back-to-Basics-Studie zu Priority Queues". Proceedings of the Sixteenth Workshop on Algorithm Engineering and Experiments : 61–72. arXiv: 1403.0252 . doi: 10.1137 / 1.9781611973198.7.

Externe Links [ bearbeiten ]


Kompatibles Time-Sharing-System – Enzyklopädie

Das kompatible Time-Sharing-System ( CTSS ) war eines der ersten Time-Sharing-Betriebssysteme. Es wurde am MIT Computation Center entwickelt. CTSS wurde erstmals im November 1961 auf der IBM 709 des MIT demonstriert. Der Dienst für MIT-Benutzer begann im Sommer 1963 und wurde bis 1973 betrieben [1]. Während eines Teils dieser Zeit betrieb das einflussreiche Projekt MAC des MIT auch einen CTSS-Dienst, aber das System breitete sich nicht über diese beiden Standorte hinaus aus.

CTSS wurde in einem Artikel beschrieben, der auf der Frühjahrs-Computerkonferenz 1962 vorgestellt wurde, und beeinflusste den Entwurf anderer früher Systeme zur gemeinsamen Nutzung von Zeit erheblich.

Experimentelles Timesharing-System

John Backus sagte in der Sommersitzung 1954 am MIT: "Durch Timesharing kann ein großer Computer als mehrere kleine Computer verwendet werden. es müsste für jeden Benutzer eine Lesestation geben. "[2] Computer wie IBM 704 waren zu dieser Zeit nicht leistungsfähig genug, um ein solches System zu implementieren. Ende 1958 fügte das MIT-Rechenzentrum jedoch eine Schreibmaschineneingabe hinzu 704 mit der Absicht, dass ein Programmierer oder Bediener "zusätzliche Antworten von der Maschine erhalten kann, wenn andere Programme die Maschine gleichzeitig verwenden". [3]

Im Juni 1959, Christopher Strachey veröffentlichte auf der UNESCO-Konferenz für Informationsverarbeitung in Paris einen Artikel über die gemeinsame Nutzung von Zeit in großen schnellen Computern, in dem er einen Programmierer vorstellte, der ein Programm an einer Konsole (wie einem Teletyp) debuggt, die mit dem Computer verbunden ist, während ein anderes Programm auf dem Computer ausgeführt wird im sa me time. [4][5] Das Debuggen von Programmen war zu dieser Zeit ein wichtiges Problem, da es bei der Stapelverarbeitung oft einen Tag dauerte, bis ein geänderter Code übermittelt und die Ergebnisse abgerufen wurden. John McCarthy schrieb ein Memo darüber am MIT, woraufhin ein vorläufiger Studienausschuss und ein Arbeitsausschuss am MIT eingerichtet wurden, um die gemeinsame Zeitnutzung zu entwickeln. Die Ausschüsse sahen vor, dass viele Benutzer gleichzeitig den Computer benutzen, beschlossen die Einzelheiten der Implementierung eines solchen Systems am MIT und begannen mit der Entwicklung des Systems.

Im Juli 1961 [6] waren auf der IBM 709 des Computation Centers einige Befehle für die gemeinsame Nutzung von Zeit ausgeführt worden, und im November 1961 demonstrierte Fernando J. Corbató am MIT, was als "experimentelles Zeitteilungssystem" bezeichnet wurde. Am 3. Mai 1962 veröffentlichten FJ Corbató, MM Daggett und RC Daley auf der Spring Joint Computer Conference einen Artikel über dieses System. [7] Robert C. Daley, Peter R. Bos und mindestens 6 andere Programmierer implementierten das Betriebssystem. teilweise basierend auf dem Fortran Monitor System.

Das System verwendete eine von Herbert M. Teager modifizierte IBM 7090 mit drei zusätzlichen Flexowritern für Benutzerkonsolen und möglicherweise einem Timer. Jeder der drei Benutzer verfügte über zwei Bandeinheiten, eine für das Dateiverzeichnis des Benutzers und eine zum Speichern des Kerns (Programm im Speicher). Es gab auch eine Bandeinheit für die Systembefehle, es gab keine Plattenlaufwerke. Der Speicher war 27 k Wörter (36-Bit-Wörter) für Benutzer und 5 k Wörter für den Supervisor (Betriebssystem). Die Eingabe von den Konsolen wurde durch Interrupts in die Puffer im Supervisor geschrieben, und wenn ein Rückkehrzeichen empfangen wurde, wurde die Steuerung dem Supervisor übergeben, der den laufenden Code auf das Band ablegte und entschied, was als nächstes ausgeführt werden sollte. Die damals implementierten Konsolenbefehle waren Anmelden, Abmelden, Eingeben, Bearbeiten, Fap, Verrückt, Verrückt, Laden, Verwenden, Starten, Überspringen, Listf, Printf, XDump und Xundump .

Dies war die erste Version des kompatiblen Time-Sharing-Systems. Dies war anscheinend die erste öffentliche Demonstration von Timesharing; Es gibt andere Ansprüche, aber sie beziehen sich auf Spezialsysteme oder es wurden keine bekannten Veröffentlichungen veröffentlicht. Die "Kompatibilität" von CTSS bestand in Hintergrundjobs, die auf demselben Computer ausgeführt wurden und in der Regel mehr Rechenressourcen als die Timesharing-Funktionen verwendeten.

Funktionen Bearbeiten

  • CTSS verfügte über eines der ersten Dienstprogramme zur computergestützten Textformatierung, RUNOFF (der Nachfolger von DITTO).
  • CTSS verfügte über eines der ersten Benutzer-Messaging-Implementierungen, die möglicherweise E-Mails erfinden. [8]
  • Louis Pouzin, Mitarbeiter des MIT Computation Center, erstellte für CTSS einen Befehl namens RUNCOM, der eine Liste der in einer Datei enthaltenen Befehle ausführte. (Später erstellte er ein Design für die von Glenda Schroeder implementierte Multics-Shell, das wiederum Unix-Shell-Skripte inspirierte.) RUNCOM ermöglichte auch die Ersetzung von Parametern.
  • CTSS verfügte über den Texteditor QED, den Vorgänger von ed, vi und vim , mit regulären Ausdrücken, die von Ken Thompson hinzugefügt wurden.
  • CTSS war das erste Computersystem, das die Passwortanmeldung implementierte. [9][10]

Implementierung Bearbeiten

Kernel edit ]

CTSS verwendete einen modifizierten IBM 7090-Mainframe-Computer mit zwei 32.768 (32K) 36-Bit-Wort-Bänken mit Kernspeicher anstelle des normalen. [11] Eine Bank war für die gemeinsame Zeitnutzung reserviert Überwachungsprogramm, das andere für Anwenderprogramme. CTSS hatte einen Protected-Mode-Kernel, dessen Supervisor-Funktionen im A-Core (Speicherbank A) nur durch Software-Interrupts aufgerufen werden konnten, wie in den modernen Betriebssystemen. Für Software-Interrupts wurden speicherschutzbedingte Interrupts verwendet. [4] Die Prozessorzuordnungsplanung mit einer Quantenzeiteinheit von 200 ms wurde von einer mehrstufigen Rückmeldungswarteschlange gesteuert die Fähigkeit, bestimmte Anweisungen abzufangen.

Supervisor-Subroutinen [ Bearbeiten ]

  • RDFLXA – Lese eine Eingabezeile von der Konsole
  • WRFLX – Schreibe eine Ausgabezeile zur Konsole
  • DEAD – Versetze den Benutzer in einen toten Zustand , ohne Programm im Speicher
  • DORMNT – Den Benutzer in den Ruhezustand versetzen, mit Programm im Speicher
  • GETMEM – Größe der Speicherzuordnung ermitteln
  • SETMEM – Größe der Speicherzuordnung festlegen
  • TSSFIL – Erhalten Sie Zugriff auf die CTSS-Systemdateien auf der Festplatte.
  • USRFIL – Wechseln Sie zurück in das eigene Verzeichnis.
  • GETBRK – Holen Sie sich den Befehlsstandortzähler beim Beenden.

Programmiersprachen Bearbeiten ]

CTSS hatte zunächst nur einen Assembler FAP und einen Compiler MAD. Fortran II-Code könnte auch in einen MAD-Code übersetzt werden. Später wurde die Hälfte des Systems in MAD geschrieben. Später gab es andere Programmiersprachen wie LISP und eine Version von ALGOL.

Dateisystem [ Bearbeiten ]

Jeder Benutzer hatte ein eigenes Verzeichnis, und es gab auch Verzeichnisse für Personengruppen, die dieselbe "Problemnummer" hatten. Jede Datei hatte zwei Namen, der zweite Name ähnelte der heutigen Erweiterung. Zu Beginn konnte jede Datei einen von vier Modi haben: Temporär, Permanent, Nur-Lese-Klasse 1 und Nur-Lese-Klasse 2. Die Nur-Lese-Klasse 2 unterschied sich darin, dass der Benutzer den Modus dieser Dateien nicht ändern konnte. Dateien können auch aus anderen Verzeichnissen als dem Benutzerverzeichnis verlinkt werden. Eine Verzeichnisliste von listf :

	 10 DATEIEN 20 VERWENDETE SPUREN
DATUM NAME MODUS NR. SPUREN
20.05.63 MAIN MAD P 15
5/17/63 DPFA SYMTB P 1
17.05.63 DPFA BSS P 1
17.05.63 DPFA FAP P 2

Disk-Control-Subroutinen [ edit ]

  • .DUMP – Einen fortlaufenden Block in die Datei schreiben
  • .LOAD – Einen fortlaufenden Block aus der Datei laden
  • .ASIGN – Prepares Datei zum Schreiben
  • .APEND – Bereitet Datei zum Anhängen vor
  • .SEEK – Bereitet Datei zum Lesen vor
  • .RELRW – Bereitet Datei zum Lesen und Schreiben vor
  • .WRITE – Schreiben von Daten an eine relative Position in Datei [19659018] .READK – Daten von einer relativen Position in der Datei lesen
  • .FILE – Schreiben der Datei beenden
  • .ENDRD – Lesen der Datei beenden
  • .DLETE – Datei löschen
  • .RENAM – Umbenennen a file and change its mode
  • .FILDR – Kopie des Benutzerdateiverzeichnisses abrufen
  • .FSTAT – Informationen zu einer Datei abrufen

Konsolenbefehle bearbeiten

  • login – Beim System anmelden
  • logout – Vom System abmelden
  • listf – Dateien im Verzeichnis auflisten
  • input – Input sourc e code, fixed size lines
  • edit – Quellcode im BASIC-Stil mit Zeilennummern bearbeiten
  • printf – Datei ab Zeilennummer drucken
  • fap – FAP-Assembler
  • mad – MAD-Compiler
  • madtrn – Fortran II to MAD-Übersetzer
  • Laden – Laden von Binärdateien (Verknüpfung im Speicher)
  • Verwenden – Laden fehlender Binärdateien
  • Starten – Programm ausführen, das in den Speicher geladen wurde
  • Speichern – Programm im Speicher in Datei speichern [19659018] resume – Lädt das gespeicherte Programm und setzt dessen Ausführung fort
  • pm – Abrufen von Post-Mortem-Informationen des Programms im Speicher
  • patch – Bearbeiten des Speichers
  • tra – Erstellen einer Übertragung an eine relative Position in einem Programm
  • stopat – Übertragung erstellen, um das Programm an einem Speicherort anzuhalten
  • . umbenennen – Datei umbenennen
  • . chmode – Modus der Datei ändern
  • . delete – Datei löschen, hatte * Wildcards
  • . split – Datei teilen
  • . combin – Fügt Dateien, auch Binärdateien, zu Bibliotheken zusammen
  • Abrufen der aktuellen Maschinenzustände
  • octlk – Druckspeicher
  • memo – Eingeben von Textdateien mit variabler Zeilengröße
  • modify – Bearbeiten von Textdateien, ähnlich wie edit
  • ditto – Drucken von Textdateien mit Formatierung (Fußnoten, Seiten) )

Peripheriegeräte [ ]

Bei der Eingabe / Ausgabe-Hardware handelte es sich hauptsächlich um Standard-IBM-Peripheriegeräte. Dazu gehörten sechs Datenkanäle, die Folgendes verbinden:

  • Drucker, Lochkartenleser und Locher
  • IBM 729-Bandlaufwerke, ein IBM 1301-Plattenspeicher, der später auf IBM 1302 mit einer Kapazität von 38 Millionen Wörtern aufgerüstet wurde
  • Ein IBM 7320-Trommelspeicher mit 186.000 Wörtern, der geladen werden konnte 32-K-Wort-Speicherbank in einer Sekunde (später auf 0,25 Sekunden aufgerüstet)
  • Zwei benutzerdefinierte Hochgeschwindigkeits-Vektorgrafikanzeigen
  • Eine IBM 7750-Übertragungssteuereinheit, die bis zu 112 Fernschreiberterminals unterstützen kann, einschließlich IBM 1050 Selectrics und Teletyp Modell 35s. Einige der Terminals befanden sich fern und auf das System konnte über die öffentlichen Telex- und TWX-Netze zugegriffen werden.

Einflüsse edit

Multics, das ebenfalls von Project MAC entwickelt wurde , wurde in den 1960er Jahren als Nachfolger von CTSS gestartet – und inspirierte wiederum die Entwicklung von Unix im Jahr 1969. Einer der technischen Begriffe, die diese Systeme von CTSS übernommen haben, ist daemon .

Inkompatibles Timesharing-System (ITS), ein weiteres frühes, revolutionäres und einflussreiches MIT-Timesharing-System, wurde von Personen entwickelt, die mit der Anweisung von CTSS und später von Multics nicht einverstanden waren. der Name war eine Parodie auf "CTSS", später war der Name "Unix" eine Parodie auf "Multics". [12]

Siehe auch [ bearbeiten ]

Referenzen edit ]

  1. ^ Kompatibles Timesharing-System (1961-1973): Festschrift zum fünfzigsten Jahrestag, David Walden und Tom Van Vleck (Herausgeber), IEEE Computer Society, 2011
  2. ^ Backus, John, Computer Advanced Coding Techniques MIT 1954, Seite 16-2. Die erste bekannte Beschreibung von Computer-Time-Sharing.
  3. ^ Fortschrittsbericht Nr. 4 der Forschungs- und Bildungsaktivitäten in der Maschinenberechnung durch die kooperierenden Colleges von New England Dezember 1958, [19659116] ^ a b F. J. Corbató et al. Das kompatible Time-Sharing-System A Programmer's Guide (MIT Press, 1963) ISBN 978-0-262-03008-3. Beschreiben Sie das System und seine Befehle.
  4. ^ John McCarthy, Erinnerungen an die Geschichte des Timesharing, archiviert am 20.10.2007 auf der Wayback-Maschine (Stanford University 1983).
  5. ^ [19659111] Fortschrittsbericht Nummer 9 der Forschungs- und Bildungsaktivitäten in der Maschinenberechnung durch die kooperierenden Colleges von New England Juli 1961
  6. ^ F. J. Corbató, MM Daggett, RC Daley, Ein experimentelles Time-Sharing-System (IFIPS 1962).
  7. ^ Tom Van Vlecks Memoir der Geschichte der elektronischen Post
  8. ^ [19659111] McMillan, Robert (27. Januar 2012). "Das weltweit erste Computer-Passwort? Es war auch nutzlos". Kabelmagazin . Abgerufen am 22. März 2019 .
  9. ^ Hunt, Troy (26. Juli 2017). "Passwörter entwickelt: Authentifizierungsanleitung für die Neuzeit" . Abgerufen am 22. März 2019 .
  10. ^ a b Silberschatz, Abraham; Peterson, James L. (Juni 1988). "13: Historische Perspektive". Betriebssystemkonzepte . p. 514. ISBN 0-201-18760-4 .
  11. ^ Levy, Steven (2010). "Gewinner und Verlierer". Hacker: Helden der Computerrevolution – 25th Anniversary Edition (1. Aufl.). Sebastopol, Kalifornien: O'Reilly Media. S. 85–102. ISBN 978-1449388393 .

Weiterführende Literatur [ Bearbeiten

Externe Links Bearbeiten

  • Ein Experimental Timesharing-System, Fernando J. Corbato, Marjorie Merwin Daggett, Robert C. Daley, Rechenzentrum, Massachusetts Institute of Technology, Cambridge, Massachusetts
  • Kompatibles Timesharing-System (1961-1973): Festschrift zum fünfzigsten Jahrestag
  • Oral History Interview mit John McCarthy vom Charles Babbage Institute der University of Minnesota. Erläutert Computerentwicklungen am MIT, einschließlich Timesharing.
  • IBM 7094 und CTSS: Persönliche Erinnerungen von Tom Van Vleck, einem Systemprogrammierer auf CTSS.
  • Der Ursprung der Shell beschreibt die Entwicklung von RUNCOM zur modernen Shell.
  • CTSS-Quelle in Paul Pierces Sammlung.
  • CIO: 40 Jahre Multics, 1969-2009: Interview mit CTSS und Multics-Entwickler Fernando J. Corbato.
  • Interview mit Fernando J. Corbató, Charles Babbage Institute, University of Minnesota. Erläutert zahlreiche Computerentwicklungen am MIT, darunter CTSS.
  • Interview mit Robert M. Fano vom Charles Babbage Institute der University of Minnesota zur Oral History. Erläutert Computerentwicklungen am MIT, einschließlich CTSS.
  • Dave Pitts 'IBM 7094-Unterstützung – Enthält einen Simulator, einen Cross-Assembler und einen Linker, mit denen CTSS erstellt und ausgeführt werden kann. Die Site enthält auch eine CTSS-Quelle. Das CTSS funktioniert vollständig auf dem Simulator.


Binomialhaufen – Enzyklopädie

In der Informatik ist ein Binomial-Heap ein Heap, der einem Binär-Heap ähnelt, aber auch das schnelle Zusammenführen von zwei Heaps unterstützt. Dies wird durch eine spezielle Baumstruktur erreicht. Es ist wichtig als Implementierung des abstrakten Datentyps für zusammenführbaren Heap (auch als zusammenführbarer Heap bezeichnet), der eine Prioritätswarteschlange ist, die die Zusammenführung unterstützt. Binomialhaufen wurden 1978 von J. Vuillemin [1] erfunden.

Binomial-Heap Bearbeiten

Ein Binomial-Heap wird als eine Menge von Binomial-Bäumen implementiert (vergleiche mit einem binären Heap mit der Form eines single binary tree), die rekursiv wie folgt definiert sind:

  • Ein Binomialbaum der Ordnung 0 ist ein einzelner Knoten
  • Ein Binomialbaum der Ordnung k hat einen Wurzelknoten, dessen Kinder Wurzeln von Binomialbäumen der Ordnung k −1 sind , k −2, …, 2, 1, 0 (in dieser Reihenfolge).

Binomialbäume der Ordnung 0 bis 3: Jeder Baum hat einen Wurzelknoten mit Teilbäumen aller Binomialbäume niedrigerer Ordnung Bäume, die hervorgehoben wurden. Beispielsweise ist der Binomialbaum der Ordnung 3 mit einem Binomialbaum der Ordnung 2, 1 und 0 (jeweils hervorgehoben als Blau, Grün und Rot) verbunden.

Ein Binomialbaum der Ordnung k hat 2 k Knoten, Höhe k .

Aufgrund seiner einzigartigen Struktur kann ein Binomialbaum der Ordnung k aus zwei Bäumen der Ordnung k −1 trivial konstruiert werden, indem einer von ihnen als das am weitesten links stehende Kind der Wurzel des anderen Baumes. Dieses Merkmal ist von zentraler Bedeutung für den Zusammenführungsvorgang eines Binomialhaufens, was sein Hauptvorteil gegenüber anderen herkömmlichen Haufen ist.

Der Name stammt von der Form: ein Binomialbaum der Ordnung

n { displaystyle n}

hat

( n d ) { displaystyle { tbinom {n} {d}}

Knoten in der Tiefe

d { displaystyle d}

Binomialkoeffizient.)

Struktur eines Binomial-Heaps

Ein Binomial-Heap wird als eine Gruppe von Binomial-Bäumen implementiert, die die Binomial-Heap-Eigenschaften erfüllen :

  • Jeder Binomialbaum in einem Heap gehorcht der Minimum-Heap-Eigenschaft : Der Schlüssel eines Knotens ist größer oder gleich dem Schlüssel seines übergeordneten Knotens.
  • Es kann nur einen der folgenden Werte geben: eins oder null Binomialbäume für jede Reihenfolge, einschließlich nullter Ordnung.

Die erste Eigenschaft stellt sicher, dass die Wurzel jedes Binomialbaums den kleinsten Schlüssel im Baum enthält, der für den gesamten Heap gilt .

Die zweite Eigenschaft impliziert, dass ein Binomialhaufen mit n Knoten aus höchstens 1 + log 2 n Binomialbäumen besteht. Tatsächlich werden die Anzahl und die Reihenfolge dieser Bäume eindeutig durch die Anzahl der Knoten bestimmt n : Jeder Binomialbaum entspricht den 1 Bits in der binären Darstellung der Zahl n . Zum Beispiel ist die Zahl 13 1101 in binär,

2 3 + 2 2 + 2 0 { displaystyle 2 ^ {3} + 2 ^ {2} + 2 ^ {0}}

und somit besteht ein Binomialheap mit 13 Knoten aus drei Binomialbäumen von Ordnungen 3, 2 und 0 (siehe Abbildung unten).

 Beispiel eines Binomial-Heaps "src =" http://upload.wikimedia.org/wikipedia/commons/thumb/6/61/Binomial-heap-13.svg/325px-Binomial-heap-13.svg. png "decoding =" async "width =" 325 "height =" 217 "srcset =" // upload.wikimedia.org/wikipedia/commons/thumb/6/61/Binomial-heap-13.svg/488px-Binomial- heap-13.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/61/Binomial-heap-13.svg/650px-Binomial-heap-13.svg.png 2x "Daten -file-width = "498" data-file-height = "333
Beispiel für einen Binomial-Heap mit 13 Knoten mit unterschiedlichen Schlüsseln.
Der Heap besteht aus drei Binomial-Bäumen mit den Ordnungen 0, 2 und 3.

Implementierung [ Bearbeiten ]

Da für keine Operation ein wahlfreier Zugriff auf die Wurzelknoten der Binomialbäume erforderlich ist, können die Wurzeln der Binomialbäume in einer verknüpften Liste nach gespeichert werden aufsteigende Ordnung des Baumes.

Zusammenführen [ Bearbeiten ]

Um zwei Binomialbäume derselben Reihenfolge zusammenzuführen, vergleichen Sie zuerst den Stammschlüssel. Seit 7> 3 wird der schwarze Baum links (mit Wurzelknoten 7) als Teilbaum an den grauen Baum rechts (mit Wurzelknoten 3) angehängt. Das Ergebnis ist ein Baum der Ordnung 3.

Wie oben erwähnt, ist die einfachste und wichtigste Operation das Zusammenführen von zwei Binomialbäumen derselben Ordnung in einem Binomialhaufen. Aufgrund der Struktur von Binomialbäumen können sie trivial zusammengeführt werden. Da der Stammknoten das kleinste Element in der Struktur ist, ist der kleinere der beiden Schlüssel der Mindestschlüssel und wird zum neuen Stammknoten. Dann wird der andere Baum ein Teilbaum des kombinierten Baums. Diese Operation ist grundlegend für das vollständige Zusammenführen von zwei Binomialheaps.

 function  mergeTree (p, q)
     if  p.root.key <= q.root.key
         return  p.addSubTree (q)
     else 
         return  q.addSubTree (p)

Dies zeigt die Fusion zweier Binomialhaufen. Dies wird erreicht, indem zwei Binomialbäume derselben Ordnung nacheinander zusammengeführt werden. Wenn der resultierende zusammengeführte Baum die gleiche Reihenfolge wie ein Binomialbaum in einem der beiden Haufen hat, werden diese beiden erneut zusammengeführt.

Das Zusammenführen zweier Haufen ist möglicherweise das interessanteste und kann das interessanteste sein wird in den meisten anderen Vorgängen als Unterprogramm verwendet. Die Root-Listen beider Heaps werden auf ähnliche Weise wie beim Merge-Algorithmus gleichzeitig durchlaufen.

Wenn nur einer der Haufen einen Ordnungsbaum enthält j wird dieser Baum auf den zusammengeführten Haufen verschoben. Wenn beide Heaps einen Baum der Ordnung j enthalten, werden die beiden Bäume zu einem Baum der Ordnung j +1 zusammengeführt, so dass die Minimum-Heap-Eigenschaft erfüllt ist. Beachten Sie, dass es später möglicherweise erforderlich sein kann, diesen Baum mit einem anderen Baum der Ordnung j +1 zusammenzuführen, der in einem der Haufen vorhanden ist. Im Verlauf des Algorithmus müssen höchstens drei Bäume in beliebiger Reihenfolge untersucht werden (zwei aus den beiden Haufen, die wir zusammenführen, und einer aus zwei kleineren Bäumen).

Da jeder Binomialbaum in einem Binomialheap einem Bit in der Binärdarstellung seiner Größe entspricht, besteht eine Analogie zwischen dem Zusammenführen von zwei Heaps und dem binären Addieren der Größen der beiden Heaps , von rechts nach links. Wenn während der Addition ein Übertrag auftritt, entspricht dies einer Zusammenführung von zwei Binomialbäumen während der Zusammenführung.

Jeder Baum hat höchstens log n und daher ist die Laufzeit O (log n ).

 Funktion  Zusammenführen (p, q)
     während   nicht  (p.end ()  und  q.end ())
        tree = mergeTree (p.currentTree (), q.currentTree ())
        
         if   not  heap.currentTree (). Empty ()
            tree = mergeTree (tree, heap.currentTree ())
        
        heap.addTree (Baum)
        heap.next (); p.next (); q.next ()

Einfügen [ Bearbeiten ]

Sie können ein neues Element in einen Heap einfügen, indem Sie einfach einen neuen Heap erstellen, der nur dieses Element enthält, und ihn dann mit dem ursprünglichen Heap zusammenführen . Aufgrund der Zusammenführung benötigt das Einfügen die Zeit O (log n ). In einer Reihe von n aufeinanderfolgenden Insertionen hat Insert jedoch eine abgeschriebene Zeit von O (1) (d. H. Konstant).

Find minimum [ edit ]

Um das minimum -Element des Haufens zu finden, suchen Sie das Minimum unter den Wurzeln der Binomialbäume. Dies kann wieder leicht in O (log n ) Zeit gemacht werden, da es nur O (log n ) Bäume gibt und somit Wurzeln zu untersuchen.

Durch Verwenden eines Zeigers auf den Binomialbaum, der das Minimalelement enthält, kann die Zeit für diese Operation auf O (1) reduziert werden. Der Zeiger muss aktualisiert werden, wenn eine andere Operation als Minimum suchen ausgeführt wird. Dies kann in O (log n ) durchgeführt werden, ohne die Laufzeit einer Operation zu erhöhen.

Lösche Minimum [ edit ]

Um das Minimum-Element aus dem Haufen zu löschen, finde zuerst dieses Element, entferne es aus seinem Binomialbaum und erhalte a Liste seiner Teilbäume. Dann transformieren Sie diese Liste von Teilbäumen in einen separaten Binomialhaufen, indem Sie sie von der kleinsten in die größte Reihenfolge umordnen. Führen Sie dann diesen Haufen mit dem ursprünglichen Haufen zusammen. Da jede Wurzel höchstens log n Kinder hat, ist das Erstellen dieses neuen Heaps O (log n ). Das Zusammenführen von Heaps ist O (log n ), daher ist die gesamte Löschmindestoperation O (log n ).

 Funktion  deleteMin (Heap)
    min = heap.trees (). first ()
     für jeden  aktuellen  in  heap.trees ()
         Wenn  current.root <min.root dann  min = current
     für jeden  Baum  in  minTrees ()
        tmp.addTree (Baum)
    heap.removeTree (min)
    Zusammenführen (Heap, tmp)

Schlüssel verkleinern Bearbeiten

Nachdem der Schlüssel eines Elements verkleinert wurde, kann er kleiner als der Schlüssel des übergeordneten Elements werden, wodurch der Minimum-Heap verletzt wird Eigentum. Wenn dies der Fall ist, tauschen Sie das Element mit dem übergeordneten Element und möglicherweise auch mit dem übergeordneten Element usw. aus, bis die Minimum-Heap-Eigenschaft nicht mehr verletzt wird. Jeder Binomialbaum hat eine Höhe von höchstens log n daher dauert dies O (log n ).

Löschen [ Bearbeiten ]

Um ein Element aus dem Heap zu löschen, verringern Sie seinen Schlüssel auf negative Unendlichkeit (dh einen Wert, der niedriger ist als ein Element in den Haufen) und löschen Sie dann das Minimum im Haufen.

Zusammenfassung der Laufzeiten [ edit ]

Hier sind Zeitkomplexitäten [2] verschiedener Heap-Datenstrukturen. Funktionsnamen setzen einen Min-Heap voraus. Zur Bedeutung von " O ( f )" und " Θ ( f )" siehe Big O-Notation.

Anwendungen Bearbeiten

Siehe auch [ ]

[

  1. ^ Vuillemin, Jean (1. April 1978) ). Msgstr "Eine Datenstruktur zum Manipulieren von Prioritätswarteschlangen". Mitteilungen der ACM . 21 (4): 309–315. CiteSeerX 10.1.1.309.9090 . doi: 10.1145 / 359460.359478. ISSN 0001-0782.
  2. ^ a b c ] d Cormen, Thomas H .; Leiserson, Charles E .; Rivest, Ronald L. (1990). Einführung in Algorithmen (1. Aufl.). MIT Press und McGraw-Hill. ISBN 0-262-03141-8 .
  3. ^ Fredman, Michael Lawrence; Tarjan, Robert E. (Juli 1987). "Fibonacci-Heaps und ihre Verwendung in verbesserten Algorithmen zur Netzwerkoptimierung" (PDF) . Zeitschrift der Association for Computing Machinery . 34 (3): 596–615. CiteSeerX 10.1.1.309.8927 . doi: 10.1145 / 28869.28874.
  4. ^ Iacono, John (2000), "Verbesserte Obergrenzen für die Paarung von Haufen", Proc. 7. Skandinavischer Workshop zur Algorithmentheorie (PDF) Lecture Notes in Computer Science, 1851 Springer-Verlag, S. 63–77, arXiv: 1110.4428 CiteSeerX 10.1.1.748.7812 doi: 10.1007 / 3-540-44985-X_5, ISBN 3-540-67690-2
  5. ^ Fredman, Michael Lawrence (Juli 1999). "Über die Effizienz der Paarung von Haufen und verwandten Datenstrukturen" (PDF) . Zeitschrift der Association for Computing Machinery . 46 (4): 473–501. doi: 10.1145 / 320211.320214.
  6. ^ Pettie, Seth (2005). Auf dem Weg zu einer endgültigen Analyse von Paarungshaufen (PDF) . FOCS '05 Proceedings of the 46. Annual IEEE Symposium on Foundations of Computer Science. S. 174–183. CiteSeerX 10.1.1.549.471 . doi: 10.1109 / SFCS.2005.75. ISBN 0-7695-2468-0 .
  7. ^ Brodal, Gerth S. (1996), "Worst-Case Efficient Priority Queues" (PDF) ] Proc. 7. jährliches ACM-SIAM-Symposium über diskrete Algorithmen S. 52–58
  8. ^ Goodrich, Michael T .; Tamassia, Roberto (2004). "7.3.6. Bottom-Up-Heap-Konstruktion". Datenstrukturen und Algorithmen in Java (3. Aufl.). S. 338–341. ISBN 0-471-46983-1 .
  9. ^ Haeupler, Bernhard; Sen, Siddhartha; Tarjan, Robert E. (November 2011). "Rangpaarungshaufen" (PDF) . SIAM J. Computing . 40 (6): 1463–1485. doi: 10.1137 / 100785351.
  10. ^ Brodal, Gerth Stølting; Lagogiannis, George; Tarjan, Robert E. (2012). Strenge Fibonacci-Haufen (PDF) . Vorträge des 44. Symposiums zur Theorie des Rechnens – STOC '12. S. 1177–1184. CiteSeerX 10.1.1.233.1740 . doi: 10.1145 / 2213977.2214082. ISBN 978-1-4503-1245-5 .

Externe Links [ bearbeiten ]


Nicholas Ridley – Enzyklopädie

 Begriffsklärungssymbol

Begriffsklärungsseite mit Links zu Themen, auf die mit demselben Suchbegriff verwiesen werden könnte

Auf dieser Begriffsklärungsseite werden Artikel zu Personen mit demselben Namen aufgelistet. Wenn ein interner Link Sie hierher geführt hat, können Sie den Link so ändern, dass er direkt auf den gewünschten Artikel verweist.

Wappen von Quebec

Wappen von Quebec
 Armoiries du Québec.svg
Versionen
 Armoiries du Québec (1867-1939) .svg

Version 1868

Armiger Elisabeth II. Von Quebec
Adoptiert 1939
Crest Tudor Crown
Blazon In Fess, First Azure, Drei Fleurs-de-Lis Or; zweiter gules, ein Löwe passant Wächter des zweiten, bewaffnet und vom ersten gekränkt; drittens ein Zweig mit drei Zuckerahornblättern, nervös vom Acker.
Motto Je me souviens
(französisch für "ich erinnere mich")
Frühere Fassung ( s) Oder auf einem Fess Gules zwischen zwei Fleurs de Lis in Chief Azure und einem Zweig von drei Leaves of Maple, der Vert in die Basis gesteckt hat, einem Lion Passant Guardant. Or.

Das Wappen von Quebec (französisch: Armoiries du Québec ) wurde am 9. Dezember 1939 vom Ratsbeschluss der Regierung von Quebec angenommen, [1] und ersetzte die durch den königlichen Haftbefehl der Königin Victoria am 26. Mai zugewiesenen Waffen 1868. [2]

Symbolik [ Bearbeiten ]

Der Schild ist in drei horizontale Felder unterteilt:

Der Schild ist von der Tudor-Krone überragt und wird von einer silbernen Schriftrolle begleitet, die das Motto der Provinz trägt: Je me souviens (französisch für "Ich erinnere mich").

Das Wappen ist:

Tiercé en fasce; d'Azur, à trois Fleurs-de-lis d'Or; de gueules, à léopard d'or, armé et lampassé d'azur; Oder, eine Branche, die einen Erfolg mit einem dreifachen Feuille de sinople, aux nervures du champ. Timbré de la Couronne Royale. Es handelt sich um ein Produkt, das von JE ME SOUVIENS du même entworfen wurde.
(Abgestuft (in drei Teile unterteilt) in Fess, First Azure, Three Fleurs-de-Lis. Oder: Second Gules , ein goldener Löwe Passant Wächter des zweiten, bewaffnet und geschmachtet von der ersten, dritten, ein Zweig von drei Zucker Ahorn Blätter vert, nervös vom Feld. Mit der königlichen Krone versehen. Unter dem Schild, eine Schriftrolle argent Azurblau umrandet mit dem Motto Je me souviens desselben.]

Geschichte [

Erstes Wappen von Quebec
(1868– 1939)

Die erste Waffengewährung an die Provinz erfolgte 1868 durch Königin Victoria. Sie waren wie folgt gekennzeichnet:

Oder auf einem Fess Gules zwischen zwei Fleurs de Lis in Chief Azure und einem Zweig von drei Leaves of Maple rutschte Vert in die Basis, ein Lion Passant Guardant.

1939 nahm die Regierung von Quebec Waffen an Ratsbefehl, der die beiden blauen Lilie auf dem goldenen Feld durch das königliche Wappen von France Modern ersetzt. Quebec ist die einzige kanadische Provinz, die Waffen von sich aus angenommen hat. [1]

Die Bundesregierung ist in der Verwendung der beiden Varianten inkonsistent: Sie verwendet häufig die Variante von 1939, aber in einigen Fällen, wie zum Beispiel auf der Centennial Flame, auf Parliament Hill und das Abzeichen der Royal 22 e Régiment, es verwendet die 1868-Variante.

Referenzen [ bearbeiten ]

Externe Links [ bearbeiten ]


OSF / 1 – Enzyklopädie

OSF / 1 ist eine Variante des Unix-Betriebssystems, das von der Open Software Foundation in den späten 1980er und frühen 1990er Jahren entwickelt wurde. OSF / 1 ist eines der ersten Betriebssysteme, das den an der Carnegie Mellon University entwickelten Mach-Kernel verwendet. Es ist wahrscheinlich das bekannteste native Unix-Betriebssystem für DEC Alpha-Architektur-Systeme.

Nachdem AT & T UNIX System V an Novell verkauft und das rivalisierende Unix International-Konsortium aufgelöst hatte, stellte die Open Software Foundation 1994 die Finanzierung der Forschung und Entwicklung von OSF / 1 ein. Die Tru64-UNIX-Variante von OSF / 1 wurde bis 2012 von HP unterstützt.

Hintergrund [ Bearbeiten

1988 schloss sich die Digital Equipment Corporation (DEC) während der sogenannten "Unix-Kriege" IBM, Hewlett-Packard und anderen zur Gründung an die Open Software Foundation (OSF) zur Entwicklung einer Unix-Version mit dem Namen OSF / 1. Ziel war es, mit System V Release 4 von AT & T Corporation und Sun Microsystems zu konkurrieren, und es wurde argumentiert, dass ein primäres Ziel darin bestand, dass das Betriebssystem frei von geistigem Eigentum von AT & T ist. [1] Die Tatsache, dass OSF / 1 eins ist von den ersten Betriebssystemen, die den Mach-Kernel verwendet haben, wird als Unterstützung dieser Behauptung angeführt. Digital hat auch stark für OSF / 1 für Echtzeitanwendungen geworben, und da traditionelle UNIX-Implementierungen zur Zeit bestenfalls eine schlechte Echtzeitunterstützung bieten, ist die Echtzeit- und Multithreading-Unterstützung stark vom Mach-Kernel abhängig. Es enthält auch einen großen Teil des BSD-Kernels (basierend auf dem 4.3-Reno-Release), um die UNIX-API bereitzustellen. Seit seiner Verbreitung ist OSF / 1 neben System V und BSD die dritte Hauptversion von UNIX.

Herstellerversionen [ ]

DECs erste Veröffentlichung von OSF / 1 (OSF / 1 Release 1.0) im Januar 1992 ist für seine Reihe von MIPS-basierten DECstation-Workstations bestimmt, [2] ] Dies war jedoch nie ein vollständig unterstütztes Produkt. DEC portierte OSF / 1 auf seine neue Alpha AXP-Plattform als DEC OSF / 1 AXP Release 1.2, das im März 1993 veröffentlicht wurde. OSF / 1 AXP ist ein vollständiges 64-Bit-Betriebssystem. Ab OSF / 1 AXP V2.0 wurde auch die UNIX System V-Kompatibilität in das System integriert. Nachfolgende Versionen heißen Digital UNIX und später Tru64 UNIX.

HP hat auch einen OSF / 1-Port für die frühen HP 9000/700 Workstations auf Basis der PA-RISC 1.1-Architektur freigegeben. Dies wurde bald darauf aufgrund mangelnder Software- und Hardwareunterstützung im Vergleich zu konkurrierenden Betriebssystemen, insbesondere HP-UX, eingestellt. [3]

Im Rahmen der AIM-Allianz und der daraus resultierenden PowerOpen-Spezifikation Apple Computer beabsichtigt, A / UX 4.0 für seine PowerPC-basierten Macintosh-Systeme auf OSF / 1 zu basieren, [4] aber das Projekt wurde abgebrochen und PowerOpen veraltet.

IBM verwendete OSF / 1 als Basis für das AIX / ESA-Betriebssystem für System / 370- und System / 390-Großrechner. [5]

OSF / 1 wurde ebenfalls von Kendall Square Research portiert auf die proprietäre Prozessorarchitektur des KSR1-Supercomputers.

Die Open Software Foundation (ähnlich wie The Open Group) erstellte OSFMK, eine kommerzielle Version des Mach-Kernels zur Verwendung in OSF / 1. Es enthält anwendbaren Code aus dem Mach-4-Kernel der University of Utah (z. B. die "Shuttles" -Modifikation zur Beschleunigung der Nachrichtenübermittlung) und anwendbaren Code aus den vielen Mach-3.0-Varianten, die aus dem ursprünglichen Mach-3.0-Kernel der Carnegie Mellon University hervorgegangen sind. [19659017] Es besteht auch aus Verbesserungen, die vom OSF vorgenommen wurden, z. B. integrierte Kollokationsfunktion, Echtzeitverbesserungen und Umschreiben der IPC-RPC-Komponente für eine bessere Leistung. [8]

OSF / 1 AD Bearbeiten ]

OSF / 1 AD ( Advanced Development ) ist eine verteilte Version von OSF / 1, die von Locus Computing Corporation für massiv parallele Supercomputer entwickelt wurde. [9] Varianten von OSF / 1 AD sind auf mehreren solchen Systemen einschließlich Intel Paragon XP / S und ASCI Red, Convex Exemplar SPP-1200 (als SPP-UX ) und Hitachi SR2201 (als HI-UX MPP ).

Referenzen [ bearbeiten ]