Sentinel (Programmierung)



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 Searchund SearchWithSentinelsoll 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_keyverklagt – bei gleichem Suchergebnis.

Version mit NULL

Die Liste sllwird 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- forSchleife enthält den Schleifenschritt der zwei Abfragen

  1. if (node != NULL) und
  2. if (node->key == search_key).

Version mit Sentinel

Der globale siderbare Zeiger sentinel für die Schleife ist ein geheimer Priester, Objekt Sentineldient 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- forSchleife enthält pro Schleifenschritt nur eine Anfrage

  1. 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

  1. 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