Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
880to884
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Theoretische Frage zur schnellen Suche

Theoretische Frage zur schnellen Suche
27.06.2007 00:38:25
frigo
Hallo zusammen,
ich habe ein Worksheet mit ca. 40.000 numerischen Werten untereinander in einer Spalte.
Nun muss ich diese Liste per Makro mehrere tausend mal nach dem Vorhandensein eines jeweils neuen Wertes prüfen.
Weiß jemand, was hier schneller geht:
1. Nutzung der integrierten Find-Methode oder
2. einmalige Sortierung der Liste und eigens programmierter Binary-Search?
Auch bei 1. kann die Liste gerne einmalig sortiert werden (wenns hilft, was ich nicht glaube).
Ich bin mir nicht sicher, da ich bei 1. einen "langsamen" String-Vergleich annehme, allerdings mit der hoffentlich performant programmierten Find-Methode; dagegen muss ich bei 2. einzelne Zellen ansprechen und auslesen, was sicher auch nicht wirklich schnell ist.
Wäre 3. einmaliges Einlesen der Liste in ein Array und dann der Binary-Search die optimale Lösung?
Bitte keine Zeit verschwenden mit Ausprobieren, das kann ich dann auch... vielleicht steckt aber einer tief im Detail, so dass ich mir das erspare!
Danke Euch!
frigo

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Theoretische Frage zur schnellen Suche
27.06.2007 07:13:00
Beverly
Hi,
verwende .Find. Eine Sortierung der Liste ist hierbei nicht erforderlich.
Ich weiß leider nicht, was du unter "Binary-Search" verstehst. M.E. wird ein Binärvergleich doch bei der Suche in einer Nicht-Excel-Datei verwendet. Da kann ich mich aber irren.
Das Einlesen in ein Array ist auf jeden Fall die langsamste Methode.
________________________________________

AW: Theoretische Frage zur schnellen Suche
27.06.2007 07:15:25
Beverly
Hi,
verwende Find. Eine Sortierung der Liste ist hierbei nicht erforderlich.
Ich weiß leider nicht, was du unter "Binary-Search" verstehst. M.E. wird ein Binärvergleich doch bei der Suche in einer Nicht-Excel-Datei verwendet. Da kann ich mich aber irren.
Das Einlesen in ein Array ist auf jeden Fall die langsamste Methode.
________________________________________

