DE69629540T2 - Verfahren und Gerät zum Sortieren von Elementen - Google Patents

Verfahren und Gerät zum Sortieren von Elementen Download PDF

Info

Publication number
DE69629540T2
DE69629540T2 DE69629540T DE69629540T DE69629540T2 DE 69629540 T2 DE69629540 T2 DE 69629540T2 DE 69629540 T DE69629540 T DE 69629540T DE 69629540 T DE69629540 T DE 69629540T DE 69629540 T2 DE69629540 T2 DE 69629540T2
Authority
DE
Germany
Prior art keywords
value
elements
result
level
column
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69629540T
Other languages
English (en)
Other versions
DE69629540D1 (de
Inventor
Jon C.R. Bennett
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Marconi Communications Inc
Original Assignee
Marconi Communications Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Marconi Communications Inc filed Critical Marconi Communications Inc
Application granted granted Critical
Publication of DE69629540D1 publication Critical patent/DE69629540D1/de
Publication of DE69629540T2 publication Critical patent/DE69629540T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/22Indexing scheme relating to groups G06F7/22 - G06F7/36
    • G06F2207/222Binary data tree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/22Indexing scheme relating to groups G06F7/22 - G06F7/36
    • G06F2207/226Priority queue, i.e. 1 word in, 1 word out sorter; Output word, i.e. min or max of words in memory
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99937Sorting

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

  • GEBIET DER ERFINDUNG
  • Die Erfindung betrifft eine Prioritätsschlange (Warteschlange). Die Erfindung betrifft insbesondere einen Algorithmus zum Implementieren einer Prioritätsschlange, der über den Speicherplatz hinaus, der zum Halten der Elemente einer Schlange erforderlich ist, sehr wenig Speicher benötigt. Mit diesem Algorithmus und paralleler Hardware ist es möglich, ohne Speicherlesevorgänge und mit einer konstanten Zahl von Speicherschreibvorgängen Elemente in die Schlange einzusetzen.
  • HINTERGRUND DER ERFINDUNG
  • In einer Prioritätsschlange müssen in der Regel vier Operationen ausgeführt werden, nämlich:
    • – das Finden des ersten Elements in der Schlange,
    • – das Einsetzen eines Elements in die Schlange,
    • – das Löschen eines Elements aus der Schlange, und
    • – das Verändern eines Elements in der Schlange.
  • Die Güte eines Algorithmus und die Qualität seiner Umsetzung kann man anhand der Wirksamkeit messen, mit der diese Operationen ausgeführt werden. Die Wirksamkeit bemisst sich nach der erforderlichen Zahl von Speicher-Schreib/Lese-Vorgängen und der nötigen Anzahl der Vergleichsoperationen. Als Beispiel betrachte man eine Prioritätsschlange, die als verkettete Liste von Elementen ausgeführt ist, die nach steigender Priorität sortiert sind. Das Einsetzen eines Elements erfordert das Durchlaufen der verketteten Liste bis die Position des Elements in der verketteten Liste gefunden ist, und dann das Einsetzen des Elements in die Liste. In gleicher Weise erfordert das Löschen eines Elements und das Verändern eines Elements ebenfalls das Durchlaufen der Liste bis das Element gefunden ist. Im sehlechtestmöglichen Fall ist die gesamte Elementliste zu durchlaufen.
  • Zusätzlich zur Wirksamkeit der obigen Operationen kann man einen Algorithmus an der Menge des Speichers messen, den er über den zum Halten der Schlangenelemente hinaus erforderlichen Speicherplatz benötigt.
  • In einem Artikel mit dem Titel "Thanks, Heaps" von J Bentley, Communications of the association for computing machinery, vol 28, No 3, March 1985, pages 245–250, XP000616772, ist eine mit Heap bezeichnete Datenstruktur offenbart, die der Darstellung einer Sammlung von Gebilden dient. Der Heap ist als Baum organisiert, der die relative Reihenfolge der Gebilde beschreibt.
  • Die Erfindung besteht in einem Algorithmus zum Implementieren einer Prioritätsschlange, der sehr wenig Speicherplatz über den Speicher hinaus verbraucht, der zum Halten der Elemente in der Schlange erforderlich ist. Mit diesem Algorithmus und paralleler Hardware ist es im ungünstigsten Fall möglich, Elemente ohne Speicherlesevorgänge und mit einer konstanten Anzahl Speicherschreibzugriffe in die Schlange einzufügen.
  • Das Problem der Prioritätsschlange (oder allgemeiner das Sortierproblem) wird definiert als das Problem, eine Liste von Objekten gemäß einer gewissen linearen Reihenfolge zu ordnen. Beispielsweise kann man ganze Zahlen in aufsteigender oder fallender Reihenfolge ihres Zahlenwerts anordnen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Gemäß der Erfindung wird ein Verfahren wie im unabhängigen Anspruch 1 bestimmt zum Sortieren von Elementen in einer Schlange aus 2N Elementen bereitgestellt, wobei N ≥ 2 gilt und N eine ganze Zahl ist.
  • Die Erfindung betrifft eine Einrichtung zum Sortieren wie sie im unabhängigen Anspruch 5 bestimmt ist. Die Einrichtung umfasst ein Feld E der Größe 2N, in dem Elemente gespeichert werden, wobei N ≥ 1 gilt und N eine ganze Zahl ist. Die Elemente im Feld E sind von 0 bis 2N – 1 indiziert. Die Einrichtung umfasst einen ersten Speicher, der einen Wert NE enthält, der angibt, wieviele Elemente im Feld E gespeichert sind. Es gibt einen Entscheidungsbaum mit 2N – 1 Bits, wobei die Anzahl der Bits in seinem Teil I gleich 2N/2I+1 ist, und der die relative Reihenfolge der Elemente im Feld E beschreibt. Zudem enthält die Einrichtung eine Vergleichsliste CL der Größe N. CL[i] enthält einen Wert eines kleinsten Elements zwischen E[l] und E[h], wobei gilt:
    Figure 00030001
    und l + 2i – 1 = h
  • Die Einrichtung umfasst einen zweiten Speicher, der einen Wert L enthält, der gleich dem Wert des letzten Elements im Feld ist. Ferner enthält die Einrichtung einen Controller, der Elemente in das Feld E einfügt, und zwar unsortiert an aufeinander folgenden Speicherplätzen, der den Entscheidungsbaum modifiziert, um die relative Reihenfolge der Elemente des Felds E zu beschreiben, der das Feld CL verändert, so dass CL[i] den Wert eines kleinsten Elements zwischen E[l] und E[h] enthält, der den Wert L mit dem Wert eines jeden neuen Elements aktualisiert, das dem Feld E zugefügt wird, und der jedesmal den Wert NE aktualisiert, wenn ein neues Element in das Feld E eingefügt wird.
  • Weitere Ausführungsformen der Erfindung sind in den beigefügten abhängigen Ansprüchen beschrieben.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • In den beiliegenden Zeichnungen sind die bevorzugte Ausführungsform der Erfindung und bevorzugte Verfahren zum Umsetzen der Erfindung beschrieben.
  • Es zeigt:
  • 1 Elemente, die in einer Prioritätsschlange an aufsteigenden zusammenhängenden Speicherplätzen gespeichert sind;
  • 1a eine Skizze einer Sortiereinrichtung der Erfindung;
  • 2 Werte der Entscheidungsbaumelemente für das Beispiel in 1;
  • 2a ein Feld E;
  • 2b einen Entscheidungsbaum DT;
  • 3 den Umfang und die Bedeutung der Elemente im Feld CL;
  • 4 den Schritt 0 beim Einfügen von Elementen in die Schlange und den Status der Felder CL, DT und NE;
  • 5 den Schritt 1 beim Einfügen von Elementen;
  • 6 den Schritt 2 beim Einfügen von Elementen;
  • 7 den Schritt 3 beim Einfügen von Elementen;
  • 8 den Schritt 4 beim Einfügen von Elementen;
  • 9 den Schritt 5 beim Einfügen von Elementen;
  • 10 den Schritt 6 beim Einfügen von Elementen;
  • 11 den Schritt 7 beim Einfügen von Elementen;
  • 12 den Schritt 8 beim Einfügen von Elementen;
  • 13, dass sich die Schlüsselelemente ändern können, falls sich die Elemente im Speicherplatz 101 ändern;
  • 14 eine Schlange aus acht Elementen, wobei sich das kleinste Element in E(4) befindet und den Wert 1 hat; und
  • 15 eine Schlange, in der sich DT geändert hat, um sich an die Zunahme des kleinsten Elements von 1 auf 12 anzupassen.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
  • Es wird nun Bezug auf die Zeichnungen und insbesondere auf 1a genommen, in der eine Sortiereinrichtung 32 dargestellt ist. Gleiche Bezugszeichen bezeichnen innerhalb der verschiedenen Ansichten ähnliche oder identische Teile. Die Einrichtung 32 umfasst ein Feld E der Größe 2N, in dem Elemente 22 gespeichert sind. Es gilt N ≥ 1, und N ist eine ganze Zahl. Die Elemente 22 im Feld E sind von 0 bis 2N – 1 indiziert. Die Einrichtung 32 umfasst einen ersten Speicher 36, der einen Wert NE hält, der angibt, wieviele Elemente 22 im Feld E gespeichert sind. Es gibt einen Entscheidungsbaum 10 mit 2N – 1 Bits, wobei die Anzahl der Bits in seinem Teil I gleich 2N/2I+1 ist, und der die relative Reihenfolge der Elemente 22 im Feld E beschreibt. Zudem enthält die Einrichtung 32 ein Vergleichslistenfeld CL der Größe N. CL[i] enthält den Wert des kleinsten Elements zwischen E[l] und E[h], wobei gilt:
    Figure 00050001
    und l + 2N – 1 = h
  • Die Einrichtung 32 umfasst einen zweiten Speicher 38, der einen Wert L enthält, der gleich dem Wert des letzten Elements im Feld ist. Ferner enthält die Einrichtung 32 einen Controller 40, der Elemente 22 in das Feld E einfügt, und zwar unsortiert an aufeinander folgenden Speicherplätzen, der den Entscheidungsbaum 10 modifiziert, um die relative Reihenfolge der Elemente 22 des Felds E zu beschreiben, der das Feld CL verändert, so dass CL[i] den Wert des kleinsten Elements zwischen E[l] und E[h] enthält, der den Wert L mit dem Wert eines jeden neuen Elements aktualisiert, das dem Feld E zugefügt wird, und der jedesmal den Wert NE aktualisiert, wenn ein neues Element in das Feld E eingefügt wird.
  • Die Erfindung enthält eine Prioritätsschlange. Die Prioritätsschlange enthält ein Feld 42, in dem Elemente 22 gespeichert sind. Die Prioritätsschlange umfasst zudem einen Controller 40, der die Elemente 22 im Feld 42 speichert, und zwar ohne Speicherlesevorgänge und mit einer konstanten Zahl von Speicherschreibvorgängen, so dass ein kleinstes Element im Feld 42 erkannt werden kann.
  • Die Erfindung betrifft ein Verfahren zum Manipulieren von Elementen 22. Das Verfahren, siehe 58, umfasst die Schritte des Speicherns eines ersten Elements 26, das einen ersten Wert 24 hat, an einem ersten Schlangenplatz in einer Elementeschlange 20, die eine Größe zum Speichern von 2N Elementen hat, wobei gilt N ≥ 2, und N eine ganze Zahl ist. Nun folgt ein Schritt, bei dem in einem Register aktualisiert wird, wieviele Elemente 22 in der Schlange 20 sind, und der erste Wert 24 des ersten Elements 26 eingetragen wird. Es folgt ein Schritt des Speicherns eines zweiten Elements 30, das einen zweiten Wert 28 hat, in einem zweiten Schlangenplatz der Elementeschlange 20, der sich an das erste Element 26 anschließt. Im nächsten Schritt wird in dem Register erneut eingetragen, wieviele Elemente 22 sich in der Schlange 20 befinden. Der zweite Wert 28 des zweiten Elements 30 wird ebenfalls eingetragen. Im folgenden Schritt wird der zweite Wert 28 des zweiten Elements 30 mit dem ersten Wert 24 des ersten Elements 26 verglichen. Man erhält ein erstes Vergleichsergebnis, das angibt, ob der Wert des ersten Elements oder der Wert des zweiten Elements größer ist. Nun folgt der Schritt des Speicherns eines ersten Vergleichsergebnisses an einem ersten Platz einer Anzahl Plätze eines Entscheidungsbaums 10. Die Anzahl der Plätze entspricht einer Anzahl Ebenen. Im nächsten Schritt wird ein erstes Vergleichselement einer Anzahl Vergleichselemente in einem Vergleichslistenfeld aktualisiert. Jedes Vergleichselement gehört zu einer Ebene der Anzahl Ebenen. Das aktualisierte Vergleichselement gehört zum zweiten Schlangenplatz der Elementschlange 20, in der das zweite Element 30 gespeichert ist, und zum ersten Schlangenplatz der Elementschlange 20, in der das erste Element 26 gespeichert ist. Nun folgt ein Schritt, in dem ein drittes Element 33, das einen dritten Wert 32 hat, in einem dritten Schlangenplatz in der Elementschlange 20 gespeichert wird, der sich an das zweite Element 30 anschließt. Im nächsten Schritt wird im Register eingetragen, wieviele Elemente 22 sich in der Schlange 20 befinden. Der dritte Wert 32 des dritten Elements 33 wird ebenfalls eingetragen. Es folgt ein Schritt, in dem der dritte Wert 32 des dritten Elements 33 mit dem Wert des kleineren der beiden Elemente eins und zwei verglichen wird. Man gewinnt ein zweites Vergleichsergebnis, das angibt, welcher Wert der ersten drei Elemente der kleinste ist. Im anschließenden Schritt wird das zweite Vergleichsergebnis an einem zweiten Platz des Entscheidungsbaums 10 abgelegt. Nun folgt ein Schritt, in dem ein zweites Vergleichselement aktualisiert wird, das zum dritten Schlangenplatz gehört, in dem das dritte Element 33 gespeichert ist. Im folgenden Schritt wird ein viertes Element 35, das einen vierten Wert 37 hat, an einem vierten Schlangenplatz in der Elementschlange abgelegt, der sich an das dritte Element 33 anschließt. Im nächsten Schritt wird im Register eingetragen, wieviele Elemente 22 sich in der Schlange 20 befinden. Der vierte Wert 37 des vierten Elements 35 wird ebenfalls eingetragen. Es folgt ein Schritt, in dem der vierte Wert 37 des vierten Elements 35 mit dem dritten Element 33 verglichen wird. Man gewinnt ein drittes Vergleichsergebnis, das angibt, ob der Wert des dritten Elements oder der Wert des vierten Elements kleiner ist. Im anschließenden Schritt wird das dritte Vergleichsergebnis an einem dritten Platz des Entscheidungsbaums 10 abgelegt. Im folgenden Schritt wird vom dritten Wert 32 des dritten Elements 33 und vom vierten Element der kleinere Wert mit dem kleineren Wert der beiden Ele mente eins und zwei verglichen. Man gewinnt ein viertes Vergleichsergebnis, das anzeigt, ob das erste, zweite, dritte oder vierte Element das kleinste ist. Das vierte Vergleichsergebnis wird in einem weiteren Schritt im zweiten Platz des Entscheidungsbaums 10 abgelegt. Im folgenden Schritt wird die Vergleichsliste aktualisiert. Der nächste Schritt setzt den dritten Wert 32 des dritten Elements 33 in der Elementschlange 20 auf einen neuen Wert. Dieser neue Wert wird im darauffolgenden Schritt mit dem vierten Wert 37 des vierten Elements 35 verglichen. Man erhält ein fünftes Vergleichsergebnis. In einem weiteren Schritt wird das fünfte Vergleichsergebnis im dritten Platz des Entscheidungsbaums 10 gespeichert. Es folgt ein Schritt, in dem das fünfte Vergleichsergebnis mit dem ersten Vergleichsergebnis des Entscheidungsbaums 10 verglichen wird, um ein sechstes Vergleichsergebnis zu bestimmen. Im Schritt, der sich anschließt, wird das sechste Vergleichsergebnis im zweiten Platz des Entscheidungsbaums 10 abgelegt. Nun wird im folgenden Schritt die Vergleichsliste auf den neuesten Stand gebracht. Es schließt sich ein Schritt an, in dem der Schlangenplatz in der Elementschlange 20 mit dem kleinsten Wert gesucht wird. Man bracht dazu lediglich die Vergleichsergebnisse im Entscheidungsbaum 10 zu lesen. Es folgt ein Schritt, in dem man den kleinsten Wert gewinnt.
  • Die Vergleichsliste hält den kleinsten Wert eines Elements eines zugehörigen Abschnitts des Felds 42. Muss ein neues Element in das Feld 42 eingefügt werden oder ein Element in das Feld 42 eingefügt werden oder ein Element aus dem Feld 42 gelöscht werden, so kann man die Auswirkung einer derartigen Einfügung oder Löschung auf den Entscheidungsbaum umsetzen, ohne dass man sich durch das gesamte Feld 42 lesen muss, weil die Vergleichsliste diese kleinsten Werte der Elemente für entsprechende Abschnitte des Felds 42 aufweist. Das Feld 42 muss in der Tat überhaupt nicht gelesen werden.
  • Tritt der Fall ein, dass ein Element in das Feld 42 einzufügen ist, so wird der Wert der Vergleichsliste, der zum gegenüberliegend zugehörigen Platz des Felds 42 gehört, in dem das Element eingefügt wird, mit dem Wert des einzufügenden Elements verglichen. Ist der Wert des eingefügten Elements kleiner als der Wert der Vergleichsliste, der zum gegenüberliegend zugehörigen Platz gehört, in den das neue Element eingefügt wird, so muss der Entscheidungsbaum entsprechend verändert werden, um der Tatsache Rechnung zu tragen, dass nun ein neues Element vorhanden ist, das einen Wert hat, der kleiner ist als der Wert, der derzeit im zugehörigen Teil des Felds 42 vorliegt. Diese Modifizierung des Entscheidungsbaums kann sich über den ganzen Entscheidungsbaum erstrecken oder auf gewisse Teile des Entscheidungsbaums beschränkt bleiben. Dies hängt vom Wert des neuen Elements bezogen auf den kleinsten Wert der anderen Elemente im Feld 42 an verschiedenen Positionen des Felds 42 ab, die in der Vergleichsliste gekennzeichnet sind. Der Entscheidungsbaum wird nun gemäß der Beschreibung im folgenden Beispiel verändert.
  • Die folgende Erläuterung dient der Klarstellung. Wird ein Element in die rechte Hälfte des Felds 42 eingefügt, so wird der Wert des einzufügenden Elements mit dem Wert in der Vergleichsliste verglichen, der zur linken Seite des Felds 42 gehört, um festzustellen, ob im Entscheidungsbaum irgendeine Änderung aufgrund der Einfügung des neuen Elements erforderlich ist. Hinsichtlich des Felds 42 und dieses Beispiels ist die linke Seite der "gegenüberliegend zugehörige Platz" des Felds 42 bezogen auf die rechte Seite, in der das Element eingefügt wird. Dieses Beispiel ist auf jeden beliebigen Abschnitt des Felds 42 anwendbar, das einem Vergleich anhand der Vergleichsliste unterzogen wird. Es gibt stets eine "rechte" Seite und eine "linke" Seite und damit einen "gegenüberliegend zugehörigen Platz" bezogen auf ein Element, das in das Feld 42 eingefügt oder aus diesem gelöscht wird.
  • In vergleichbarer Weise dient die Vergleichsliste dazu, dass man das Feld 42 nicht mehr zu lesen braucht, falls ein Element gelöscht wird und der Entscheidungsbaum geändert werden muss, damit er die Wertehierarchie dieser Elemente im Feld 42 nach dem Löschen des Elements widerspiegelt. Beim Löschen des Elements wird der Wert des gelöschten Elements mit dem Wert des Elements in der Vergleichsliste verglichen, dessen Ort dem gegenüberliegend zugehörigen Platz entspricht, von dem das Element gelöscht wird. Hat das gelöschte Element einen Wert, der auch in der Vergleichsliste erscheint, so wird dieser Wert aus der Vergleichsliste gelöscht, und der nächst kleinere Wert im maßgeblichen Abschnitt des Felds 42, aus dem das Element gelöscht worden ist, ersetzt den gelöschten Wert. Der Entscheidungsbaum wird geeignet ergänzt, damit er diese Veränderung widerspiegelt. Ist der Wert des aus dem Feld 42 gelöschten Elements größer als der Wert der Vergleichsliste, der zum gegenüberliegend zugehörigen Platz des Felds 42 gehört, vom dem das Element gelöscht wird, so braucht der Entscheidungsbaum nicht geändert zu werden. Wird jedoch das Feld 42 nachfolgend zusammengeschoben, beispielsweise indem man jedes Element rechts des gelöschten Elements im Feld 42 um eine Zelle nach links bewegt, um die leere Zelle zu füllen, usw., so wird die oben erklärte Einfügeprozedur für jedes Element angewendet.
  • Die Schlange kann sehr groß gemacht werden, um sie an die anfallende Belastung anzupassen. Dabei nehmen der Entscheidungsbaum, das Vergleichslisten-Elementefeld usw. alle die entsprechende Größe an. Wahlweise kann man die Schlange auch dadurch ausbilden, dass man eine Hierarchie von Schlangen erzeugt, wobei die unterste Ebene in der Hierarchie die Elemente enthält, die tatsächlich sortiert werden. Jede Schlange in der Schlangenhierarchie könnte einen zugeordneten Entscheidungsbaum, eine Vergleichsliste usw. aufweisen, oder es könnten ein einziger Entscheidungsbaum, eine einzige Ver gleichsliste usw. für alle Schlangen vorhanden sein, oder man könnte beide Ausführungsformen kombinieren.
  • Beim Ablauf des Algorithmus fügt der Algorithmus Elemente unsortiert in fortlaufende Speicherplätze ein und hält weitere Informationen, die die relative Ordnung dieser Elemente beschreiben. Diese Information wird als Entscheidungsbaum bezeichnet. Dies sei anhand eines Beispiels erläutert.
  • Man betrachte acht ganze Zahlen 5, 7, 6, 4, 1, 3, 9 und 10, die wie in 1 dargestellt in nebeneinander liegenden aufsteigenden Speicherplätzen angeordnet sind.
  • Die Elemente sind nicht aufeinander folgend sortiert. Die Reihenfolge der Elemente wird durch andere Informationen angezeigt, nämlich die Elemente A, B, C, D, E, F, G. Es handelt sich dabei um binäre Elemente, d. h. sie können entweder den Wert 0 oder 1 annehmen. Diese Elemente enthalten abhängig von ihrer Ebene Informationen über unterschiedliche Teile der Schlange. Das Element A, das sich auf der Ebene 2 befindet, gibt an, welche Hälfte der Schlange das kleinste Element enthält. Ein Wert von A = 1 bedeutet, dass sich das kleinste Element in der rechten Hälfte befindet. Umgekehrt bedeutet ein Wert von A = 0, dass sich das kleinste Element in der linken Hälfte der Schlange befindet.
  • Die Elemente B und C, die sich auf der Ebene 1 befinden, enthalten jeweils Information über eine Hälfte der Schlange. B enthält Information über die linke Hälfte der Schlange. C enthält Information über die rechte Hälfte der Schlange. B = 1 gibt an, dass sich das kleinste Element in seiner Hälfte der Schlange im rechten Viertel befindet. B = 0 zeigt an, dass sich das kleinste Element in seiner Hälfte der Schlange im linken Viertel befindet.
  • In völlig entsprechender Weise enthalten die Elemente D, E, F, G Information über das Schlangenviertel, zu dem sie gehören. Beispielsweise gehört D zum linken Viertel der Schlange. D = 1 bedeutet, dass sich das kleinste Element in diesem Viertel rechts befindet. D = 0 gibt an, dass sich das kleinste Element in diesem Viertel links befindet.
  • Für die Beispielwerte der Prioritätsschlange erhält man die in 1 angegebenen Werte für A, B, C, D, E, F, G.
  • Mit dieser Struktur ist es sehr einfach, die Adresse des kleinsten Elements in der Prioritätsschlange zu finden. Zum Auffinden dieser Adresse liest man den Entscheidungsbaum beginnend mit der höchsten Ebene. Der Wert auf einer gegebenen Ebene (0 oder 1) bestimmt die Richtung, in der das nächste Element gelesen wird. Ein Wert von 1 zeigt an, dass man sich nach rechts bewegen muss, um den Baum weiter zu lesen, und ein Wert von 0 zeigt an, dass man sich nach links bewegen muss. Mit Hilfe dieser Regeln liest man den Baum wie es die Pfeile in der obigen Abbildung darstellen. Das Element bei 100 ist 1; es ist der kleinste Wert in der Schlange.
  • Damit sind bis zu dieser Stelle zwei Strukturen gekennzeichnet worden.
  • Das Feld E, siehe 2a, speichert die in die Schlange eingereihten Werte. Elemente werden von links nach rechts zugefügt. Werden Elemente aus dem Feld entfernt, so wird der von dem gelöschten Element belegte Platz mit dem Element gefühlt, das sich im Feld am weitesten rechts befindet. Damit ist sichergestellt, dass die Elemente im Feld fortlaufend gespeichert werden.
  • DT, siehe 2b, enthält die Ergebnisse der Vergleiche zwischen den Elementen der Schlange.
  • Bei üblichen Implementierungen wird die Schlange E in einem langsameren Hauptspeicher gehalten. DT wird in einem schnellen Register gehalten. Das Ziel des Algorithmus besteht darin, den Zugriff auf den Hauptspeicher so gering wie möglich zu halten.
    • – DT[0][0] = 1 bedeutet, dass gilt E[0] ≥ E[1]
    • – DT[0][0] = 0 bedeutet, dass gilt E[0] ≤ E[1]
    • – DT[0][1] = 1 bedeutet, dass gilt E[2] ≥ E[3] Die Einträge in der folgenden Ebene von DT zeigen an, wo sich in einer Gruppe aus vier Elementen in E der kleinste Wert befindet.
    • – DT[1][0] = 0 bedeutet min(E[0], E[1]) ⇐ min(E[2], E[3])
    • – DT[1][0] = 1 bedeutet min(E[0], E[1]) ⇒ min(E[2], E[3])
  • Zum Auffinden des kleinsten Elements in E[0 : 3], wird DT[1][0] untersucht. Findet man eine 0, so befindet sich das kleinste Element von E[0 : 3] in E[0 : 1]. Findet man eine 1, so befindet sich das kleinste Element in E[2 : 3].
  • In der bisherigen Beschreibung ist eine Schlange mit 8 (d. h. 23) Elementen behandelt worden. Ein von 0 (binär 000) bis 7 (binär 111) indiziertes Feld und ein Entscheidungsbaum mit drei Ebenen wurden gehalten. Verallgemeinert man dies auf eine Schlange mit 2N Elementen, so erhält man:
    • 1. Ein Feld der Größe 2N, das von 0 bis 2N – 1 indiziert ist. Dies nennt man die Einträge (E).
    • 2. Ein Wort mit 2N – 1 Bits mit N logischen Teilen, wobei die Anzahl der Bits im Teil I den Wert 2N/2I+1 hat. Dies ist der Entscheidungsbaum (DT). Auf ihn wird als zweidimensionales Feld zugegriffen, wobei der erste Index (I) von 0 bis N-1 läuft und der zweite Index von 0 bis 2(N-1-I) – 1 läuft.
  • Gehalten werden auch die Anzahl der Elemente in der Schlange (NE) und der Wert von N.
  • Ein Hauptziel dieses Algorithmus besteht darin, den Einfügevorgang ohne Leseoperationen aus dem langsameren Hauptspeicher auszuführen, in dem die Schlange (E) gehalten wird. Zum Erreichen dieses Ziels müssen zwei weitere Strukturen in der schnellen Registerdatei gehalten werden, nämlich:
    • – eine Vergleichsliste (CL), die für eine Schlange mit 2N Elementen ein Feld der Größe N ist, das von 0 bis N-1 indiziert ist;
    • – den Wert des letzten Elements, das in die Schlange eingefügt worden ist (bezeichnet mit L). Befinden sich 2N Elemente in der Schlange, so ist der Inhalt des Felds CL wie folgt aufgebaut:
    • – CL[N-1] enthält das kleinste Element in der linken Hälfte des Felds E;
    • – CL[N-2] enthält das kleinste Element in der linken Hälfte der Hälfte, die sich zur Linken des am weitesten rechts gelegenen Elements im Feld E befindet;
    • – CL[N-3] enthält das kleinste Element in der linken Hälfte des Viertels, das sich zur Linken des am weitesten rechts gelegenen Elements im Feld E befindet, usw.
  • Im Allgemeinen enthält das Element CL[i] den Wert des kleineren Elements innerhalb der Grenzen E[l] und E[h], wobei die untere Grenze 1 gegeben ist durch
    Figure 00150001
    und die obere Grenze h gegeben ist durch l + 2N – 1 = h
  • Für die Schlange mit 8 Elementen in den vorhergehenden Beispielen ist CL gemäß 3 aufgebaut.
  • Gäbe es im obigen Beispiel fünf Elemente anstelle von acht, so würde gelten NE = 5. Mit Hilfe der obigen Ausdrücke für 1 und h sind die Grenzen von CL[2] l = 0 und h = 3. Die Grenzen von CL[1] sind l = 0 und h = 1, und die Grenzen von CL[0] sind l = 3 und h = 3. Damit ist CL[2] das Minimum von E[0 : 3], d. h. 4, CL[1] ist das Minimum E[0 : 1], d. h. 5, und CL[0] ist das Minimum von E[3 : 3], d. h. 4.
  • Werden Elemente in aufeinander folgende Speicherplätze im Feld eingefügt, so muss nach jeder Einfügung nur ein Element von CL aktualisiert werden. Die Ebene des Elements in CL, die aktualisiert werden muss, hängt ab von:
    • – der Adresse I im Feld, an der die Einfügung erfolgen soll, und
    • – der vorhergehenden Adresse (I-1), an der eine Einfügung erfolgt ist. Man beachte, dass sich bei der Erhöhung der Einfügeadresse um eins (um für die folgende Einfügung bereit zu sein) nur eine Bitposition der Adresse von einer 0 auf eine 1 ändert. Die Ebene, auf der dieser Übergang von 0 auf 1 er folgt, entspricht der CL-Ebene, die aktualisiert werden muss. Einige Beispiele anhand des Felds mit 8 Elementen sollen dies verdeutlichen.
    • – Beim Einfügen an der Adresse 101 wird die Adresse von 100 auf 101 erhöht. Das Bit der Ebene 0 in der Adresse hat sich von 0 auf 1 geändert; damit muss CL[0] aktualisiert werden.
    • – Beim Einfügen an der Adresse 100 wird die Adresse von 011 auf 100 erhöht. Das Bit der Ebene 2 in der Adresse hat sich von 0 auf 1 geändert; damit muss CL[2] aktualisiert werden.
  • Zusätzlich zur Aktualisierung der Bits von CL kann es nötig sein, auch die Bits von DT auf den neuesten Stand zu bringen, wenn ein neues Element in die Schlange eingefügt wird. Um das Ziel des Algorithmus zu erreichen, muss es möglich sein, sowohl CL als auch DT zu aktualisieren, ohne irgendein vorhandenes Schlangenelement aus dem Hauptspeicher zu lesen.
  • 413 zeigen den Status des Felds CL und der DT-Bits nach dem Einfügen von Elementen in die Schlange. Es werden die gleichen Elemente wie in den vorhergehenden Beispielen verwendet. Anfangswerte für DT und NE sind 0. Die Anfangswerte für CL und L sind bedeutungslos (mit einem X gekennzeichnet).
  • Schritt 0: Ausgangszustand der Schlange, siehe 4.
  • Schritt 1: Schreiben des ersten Elements 5 in die Schlange, siehe 5.
  • Beim Schreiben des ersten Elements werden weder CL noch DT aktualisiert. L wird auf 5 gesetzt. NE wird auf 1 erhöht.
  • Schritt 2: Schreiben des zweiten Elements 7 in die Schlange, siehe 6.
  • Das zweite Element wird in den Speicherplatz 001 geschrieben. Da sich das Adressbit 0 von einer 0 auf eine 1 geändert hat, muss CL[0] aktualisiert werden. CL[0] wird stets auf den Wert von L vor der aktuellen Einfügung gesetzt. Dies ergibt CL[0] = 5. Das zugehörige DT wird dadurch aktualisiert, dass 7 mit L vor der Einfügung verglichen wird. Da 7 > 5 gilt, bleibt DT[0][0] eine 0. Zuletzt wird L auf 7 aktualisiert, und NE wird inkrementiert.
  • Schritt 3: Schreiben des dritten Elements 6 in die Schlange, siehe 7.
  • Das dritte Element wird in den Speicherplatz 010 geschrieben. Da sich das Adressbit 1 von einer 0 auf eine 1 geändert hat, muss CL[1] gemäß der folgenden Vorschrift aktualisiert werden: CL[i] = min (CL[i-1], CL[i-2], ..., CL[0], L).
  • Um diesen Vorgang auszuführen ohne Werte im Feld CL zu vergleichen, wird DT beginnend bei DT[0][1] analysiert, und zwar mit Hilfe der Analyseregeln für DT. Ist auf einer Ebene i im Feld DT eine 0 vorhanden, so wird CL[1] mit CL[i] überschrieben.
  • In diesem Beispiel kann i nur den Wert 0 annehmen. Dies erläutert jedoch die allgemeinen Regeln zum Aktualisieren von CL[j]. CL[j] wird aktualisiert durch die Analyse von DT beginnend bei DT[j][x] (ausschließlich), bis in DT auf einer Ebene i eine 0 vorhanden ist. Nun wird CL[j] der Wert in CL[i] zugewiesen, und der Vorgang endet. Wird bei der Analyse von DT bis zum Ende von DT keine 0 gefunden, so wird CL[j] der Wert in L zugewiesen. In diesem Beispiel wird in DT[0][0] eine 0 gefunden. Damit wird CL[1] auf den Wert von CL[0] gesetzt, der 5 ist.
  • Die Regel zum Aktualisieren von DT[j][x] gleicht der Regel zum Aktualisieren von CL[j]. Wird bei der Analyse von DT auf der Ebene i eine 0 gefunden, so wird CL[i] mit dem einzufügenden Element verglichen (beispielsweise e). Gilt e < Element in CL[i], so ist DT[i][x] eine 1, andernfalls eine 0. Wird bei der Analyse von DT keine 0 gefunden, so vergleicht man e mit L. Gilt e < L, so ist DT[j][x] eine 1, andernfalls eine 0.
  • In diesem Beispiel befindet sich eine 0 in DT[0][0]. Damit wird das zuzufügende Element 6 mit 5 verglichen (dem Element in DT[0][0]). Da 6 > 5 gilt bleibt DT[1][0] unverändert. Zuletzt wird L auf 6 gesetzt und NE erhöht.
  • Schritt 4: Schreiben des vierten Elements 4 in die Schlange, siehe 8.
  • Das vierte Element wird in den Speicherplatz 011 geschrieben. Da sich das Adressbit 0 von 0 auf 1 geändert hat, muss CL[0] aktualisiert werden. Wie üblich wird CL[0] auf dem Wert von L vor dem aktuellen Einfügevorgang gesetzt. Damit nimmt CL[0] den Wert 6 an. Das zugehörige DT wird aktualisiert, indem man 4 mit L vor dem Einfügen vergleicht. Da gilt 4 < 6 wird DT[0][1] zu 1. Es ist möglich, dass auch DT[1][0] aktualisiert werden muss. Um dies zu prüfen analysiert man wie üblich DT bis eine 0 gefunden wird. In diesem Fall findet man sie bei DT[0][0]. Also muss man CL[0] mit dem Element vergleichen, das eingefügt wird. Da gilt 4 < 5 erhält DT[1][0] den Wert 1. Zuletzt wird L auf 4 gesetzt und NE erhöht.
  • Schritt 5: Schreiben des fünften Elements 1 in die Schlange, siehe 9.
  • Das fünfte Element wird in den Speicherplatz 100 geschrieben. Da sich das Adressbit 2 von 0 auf 1 geändert hat, muss CL[2] aktualisiert werden. Benutzt man die Analyseregeln für DT und beginnt bei DT[2][0] ausschließlich, so findet man bis zum Ende keine 0. Damit wird CL[2] mit L aktualisiert, das den Wert 4 hat. Da man keine 0 gefunden hat, muss der Wert in L mit dem einzufügenden Element verglichen werden (das den Wert 1 hat). Da gilt 1 < 4 erhält DT[2][0] den Wert 1. Zuletzt wird L auf 1 gesetzt und NE erhöht.
  • Den Vorgang zum Einfügen von Elementen kann man in den folgenden Schritten zusammenfassen:
    • – Ermittle, welche Adressbitposition (beispielsweise p) während der Adressenerhöhung von 0 auf 1 geht.
    • – Aktualisiere CL[p] durch die Suche nach einer 0 in DT, und zwar beginnend von DT[p][x] ausschließlich. Findet man eine 0 auf der Ebene q in DT, so gilt CL[p] = CL[q]. Sonst gilt CL[p] = L.
    • – Aktualisiere DT beginnend mit der höchsten Ebene. Die Regel zum Aktualisieren von DT[j][x] ähnelt der Regel zum Aktualisieren von CL[i]. Findet man bei der Analyse von DT auf der Ebene i eine 0 , so wird CL[i] mit dem Einfügeelement verglichen (beispielsweise e). Gilt e < Element in CL[i] , so wird DT[i][x] eine 1 und sonst eine 0. Findet man bei der Analyse von DT keine 0, so wird e mit L verglichen. Gilt e < L, so wird DT[j][x] eine 1 und sonst eine 0.
    • – Aktualisiere L auf den einzufügenden Eintrag.
    • – Füge Eintrag ein.
  • Die anderen drei Elemente werden der Schlange in gleicher Weise zugefügt. Der Status nach jedem weiteren Schritt ist in den folgenden Abbildungen dargestellt.
  • Schritt 6: Schreiben des sechsten Elements 3 in die Schlange, siehe 10.
  • Schritt 7: Schreiben des siebten Elements 9 in die Schlange, siehe 11.
  • Schritt 8: Schreiben des achten Elements 10 in die Schlange, siehe 12.
  • Das Verändern des Werts eines Elements in der Schlange erfordert zwei Schritte.
    • – Der Eintrag in E wird auf den neuen Wert gesetzt.
    • – Sämtliche an DT erforderlichen Änderungen werden vorgenommen.
  • Wird irgendein Element verändert, so ist es möglich, dass Einträge in DT nicht mehr zutreffen und aktualisiert werden müssen. 13 zeigt die Einträge, die sich ändern.
  • Die Einträge in DT, die möglicherweise aktualisiert werden müssen, falls sich ein Eintrag in E (an der Position J) verändert, sind: {für alle I: O <= I < N: DT[I][J»(I+1)]}. Die Schreibweise J » (I+1) bedeutet:
    • – Beginne bei der binären Darstellung von J,
    • – Schiebe J um (I+1) nach rechts und fülle von links mit Nullen auf.
  • Seien beispielsweise J gleich elf (binär 1011) und I gleich 2, so muss J um drei Stellen nach rechts geschoben werden; man erhält 0001. In der obigen Abbildung kann eine Veränderung des Elements bei 101 zu Veränderungen in DT[0][2], DT[1][1] und DT[2][0] führen.
  • Zum Bestimmen des korrekten Werts für jeden Eintrag in DT werden die Einträge in E verglichen, die durch diesen besonderen Eintrag in DT dargestellt werden. Beispielsweise erfordert das Bestimmen des korrekten Werts von DT[2][0] den Vergleich des kleinsten Elements in der unteren Hälfte von E (der Elemente E[0-3]) mit dem kleinsten Element in der oberen Hälfte von E (den Elementen E[4-7]). Nach der Veränderung von E[5] kann man das kleinste Element in E[0-3] aus DT entnehmen. Die Identität des kleinsten Elements in E[4-7] wird durch den (möglicherweise neuen) Wert von DT[1][2] bestimmt, der seinerseits von dem möglicherweise neuen Wert von DT[0][3] bestimmt wird. Führt dieser Vorgang an irgendeiner Stelle zu einem Vergleich zwischen einem gültigen Wert (E[J]) und einem ungültigen Wert (E[I], wobei gilt 1 >= NE), so liefert der Vergleich E[J] < E[I]. Im Weiteren wird sich zeigen, dass dadurch das Einfügen und Löschen von Elementen einfach zu Sonderfällen der Veränderung eines Elements wird.
  • Diese Operation erfordert im schlechtestmöglichen Fall N Lesevorgänge und einen Schreibvorgang. Dies liegt in der gleichen Größenordnung wie bei anderen Schlangen. Im schlechtestmöglichen Fall sind es jedoch weniger tatsächliche Lese- und Schreibvorgänge. Da die Plätze aller Elemente, die gelesen werden müssen, aus DT zu ermitteln sind, entsteht keine Wartezeit durch die Notwendigkeit, einen oder mehrere Einträge zu lesen und zu vergleichen, damit man feststellen kann, welches Element oder welche Elemente im Folgenden zu lesen sind.
  • 14 zeigt eine Schlange mit acht Elementen. Das kleinste Element befindet sich in E[4] und hat den Wert 1. Es handelt sich um das gleiche Beispiel, an dem die Einfügung erläutert wurde.
  • Wird gewünscht, das kleinste Element von 1 auf 12 zu vergrößern, so müssen die Einträge in DT entlang des Pfads zu E[4] (die in der folgenden Abbildung mit einem Kreis dargestellt sind) aktualisiert werden, und CL muss möglicherweise aktualisiert werden. Zum Aktualisieren des Eintrags DT[0][2] (der unterste Eintrag der drei Einträge mit Kreisen) muss der Wert 12 mit dem Wert in E[5] verglichen werden . Da 12 > 3 gilt, wird DT[0][2] auf 1 gesetzt. Dies führt zu dem neuen Pfad, der in 15 dargestellt ist.
  • Nun muss der Wert von DT[1][1] aktualisiert werden. Dies erfolgt, indem man das bis dahin gefundene kleinste Element (derzeit 3) nimmt und es mit dem kleineren Wert der beiden Elemente E[6] und E[7] vergleicht. Der kleinere Wert der beiden Elemente E[6] und E[7] wird direkt bestimmt, indem man den aktuellen Wert von DT[0][3] untersucht. In diesem Fall gilt DT[0][3] = 0, und E[6] = 9 ist kleiner. Da gilt 3 < 9 bleibt DT[1][1] bei 0 unverändert, und der Pfad ändert sich gegen den vorherigen Zustand nicht. An dieser Stelle ist das kleinste Element in der rechte Hälfte der Schlange gefunden worden (bei E[5] = 3).
  • Zum Aktualisieren von DT[2][0) wird das kleinste bisher gefundene Element (E[5] = 3) mit dem Element verglichen, das man findet, indem man DT' mit invertiertem DT[2][0] (in diesem Beispiel 0) konstruiert, und das kleinste Element findet. Es handelt sich um E[3] = 4. Da 4 > 3 gilt, bleibt DT[2][0] eine 1.
  • Da das kleinste Element in E beim Aktualisieren des kleinsten Elements auch in mindestens einem Platz von CL oder Last vorliegt (möglicherweise auch in mehr als einem Platz), so führt dies dazu, dass CL und/oder Last aktualisiert werden. Dabei gibt es zwei Sonderfälle. Sei MI der Index, bei dem das kleinste Element in E vor der Veränderung gespeichert ist. Gilt MI = NE – 1, so wird Last auf den neuen Wert in E[MI] verändert. Ist NE – 1 eine ungerade Zahl, so wird CL[0] auf den neuen Wert in E[MI] gesetzt. Gilt MI = NE – 2 und ist NE – 1 eine gerade Zahl, so wird CL[0] aktualisiert, falls gilt MI = NE – 3. Bei ganzzahliger Rechnung muss ein Eintrag CL[i] in CL aktualisiert werden, falls gilt: (((NE – 1) – 2i)/2i)×21 = ((MI)/2i)×2i
  • Das Löschen von Elementen aus der Schlange ist lediglich ein Sonderfall der Veränderung von Elementen. Da die Elemente nicht in der Prioritätsreihenfolge gehalten werden, kann man ein Element aus der Mitte des Felds löschen und es durch das am weitesten rechts gelegenen Element des Felds ersetzen. NE muss dabei erniedrigt werden.
  • Veränderungen an DT und CL gleichen notwendig dem Verändern von Elementen in der Schlange.
  • Ein Beispiel für den Gebrauch der Einrichtung 32 findet man in dem Artikel "Comparison of Rate-Based Service disciplines" von H. Zhang und S. Keshav in den Proceedings of ACM SIGCOMM 91, der hiermit durch Bezugnahme eingeschlossen ist. Den Bezug zu anderen Vorgehensweisen, die hinsichtlich des Beispiels versuchen, den gleichen Zweck wie die Einrichtung 32 zu erreichen, findet man ebenfalls dort.
  • Das Sortierverfahren bzw. das Verfahren zum Manipulieren von Elementen bzw. die Einrichtung 32 bzw. die hier beschriebene Prioritätsschlange können in nahezu jedem Computersystem verwendet werden, das einen Scheduler benötigt. Da die Einfügung begrenzt, wie schnell Pakete verwendet werden können, kann der Einfügevorgang mit der Einrichtung 32 beschleunigt werden. Die hier beschriebene Vorgehensweise ist beispielsweise in einer ATM-Anwendung einsetzbar (ATM = Asynchronous Transfer Mode). Werden Pakete oder Zellen über ein ATM-Netz übertragen, so können sie an einer Vermittlung oder einem Server oder Prozessor mit gewisser Form oder Funktion ankommen (das Netz kann sich innerhalb einer gegebenen Vorrichtung befinden oder es kann sich um ein Netz zwischen Vorrichtungen handeln). Findet auf dem Netz ein beträchtlicher Verkehr statt, so kann es sein, dass die Pakete oder Zellen in einer Schlange gespeichert werden müssen, bis die Vermittlung verfügbar ist und sie abarbeiten kann, da es Zeiten geben kann, in denen mehr Zellen vorhanden sind, die eine Bedienung von der Vermittlung anfordern, als die Vermittlung bieten kann. Das Verfahren bzw. die Einrichtung 32 bzw. die Prioritätsschlange, die hier beschrieben worden ist, kann so arbeiten, dass die Zellen empfangen werden, oder ein Wert, der angibt, wann eine zugehörige Zelle zu bedienen ist (mit beispielsweise einem Zeiger auf die tatsächliche Zelle, die in einem anderen Speicher abgelegt ist), und dass sie gehalten werden, bis sie bedient werden. Anhand der Vergleichsliste oder des Entscheidungsbaums oder mit beiden Gebilden kann mit dem beschriebenen Vorgehen das gewünschte Element anhand seines Werts, der sich in dem Feld befindet, rasch gefunden werden.
  • Die Werte eines Elements können in entsprechende Signale umgesetzt werden und mit bekannten Geräten gespeichert oder bearbeitet werden.
  • Eine umfassende Besprechung von ATM und zugehörigen Architektureinrichtungen, Entwürfen usw. findet man in "Gigabit Networking" von Craig Partridge, Addison Wesley, Reading, MA 1993, und "Asynchronous Transfer Mode" von Martin de Prycker, Ellis Horwood, New York, Ltd., 2nd Edition, 1993. Beide Arbeiten sind hiermit durch Bezugnahme eingeschlossen.
  • Implementierung des Entscheidungsschlangenalgorithmus für einen Prioritätsschlangenalgorithmus
  • Der Code im Anhang dient der Erläuterung der Grundfunktionalität des Entscheidungsschlangenalgorithmus. Er ist nicht als Beispiel einer "optimierten" Programm- oder Hardwareumsetzung gedacht, sondern er soll lediglich alle Grundoperationen des Algorithmus erläutern.
  • Ein großer Teil des Codes ist dafür geschrieben, Schlangen mit beliebiger Größe zu handhaben, die aus Unterschlangen mit veränderlicher Größe bestehen. Diese Allgemeinheit dient der Erläuterung. Bei Anwendungen mit bekannten Grenzen der Schlangengröße oder mit unterschiedlichen Hardwarefähigkeiten würde man natürlich sämtliche unnötigen Allgemeinfähigkeiten entfernen.
  • Die Codes bauen Schlangen von beliebiger Größe auf, indem sie eine Hierarchie von Entscheidungsschlangen erzeugen. Dabei enthält die unterste Ebene der Hierarchie die tatsächlich zu sortierenden Elemente. Das kleinste Element in jeder Schlange auf der untersten Ebene wird in eine Schlange auf der nächsten Hierarchieebene eingereiht (vorausgesetzt, die Prioritätsschlange ist dafür entworfen, das kleinste Element auszuwählen). Setzt man voraus, dass jede Schlange 2^N Elemente speichert, so speichert eine Schlange mit zwei Hierarchieebenen 2^N*2^N Elemente. Man beachte, dass es nicht erforderlich ist, dass die Schlangen auf unterschiedlichen Hierarchieebenen die gleiche Anzahl Einträge aufweisen. In der Tat kann in einem System mit einer Mehrebenen-Speicherhierarchie die Größe der Schlange auf der obersten Ebene so gewählt werden, so dass sie den Größen der Speicher auf den unterschiedlichen Ebenen entspricht. In einem Allzweck-Prozessorsystem kann man die Größe der Schlangen in den oberen Ebenen so wählen, dass sie in den On-Chip-Cache passen, und/oder man kann sie an die Wortgröße des Systems anpassen.
  • Dieser Code wurde beispielsweise für ein 32-Bit-System geschrieben. Es werden Schlangen mit 32 Elementen verwendet, die es erlauben, eine der Grunddatenstrukturen für jede Schlange, den Entscheidungsbaum, in einem Wort abzulegen, damit Zugriffe und Manipulationen leicht möglich sind. In einer Hardwareimplementierung kann man die Größe so wählen, dass sie zur Anwendung passt und nicht zur Größe einer bereits vorhandenen Architektur. Ein offensichtliches Beispiel für unterschiedlich große Schlangen auf der gleichen Hierarchieebene liegt vor, wenn die Anzahl der zu speichernden Elemente keine Zweierpotenz ist. Die am weitesten rechts gelegene Schlange (wenn die Elemente von links nach rechts zugefügt werden) wäre dann auf einigen Ebenen unvollständig. Es ist jedoch in der Tat nicht erforderlich, dass die Schlangengröße generell eine Zweierpotenz ist, oder dass jeder Verzweigungspunkt im Entscheidungsbaum eine Zweifachverzweigung ist. Zweifachverzweigungen und damit Schlangen, deren Größe eine Zweierpotenz ist, haben eine sehr regelmäßige Struktur und Steuerlogik, die zahlreiche Aufgaben vereinfacht. Dieser Code dupliziert alle Datenstrukturen für jede Ebene. Man beachte jedoch, dass dies nur eine logische Duplikation ist. Beispielsweise weist eine einzige Hierarchieschlange mit 10 Ebenen mit 1024 Elementen und eine Schlange mit 2 Hierarchien aus Schlangen mit 5 Ebenen mit 32 Elementen die gleiche Gesamtanzahl von Bits in dem einen Entscheidungsbaum der ersten Schlange (1023 = 2^10 – 1) oder den 33 Schlangen im zweiten Fall (1 Schlange aus 32 Schlangen, und 32 Schlangen mit 32 Elementen) mit (31 + 32*31) Bits in Entscheidungsbäumen auf. In beiden Fällen umfasst die Vergleichsliste 10 Elemente (in diesem Code hat jede Hierarchie ihr eigenes letztes Element). Da man jedoch das letzte Element jeder beliebigen Hierarchie neben dem kleinsten Element auch noch in der Vergleichsliste findet, brauchen diese nicht dupliziert zu werden. Die tatsächlich duplizierte Struktur ist also das Elementefeld. In den oberen Ebenen der Hierarchie ist dies jedoch hauptsäch lich ein Cache, da man bei Bedarf den verschiedenen Entscheidungsbäumen bis hinunter zur untersten Ebene folgen könnte.
  • Im Allgemeinen brauchen die drei in diesem Algorithmus verwendeten Datenstrukturen (Elementfeld, Vergleichsliste und Entscheidungsbaum) nicht in Hierarchien der gleichen Größe unterteilt werden. Wird beispielsweise ein 32K Elemente umfassendes Gen in einem 32-Bit-System mit 2048 Wörtern an (schnellem) internen Speicher und 32K Wörtern an (langsamen) Hauptspeicher implementiert, so könnte es eine Vergleichsliste mit 15 Einträgen (2^15 = 32K) aufweisen, die in On-Chip-Registern gespeichert ist, und zwei Hierarchien aus Elementfeldern umfassen, wobei eines 1024 Elemente im internen Cache hat und die unterste Hierarchieebene 32K Elemente im externen Speicher, und drei Hierarchien mit Entscheidungsbäumen zu 31 Bit, d. h. 32*31 Bit und 1024*31 Bit, die in Registern gespeichert sind. Die anderen 1024 Wörter kämen in den internen Speicher (da insgesamt 1024*31-1 Bit an Entscheidungsbäumen vorhanden sind, würden sie vollständig in den Rest des internen Speichers passen; der Zugriff wäre jedoch weniger wirksam).
  • Der Gebrauch des Entscheidungsbaums erlaubt eine äußerst wirksame Berechnung der Operationen Find-Min_Element und Change_Min_element. Die Vergleichsliste erlaubt eine wirksame Berechnung der Operationen Insert_Element und Delete_Min. Falls die Geschwindigkeit von Insert und Delete unwichtig ist, kann man die Vergleichsliste weglassen. Man beachte, dass man unterschiedliche Aktualisierungsverfahren in Verbindung mit der Vergleichsliste verwenden kann, die unterschiedlich leistungsfähig sind.

Claims (6)

  1. Verfahren zum Sortieren von Elementen in einer Reihe von 2N Elementen, welche in einer Vorrichtung gespeichert sind, wobei N ≥ 2 eine ganze Zahl ist, gekennzeichnet durch die folgenden Schritte: Aufstellen eines Entscheidungsbaumes (10) aus 2N – 1 Bit, welcher eine relative Anordnung von Elementen in der Reihe (20) beschreibt, wobei der Entscheidungsbaum eine erste Ebene und mindestens eine zweite Ebene umfasst, wobei die erste Ebene mindestens einen Eintrag aufweist, der entweder ein erstes Ergebnis oder ein zweites Ergebnis speichert, welches durch Vergleichen von Werten der Elemente erhalten wird, wenn sie die Reihe (20) füllen; Auslesen des ersten Ergebnisses oder des zweiten Ergebnisses aus dem ersten Eintrag der ersten Ebene des Entscheidungsbaumes (10); Auswählen eines Wertes aus der Reihe (20) entsprechend dem ersten Ergebnis oder dem zweiten Ergebnis, welches aus dem ersten Eintrag ausgelesen wurde; und Aktualisieren einer Vergleichsliste mit einer Spalte CL der Größe N, wobei die Vergleichsliste den niedrigsten Wert eines Elements eines entsprechenden Abschnitts der Reihe (20) umfasst, wobei der Entscheidungsbaum (10) und die Vergleichsliste dazu verwendet werden, Elemente in der Reihe zu sortieren.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass: der Schritt des Aufstellens den Schritt des Aufstellens eines Entscheidungsbaumes (10) umfasst, der N Ebenen aufweist, wobei N ≥ 2 eine ganze Zahl ist und einer Reihe (20) aus 2N Elementen entspricht, von denen jedes einen Wert hat, wenn die Reihe (20) gefüllt wird, wobei jede Ebene (L) 2L Einträge aufweist, wobei L ≥ 0 eine ganze Zahl ist, wobei jeder Eintrag entweder ein erstes Ergebnis oder ein zweites Ergebnis entsprechend Werten in der Reihe (20) aufweist; der Ausleseschritt die Schritte des Auslesens der Ergebnisse im Eintrag der nullten Ebene umfasst; und das Auslesen der Ergebnisse in den Einträgen nachfolgender höheren Ebenen, wenn es solche gibt, in Abhängigkeit von dem in einer vorhergehenden niedrigeren Ebene ausgelesenen Ergebnis; und der Schritt des Auswählens den Schritt des Auswählens des Wertes aus der Reihe (20) entsprechend dem Ergebnis im Eintrag in einer höchsten Ebene umfasst.
  3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, dass der Schritt des Auslesens der Ergebnisse in den Einträgen der nachfolgenden höheren Ebenen den Schritt des Auslesens des Eintrags in der ersten Ebene in Abhängigkeit vom Ergebnis des Eintrags in der nullten Ebene umfasst und dass der Schritt des Auswählens den Schritt des Auswählens des wertes aus der Reihe (20) entsprechend dem im Eintrag der ersten Ebene ausgelesenen Ergebnis umfasst.
  4. Verfahren nach Anspruch 3, dadurch gekennzeichnet, dass der Schritt des Aufstellens die folgenden Schritte umfasst: Schreiben eines ersten Wertes (24) in das erste Element (26) der Reihe (20); Schreiben eines zweiten Wertes (28) in das zweite Element (30) der Reihe (20) ; Vergleichen des zweiten wertes (28) mit dem ersten Wert (24); Schreiben des ersten Ergebnisses oder des zweiten Ergebnisses in einen entsprechenden Eintrag der ersten Ebene für die entsprechenden Elemente in Abhängigkeit davon, ob der erste Wert (24) größer ist oder kleiner als der zweite Wert (28); und Wiederholen des Schrittes des Schreibens, Vergleichen und Schreiben eines dritten Wertes (32) in Bezug auf den zweiten Wert (28) und einen entsprechenden Eintrag; und Vergleichen des dritten wertes (32) mit dem kleinsten der ersten beiden Werte (24, 28) und Schreiben des ersten Ergebnisses oder des zweiten Ergebnisses in einen entsprechenden Eintrag der nullten Ebene für die entsprechenden Elemente in Abhängigkeit davon, ob der dritte Wert (32) größer oder kleiner ist als der zweite Wert (28).
  5. Vorrichtung (32) zum Speichern von Elementen, gekennzeichnet durch: eine Spalte E der Größe 2N, in der Elemente gespeichert sind, wobei N ≥ 1 eine ganze Zahl ist, wobei die Elemente in der Spalte E von 0 bis 2N – 1 indiziert sind; einen ersten Speicher (36), der einen Wert NE enthält, welcher gleich der Anzahl der in der Spalte E gespeicherten Elemente ist; einen Entscheidungsbaum (10) aus 2N – 1 Bit, wobei die Anzahl an Bits in seinem Teil I gleich 2N/2I+1 ist, was die relative Reihenfolge von Elementen in der Spalte E beschreibt; eine Vergleichslistenspalte CL der Größe N, wobei CL[i] einen Wert eines niedrigeren Elements innerhalb E[l] und E[h] enthält, wobei
    Figure 00300001
    und l + 2i – 1 = heinen zweiten Speicher (38), der einen Wert L enthält, der gleich dem Wert mindestens eines Elements in der Spalte E ist und ein Steuerungselement (40), welches Elemente (22) in die Spalte E in zusammenhängende Speicherplätze auf unsortierte Weise schreibt, den Entscheidungsbaum (10) modifiziert, um die relative Reihenfolge der Elemente (22) der Spalte E zu beschreiben, die Spalte CL modifiziert, so dass CL[i] den Wert des niedrigeren Elements innerhalb E[l] und E[h] enthält; den Wert L mit dem Wert jedes neuen Elements aktualisiert, das der Spalte E hinzugefügt wird, und den Wert NE aktualisiert, wenn je ein neues Element der Spalte hinzugefügt wird.
  6. Verfahren nach Anspruch 1, wobei der Aktualisierungsschritt den Schritt des Aktualisierens der Vergleichslistenspalte (CL) durch Suchen nach einer O enthält.
DE69629540T 1995-11-20 1996-11-14 Verfahren und Gerät zum Sortieren von Elementen Expired - Fee Related DE69629540T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/559,610 US5870584A (en) 1995-09-20 1995-11-20 Method and apparatus for sorting elements
US559610 1995-11-20

Publications (2)

Publication Number Publication Date
DE69629540D1 DE69629540D1 (de) 2003-09-25
DE69629540T2 true DE69629540T2 (de) 2004-06-24

Family

ID=24234265

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69629540T Expired - Fee Related DE69629540T2 (de) 1995-11-20 1996-11-14 Verfahren und Gerät zum Sortieren von Elementen

Country Status (4)

Country Link
US (1) US5870584A (de)
EP (1) EP0774711B1 (de)
JP (1) JPH09179743A (de)
DE (1) DE69629540T2 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6208764B1 (en) * 1998-08-20 2001-03-27 Eastman Kodak Company Rank filter using a linked-list to link elements in a memory array in numerical order
US6490629B1 (en) * 1998-10-13 2002-12-03 Genuity Inc. System and method for scheduling the transmission of packet objects having quality of service requirements
US6879996B1 (en) 2000-09-13 2005-04-12 Edward W. Laves Method and apparatus for displaying personal digital assistant synchronization data using primary and subordinate data fields
US8224858B2 (en) * 2009-05-04 2012-07-17 Engage Selling Solutions Inc. Methods and system for information storage enabling fast information retrieval
US8812516B2 (en) 2011-10-18 2014-08-19 Qualcomm Incorporated Determining top N or bottom N data values and positions
US9582322B2 (en) 2013-03-15 2017-02-28 Soft Machines Inc. Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping
US9627038B2 (en) 2013-03-15 2017-04-18 Intel Corporation Multiport memory cell having improved density area
US20140281116A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
JP6056576B2 (ja) * 2013-03-18 2017-01-11 富士通株式会社 割り込み要因を特定する方法及び装置
US20180197427A9 (en) * 2014-02-12 2018-07-12 Pearson Education, Inc. Dynamic content manipulation engine
US9805035B2 (en) * 2014-03-13 2017-10-31 Shutterstock, Inc. Systems and methods for multimedia image clustering
US9946538B2 (en) 2014-05-12 2018-04-17 Intel Corporation Method and apparatus for providing hardware support for self-modifying code

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB8531396D0 (en) * 1985-12-20 1986-02-05 Gersan Ets Sorting
US4989257A (en) * 1987-03-13 1991-01-29 Gtx Corporation Method and apparatus for generating size and orientation invariant shape features
US4987539A (en) * 1987-08-05 1991-01-22 Stanford University Apparatus and method for multidimensional characterization of objects in real time
US4873687A (en) * 1987-10-05 1989-10-10 Ibm Corporation Failing resource manager in a multiplex communication system
US4893302A (en) * 1988-03-31 1990-01-09 American Telephone And Telegraph Company, At&T Bell Laboratories Arrangement for switching concentrated telecommunications packet traffic
US4958341A (en) * 1988-03-31 1990-09-18 At&T Bell Laboratories Integrated packetized voice and data switching system
US4899333A (en) * 1988-03-31 1990-02-06 American Telephone And Telegraph Company At&T Bell Laboratories Architecture of the control of a high performance packet switching distribution network
US5130983A (en) * 1990-03-27 1992-07-14 Heffner Iii Horace W Method of polling to determine service needs and the like

Also Published As

Publication number Publication date
EP0774711A3 (de) 1997-06-11
US5870584A (en) 1999-02-09
JPH09179743A (ja) 1997-07-11
EP0774711B1 (de) 2003-08-20
DE69629540D1 (de) 2003-09-25
EP0774711A2 (de) 1997-05-21

Similar Documents

Publication Publication Date Title
DE69636761T2 (de) Speichern und wiederauffinden von geordneten schlüsselmengen in einem kompakten 0-kompletten baum
DE19810843B4 (de) Verfahren und Zugriffseinrichtung zum Bestimmen der Speicheradresse eines Datenwerts in einer Speichereinrichtung
DE69629540T2 (de) Verfahren und Gerät zum Sortieren von Elementen
DE10255128A1 (de) Computer-implementierte PDF-Dokumentenverwaltung
DE19743266C1 (de) Verfahren zum Hinzufügen bzw. Entfernen einer Adresse in einem teilbesetzten Suchbaum
DE3416939A1 (de) Verfahren zur steuerung von betriebseinrichtungen
DE60118973T2 (de) Verfahren zum abfragen einer struktur komprimierter daten
CH638913A5 (de) Vorrichtung in textverarbeitungsanlagen zum auswaehlen von zum ordnen qualifizierten datensaetzen unterschiedlicher laenge.
EP0523269A1 (de) Computersystem zur Datenverwaltung
DE2758829C2 (de) Datenverarbeitungsanlage mit mehreren Prozessoren
DE3327379A1 (de) Einrichtung und verfahren zum umordnen von datensaetzen
DE2900586C2 (de) Anordnung zum Decodieren von Codewörtern variabler Länge
DE69817672T2 (de) Vorrichtung zum Sortieren von Datenelementen in einem binären Baum und ein ATM Abstandshalter mit einer solchen Vorrichtung
DE10048478C2 (de) Verfahren zum Zugriff auf eine Speichereinheit bei der Suche nach Teilzeichenfolgen
DE3927343C2 (de) Programmierbare Fuzzylogikschaltung
DE19810784B4 (de) Rechnersystem
EP0912952B1 (de) Datenbanksystem und verfahren zum verwalten eines n-dimensionalen datenbestands
DE10057634A1 (de) Verfahren zur Verarbeitung von Text in einer Rechnereinheit und Rechnereinheit
DE2750126B2 (de)
WO1998049622A1 (de) Chipkarte mit speicherzugriffsmaximierung und protokollierung
DE4342521C1 (de) Verfahren und Anordnung zur Expansion komprimierter Daten
EP0760502B1 (de) Ordnungsverfahren für Zugehörigkeitsfunktionswerte linguistischer Eingangswerte in einem Fuzzy-Logic-Prozessor und Anordnung zu deren Durchführung
DE2816838C2 (de) Verfahren und Prioritätssteuereinheit zum Zuordnen von Prioritäten
EP0831395B1 (de) Verfahren zur maschinellen Erzeugung einer optimierten Wissensbasis für einen Fuzzy-Logik-Prozessor
EP1429254B1 (de) Interrupt-Behandlung in einem CAN-Knoten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee