🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 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 gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten