Seite 1 von 1

Funktion von VERGLEICH()

Verfasst: Mi 11. Nov 2020, 11:37
von L1800Turbo
Hallo zusammen,

jetzt muss ich mich doch auch mal registrieren, hab bisher nichts zu meinem Problem gefunden.
Derzeit scheitere ich daran, wie der VERGLEICH-Algorithmus funktioniert.
Ich habe mein Problem jetzt auf ein minimales Beispiel zusammen gestaucht.

Plan ist es, aus einem Array die letzte Position zu finden, in dem eine 1 vorkommt. Links ist das, was mir errechnet wurde, rechts die Formel dazu:

Code: Alles auswählen

1	=VERGLEICH(1;{1};1)
1	=VERGLEICH(1;{1;0};1)
3	=VERGLEICH(1;{1;0;1};1)
3	=VERGLEICH(1;{1;0;1;0};1)
3	=VERGLEICH(1;{1;0;1;0;0};1)
3	=VERGLEICH(1;{1;0;1;0;0;0};1)
7	=VERGLEICH(1;{1;0;1;0;0;0;0};1)
8	=VERGLEICH(1;{1;0;1;0;0;0;0;0};1)
9	=VERGLEICH(1;{1;0;1;0;0;0;0;0;0};1)
10	=VERGLEICH(1;{1;0;1;0;0;0;0;0;0;0};1)
Das scheint soweit zu funktionieren, bis das Array eine gewisse Länge enthält und dann andere Ergebnisse zeigt, wo ich noch nicht so ganz schlau draus werde.

Wenn ich die Sortierreihenfolge umdrehe (was aus meiner Überlegung heraus eigentlich richtig wäre), erhalte ich nochmal völlig andere Ergebnisse:

Code: Alles auswählen

1	=VERGLEICH(1;{1};-1)
1	=VERGLEICH(1;{1;0};-1)
1	=VERGLEICH(1;{1;0;1};-1)
1	=VERGLEICH(1;{1;0;1;0};-1)
3	=VERGLEICH(1;{1;0;1;0;0};-1)
3	=VERGLEICH(1;{1;0;1;0;0;0};-1)
1	=VERGLEICH(1;{1;0;1;0;0;0;0};-1)
1	=VERGLEICH(1;{1;0;1;0;0;0;0;0};-1)
3	=VERGLEICH(1;{1;0;1;0;0;0;0;0;0};-1)
3	=VERGLEICH(1;{1;0;1;0;0;0;0;0;0;0};-1)
Weiß da jemand etwas zu? Ich mache doch sicher nur einen Denkfehler da irgendwo...
Vielen Dank!
Kai

Verfasst: Di 24. Nov 2020, 21:43
von Lupo
1. Wer die Binärsuche (in Excel: Default, muss nicht angegeben werden) beim VERGLEICH auf unsortierte Daten anwendet, ist selbst schuld.
2. Die Pos. 7 bei 1010000 resultiert dementsprechend daraus, dass die Mitte (als binärer Einsprungpunkt) 0 ist und (wiederum binär) nach oben versucht wird, einen Eintrag >=1 zu finden. Das schlägt fehl. Müsste alles durchsucht werden, wäre es keine Binärsuche (=Wurzel n Vorgänge). Für die untere Hälfte muss die Binärsuche aufgrund der Sortierungsannahme ausnahmslos <=0 annehmen. Die 7 wird nun zutreffend verwendet, weil 0<=1 ist: Bedingung der Suche erfüllt.
3. Excel liefert die gleichen Ergebnisse.
4. -1 für das 3. Argument "Suchverfahren" habe ich noch nie benötigt. Daher habe ich mir Dein zweites CODE nicht angeschaut.
5. Wichtig ist 0 (Komplettsuche). Hier wird immer das erste exakte Auftreten zurückgegeben (=n/2 Vorgänge). Dieses kann man bei sortierten Daten (hier: Ganzzahlen) ebenfalls binär veranstalten:

=VERGLEICH(B1-0,1;A1:A9)+1 für das erste Auftreten (sortiert)
=VERGLEICH(B1-0,0;A1:A9)+0 für das letzte Auftreten (sortiert)

Die überflüssigen Konstanten habe ich mit Absicht (Alignment) verwendet.