Anzeige
AW: Theoretische Frage zur schnellen Suche
27.06.2007 07:29:00
frigo
Hi Beverly,
danke für Deine Antwort! Jedoch denke ich, dass es äußerst wichtig ist zu wissen, was ich unter "Binary-Search" verstehe (dachte, das wäre der
- Es wird zuerst die Anzahl ermittelt z.B. 100
- dann wird der Wert in der Mitte verglichen z.B. der 50ste,
-- ist dieser größer als der gesuchte Werte wird die Mitte der unteren Hälfte verglichen z.B. der 25ste,
-- ist dieser kleiner als der gesuchte Werte wird die Mitte der oberen Hälfte verglichen z.B. der 75ste,
usw.
Dies ist bei numerischen Werten in sortierter Reihenfolge die schnellste Sortiermethode.
(Wiki mit Code-Beispielen http://de.wikipedia.org/wiki/Bin%C3%A4re_Suche)
frigo

Anzeige
AW: Theoretische Frage zur schnellen Suche
27.06.2007 07:30:05
frigo
Hi Beverly,
danke für Deine Antwort! Jedoch denke ich, dass es äußerst wichtig ist zu wissen, was ich unter "Binary-Search" verstehe (dachte, das wäre der
- Es wird zuerst die Anzahl ermittelt z.B. 100
- dann wird der Wert in der Mitte verglichen z.B. der 50ste,
-- ist dieser größer als der gesuchte Werte wird die Mitte der unteren Hälfte verglichen z.B. der 25ste,
-- ist dieser kleiner als der gesuchte Werte wird die Mitte der oberen Hälfte verglichen z.B. der 75ste,
usw.
Dies ist bei numerischen Werten in sortierter Reihenfolge die schnellste Sortiermethode.
(Wiki mit Code-Beispielen http://de.wikipedia.org/wiki/Bin%C3%A4re_Suche)
frigo

Anzeige
AW: Theoretische Frage zur schnellen Suche
27.06.2007 08:16:00
Oberschlumpf
Hi
Warum benutzt du zum einen nicht den Pseudocode (ersetzt durch die entsprechend richtigen Befehle) aus dem von dir vorgestellten Wikipedia-Link und zum anderen versuchst du dann die Suche per VBA mit der eingebauten Suchfunktion?
In beiden Fällen stoppst du mit
Start = Timer
Code
Ende = Timer
MsgBox Ende - Start
die benötigte Zeit. Dann weißt du doch, welche Methode die schnellere ist. Oder habe ich deine Frage falsch verstanden?
Ciao
Thorsten

AW: Theoretische Frage zur schnellen Suche
27.06.2007 20:29:07
frigo
Hallo Oberschlumpf,
Danke für Deine Antwort. Ich dachte, ich könnte mir das Ausprobieren ersparen.
frigo

Anzeige
AW: Theoretische Frage zur schnellen Suche
27.06.2007 21:24:05
Daniel
Hi
naja ein paar Grundsatztests sind schnell gemacht.
FIND scheint wirklich recht gut programmiert zu sein, jedenfalls geht das Finden eines Wertes in einem 65536 x 3 - Zellbereiches schneller als alleine das Einlesen des gleichen Bereiches in eine Array-Variable .
(Womit sich die Frage, ob es sich lohnt, die FIND-Funktion in VBA nachzuprogrammieren wohl erledigt haben dürfte)
Gruß, Daniel

AW: Theoretische Frage zur schnellen Suche
28.06.2007 09:57:00
bst
Hi Daniel,

FIND scheint wirklich recht gut programmiert zu sein, jedenfalls geht das Finden eines Wertes in einem 65536 x 3 - Zellbereiches schneller als alleine das Einlesen des gleichen Bereiches in eine Array-Variable .


Das kommt darauf an nach was Du suchst. Suche mal nach dem 1. oder letzten oder einem nicht vorkommenden Wert, dann ist das - zumindestens hier bei mir - nicht mehr so.


(Womit sich die Frage, ob es sich lohnt, die FIND-Funktion in VBA nachzuprogrammieren wohl erledigt haben dürfte)


Darüber solltest Du noch mal ernsthaft nachdenken...
Es soll ja wohl mehrere tausend Mal gesucht werden, nicht nur einmal.
Und, es war nur von einer Spalte die Rede d.h. man benötigt nur ein 1-dimensionales Array.
Die Suche in einem 1-dim Array ist übrigens sehr viel schneller als die Suche in einem 2-dim Array.
cu, Bernd

Anzeige
Ergebnis
28.06.2007 21:22:29
frigo
Sodele,
nachdem die Alternative ".Find" allein in einem Beispiel die ganze Nacht gelaufen ist und ich dann abbrechen musste, um vernünftig arbeiten zu können, hab ich dann die Array - Binary_Search umgesetzt.
Ergebnis: Gleiches Beispiel lief in wenigen Minuten (!!!).
Das wollte ich Euch nicht vorenthalten ;-).
Danke an alle, besonders an Dich Bernd bst!
frigo

AW: Theoretische Frage zur schnellen Suche
27.06.2007 11:47:00
bst
Auch Hallo,
Bereits eine 'lineare Suche' in einem Array ist schneller als .Find. Bei mehreren tausend Suchvorgängen spielt die Zeit die zum einmaligen Einlesen dieses Arrays aus der Tabelle benötigt wird wohl kaum noch eine Rolle.
cu, Bernd

Anzeige
AW: Theoretische Frage zur schnellen Suche
27.06.2007 20:30:00
frigo
Hallo Bernd,
Danke für Deine Hilfe. Werde ich dann mal mit Array und Binärer Suche umsetzen.
Gruß, frigo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige