Forum: PC-Programmierung bsearch Funktion


von Peter (Gast)


Lesenswert?

Hallo Leute,
eine kurze Frage:

Wieviele Vergleiche benötigt bsearch zum Sortieren von 100.000 
Elementen?
Vergleicht sie nicht das 1. Element mit den anderen 99.999,
dann das 2. mit den restlichen 99.998 und so weiter?

MfG

von Klaus W. (mfgkw)


Lesenswert?

nein, bsearch macht binäre Suche (Intervallhalbierung nach jedem 
Vergleich).
Deshalb müssen ja die Daten auch sortiert sein.

Wer will das wissen? Hausuafgabe?

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Peter schrieb:
> Wieviele Vergleiche benötigt bsearch zum Sortieren von 100.000
> Elementen?

lb(n)

von Klaus W. (mfgkw)


Lesenswert?

> lb(n)

aber nicht immer...

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Klaus W. schrieb:
>> lb(n)
>
> aber nicht immer...

Aber immer öfter ;-)

O(lb(n))

von Karl H. (kbuchegg)


Lesenswert?

Peter schrieb:
> Hallo Leute,
> eine kurze Frage:
>
> Wieviele Vergleiche benötigt bsearch zum Sortieren von 100.000
> Elementen?
> Vergleicht sie nicht das 1. Element mit den anderen 99.999,
> dann das 2. mit den restlichen 99.998 und so weiter?

Dann wäre es aber eine bescheuerte Funktion.
In der Zeit als es noch gedruckte Telefonbücher gab, hat jeder das 
Verfahren des b_inary _search intuitiv angewendet.
Telefonbuch in der Mitte aufschlagen. Steht der gesuchte Name dort? 
Ja->gefunden. Nein? In welcher Hälfte muss er sein - vordere oder 
hintere Hälfte? Dort dann wieder in der Mitte aufschlagen etc. etc. 
Genau aus diesem Grund waren Telefonbücher nach dem Namen sortiert.

von Peter II (Gast)


Lesenswert?

Karl H. schrieb:
> Dort dann wieder in der Mitte aufschlagen etc. etc.
> Genau aus diesem Grund waren Telefonbücher nach dem Namen sortiert.

wieso waren? Sind sie aktuell nach Rufnummer sortiert?

von PittyJ (Gast)


Lesenswert?

Peter II schrieb:
> Karl H. schrieb:
>> Dort dann wieder in der Mitte aufschlagen etc. etc.
>> Genau aus diesem Grund waren Telefonbücher nach dem Namen sortiert.
>
> wieso waren? Sind sie aktuell nach Rufnummer sortiert?

Telefonbücher gibt es nicht mehr. Es werden keine mehr gedruckt.
Deshalb 'waren'.

von Mikro 7. (mikro77)


Lesenswert?

Karl H. schrieb:

> In der Zeit als es noch gedruckte Telefonbücher gab, hat jeder das
> Verfahren des b_inary _search intuitiv angewendet.

OT: Naja, sagen wir mal so "ähnlich": Es gibt ja noch Buckets als 
Unterstützung (Anfangsbuchstabe) und die Intervallhalbierung läuft bei 
mir zumindest nicht so optimal. ;-)

Klaus W. schrieb:
>> lb(n)
>
> aber nicht immer...

Wann denn nicht?

: Bearbeitet durch User
von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

S. J. schrieb:
> Wann denn nicht?

lb(n) ist doch nur die obere Grenze. Wenn Du den Eintrag vorher findest, 
dann werden entsprechend weniger Vergleiche nötig.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

PittyJ schrieb:
> Telefonbücher gibt es nicht mehr.

http://www.telefonbuchversand.de/

das wissen scheinbar nicht alles und verkaufen es einfach noch.

von Mikro 7. (mikro77)


Lesenswert?

Habe das so in Erinnerung, dass immer bis zum "Ende" gesucht werden muss 
(zwei nebeneinanderliegende Elemente). Der vewendete Operator ist ja "<" 
und nicht "==".

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

S. J. schrieb:
> Habe das so in Erinnerung, dass immer bis zum "Ende" gesucht werden muss
> (zwei nebeneinanderliegende Elemente). Der vewendete Operator ist ja "<"
> und nicht "==".

Ja, Du magst recht haben. Du halbierst den zu durchsuchenden Bereich mit 
jedem Schritt und prüft am Ende, ob Du das gesuchte Element gefunden 
hast. Da hat mich Klaus auf's flasche Gleis gelockt ;-)

von Nase (Gast)


Lesenswert?

Hat eigentlich irgendjemand mal die Frage gelesen? SCNR

Peter schrieb:
> Wieviele Vergleiche benötigt bsearch zum Sortieren von 100.000
> Elementen?

von Klaus W. (mfgkw)


Lesenswert?

Torsten R. schrieb:
> Ja, Du magst recht haben. Du halbierst den zu durchsuchenden Bereich mit
> jedem Schritt und prüft am Ende, ob Du das gesuchte Element gefunden
> hast. Da hat mich Klaus auf's flasche Gleis gelockt ;-)

Das ist ein harter Vorwurf...

Erstens gibt es Varianten von bsearch(), nicht alle sind exatk gleich.
MAn kann durchaus jeweils in der Intervallmitte auf GLeichheit testen.

Aber davon abgesehen ist die Länge auch nicht immer eine Zweierpotenz, 
und dann unterscheiden sich die Lauflängen zumindest um +/-1, je nachdem 
ob man in die kürzere oder die längere Hälfte verzweigt :-)
Also exakt gleich ist es nicht immer...

von Eric B. (beric)


Lesenswert?

Nase schrieb:
> Hat eigentlich irgendjemand mal die Frage gelesen? SCNR
>
> Peter schrieb:
>> Wieviele Vergleiche benötigt bsearch zum Sortieren von 100.000
>> Elementen?

Dann heisst die Antwort also: unendlich viele, weil bsearch sortiert 
nicht ;-)

von Klaus W. (mfgkw)


Lesenswert?

oh, du hast so recht...
Entweder meint er qsort oder suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.