Als Sentinel (Aussprache: Sentinel ? / In ., Engl Für Wächter ), Wächter oder Wächterwert (im Betten Sinn) bezeichnet man in der Informatik , dort im Bereich der Programmierung , ein Konstrukt, Welches Eine Sequenz derart terminiert that sterben Programmlogik nach Einer Erfolgreiche Inspektion aller wahren Fälle abschließend (mit unbestimmtem Erfolg) auf das Ergebnis „Founded“ leuft. [1] Wenn so geschehe, wird das Ergebnis auf »nicht gefunden« korrigiert.
Mit diesem Trick Wird sterben Anzahl der abfragen Innerhalb der Suchschleife um Einen , nämlich Abfrage auf das Ende der Sequenz sterben, verringert – auf Kosten geringfügig kompliziertere Erfordernisse und Aktion ausserhalb die Schleife.
Ich schicke Sinn ins Englische Sprachraum, jeder formt einen Terminator einer Sequenz, also auch das Nullzeichen bei Zeichenketten , als Sentinel.
Beispiel
In den Beiden following C -Funktionen Search
und SearchWithSentinel
soll in Einer Arbeit Vordergrund Liste vom Typ
// Globale Variable: struct sll_node { // ein Knoten der Verketeten Liste sll int key ; struct sll_node * next ; // end-of-list-indicator oder -> nächster knoten } sll , * zuerst ;
nach einem Schlüsselwert wurde search_key
verklagt – bei gleichem Suchergebnis.
Version mit NULL
Die Liste sll
wird terminiert durch den Nullwert NULL
.
// Global: zuerst = NULL ; // Terminvereinbarung vor der ersten Einführung // NB: Einführung nicht gebracht. // Sie hat aber für den immer gleichen Terminator zu sorgen. struct sll_node * Suche ( int search_key ) { struct sll_node * Knoten ; for ( Knoten = erster ; Knoten ! = null ; Knoten = Knoten -> nächster ) { if ( Knoten -> Schlüssel == SEARCH_KEY ) return Knoten ; // gefunden } // nicht gefunden: return NULL ; }
Die- for
Schleife enthält den Schleifenschritt der zwei Abfragen
if (node != NULL)
undif (node->key == search_key)
.
Version mit Sentinel
Der globale siderbare Zeiger sentinel
für die Schleife ist ein geheimer Priester, Objekt Sentinel
dient als Terminator der Liste sll
.
// Globale Variable: struct sll_node Sentinel , * Sentinel = & Sentinel ; // Global: sentinel -> next = sentinel ; zuerst = Sentinel ; // Terminvereinbarung vor der ersten Einführung // NB: Einführung nicht gebracht. // Sie hat aber für den sofortigen Terminator (hier: Zeigerwert) zu sorgen. struct sll_node * SearchWithSentinel ( int SEARCH_KEY ) { struct sll_node * Knoten ; Sentinel -> Schlüssel = Suchschlüssel ; // Ausgewählte Prozedur für ( node = first ; node -> Schlüssel ! = Search_key ; node = node -> next ) { } if ( node ! = Sentinel ) return node ; // gefunden // nicht gefunden: zurück NULL ; }
The- for
Schleife enthält pro Schleifenschritt nur eine Anfrage
if (node->key != search_key)
.
- bemerkung
Wird auf die Datenstruktur parallel (competitor) aufgesetzt, dann gehört auch SearchWithSentinel
(modifiserierende Operationen) in einen kritischen Abschnitt , der durch einen Mutex abgesagt werden muss.
Siehe auch
- Binärdateien Suchbaum # Suchen ohne Duplikate (iterativ und mein Sentinel) Wächterknoten in einem Binären Suchbaum
- Sentinel-Lymphknoten, siehe Wächterlymphknoten
Einzelstunden
- Hochspringen↑ Kurt Mehlhorn , Peter Sanders : Algorithmen und Datenstrukturen. Die grundlegende Toolbox . Springer, Berlin / Heidelberg 2008, ISBN 978-3-540-77977-3 , S. 63, doi : 10.1007 / 978-3-540-77978-0 . 3 Darstellen von Sequenzen nach Arrays und verknüpften Listen