Lineare und binäre Suche nach Elementen in einem Array


Linearsuche im Bereich
Es ist sehr oft notwendig, eine bestimmte Bedeutung im Körper zu finden oder zu berichten, dass es nicht da ist. Zu diesem Zweck müssen wir alle Elemente der Masse von der ersten bis zum letzten betrachten. Ist ein Element gleich dem zugewiesenen Wert gefunden worden XWir müssen die Suche abschließen und das Ergebnis herausholen. Dieser Algorithmus wird aufgerufen linear.

Der lineare Algorithmus wird verwendet, um das maximale (mindesten) Element der Masse zu finden. Es ist auch ein Suchalgorithmus. Aber hier sind wir gezwungen, zum Ende der Masse zu gehen, da alle Elemente mit dem aktuellen Wert des Maximums (Minimum) verglichen werden müssen und wenn das aktuelle Element größer ist (weniger) das Maximum (Minimum) um das Maximum (Minimum) zu ersetzen.

Ein weiterer Ansatz könnte dieser Aufgabe zugrunde gelegt werden. Ein vorzeitiger Austritt aus dem Zyklus kann verwendet werden, wenn der gewünschte Wert gefunden wird.
In C+++ wird der Break-Operator für die vorzeitige Freigabe aus dem Zyklus verwendet;

Doppelsuche
Die duale (oder binäre) Suche ist ein effektiver Suchalgorithmus, der schneller durchgeführt wird als eine lineare Suche. Beispielsweise wird für einen Cluster von 1024 Elementen eine lineare Suche im schlimmsten Fall (wenn das Element nicht in der Masse ist) alle 1.024 Elemente abdecken, aber eine binäre Suche wird ausreichen, um 10 Elemente zu verarbeiten. Dieses Ergebnis wird erreicht, indem der Suchbereich nach dem ersten Schritt des Zyklus auf 512 Elemente reduziert wird, nach dem zweiten Schritt auf 256, etc.
Mangel an einem solchen Algorithmus ist die Anforderung der Konsistenz von Daten, sowie die Möglichkeit des Zugriffs auf jedes Datenelement für konstante (nicht aufgrund der Anzahl der Daten) Zeit. So kann der Algorithmus nicht an unregulierten Massen arbeiten.
Algorithmen
  1. Wählen Sie das mittlere Element A[c] und vergleichen X
  2. wenn X = A[c]Sie haben es gefunden.
  3. wenn X < A[c]nach der ersten Hälfte suchen.
  4. wenn X > A[c]nach der zweiten Hälfte suchen.
Durchführung
L = 0; R = N; /
während (L PER R - 1)
{~}
c = (L + R) / 2; / gefunden Mitte
wenn (X PER A[c] ) // Kompression des Cut-offs
R = c;
andere
L = c;
♪
wenn (A[L)
âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa â
andere
cout copy paris nicht gefunden;


Wo:
А - die Referenzmasse,
N Größe der Masse,
X - die angegebene Zahl,

Eine weitere Umsetzung ist möglich.
Zum Beispiel mit vorzeitiger Ausfahrt aus dem Zyklus
L = 0; R = N - 1;
(R grad=L)
{~}
c = (L + R) / 2;
wenn (SPANTING)
{~}
nX = c;
Bruch
♪
wenn (X PER A[c)) R = Mitte - 1;
wenn (X Entlüftung A[c)) L = Mitte + 1;
♪
wenn (nX PER 0)
cout copy paris nicht gefunden;
andere
cout PERPEN "A[" À À À À À À À À À À ᐅ À À À À À À À À À À À À À À À ̄ À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À À 

Vergleich von linearen und dualen Suchalgorithmen nach Anzahl der Vergleiche
Beispiele
NeinSuche nach der LinieDoppelsuche
222
ANHANGANHANG5.
1024102411)
ANHANGANHANGANHANG

Plus die Zwei-Wege-Sortierung ist, dass es schneller gemacht wird.
Weniger - Eine vorsortierte Masse ist erforderlich.