BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Funktion von VERGLEICH()

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
L1800Turbo
Beiträge: 1
Registriert: Mi 11. Nov 2020, 11:29

Funktion von VERGLEICH()

Beitrag von L1800Turbo » Mi 11. Nov 2020, 11:37

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

Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

Beitrag von Lupo » Di 24. Nov 2020, 21:43

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.
MfG Lupo - xxcl.de Win10ProLO6062

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten