Such-/Vergleich-Algorithmus gesucht
Such-/Vergleich-Algorithmus gesucht
Gegeben ist ein Array(100) mit verschiedenen Helligkeitswerten als c.
Beispiel: meinArray(65)=33 -> Pixel 65 hat Helligkeit 33.
Nun habe ich in einer anderen Variable einen Wert wie 55 und suche, welcher Array-Wert am nähesten ist. Ich suche quasi das Pixel zu meiner Helligkeit.
Wenn jemand einen guten Suchalgorithmus für sowas kennt, dann her damit!
Beispiel: meinArray(65)=33 -> Pixel 65 hat Helligkeit 33.
Nun habe ich in einer anderen Variable einen Wert wie 55 und suche, welcher Array-Wert am nähesten ist. Ich suche quasi das Pixel zu meiner Helligkeit.
Wenn jemand einen guten Suchalgorithmus für sowas kennt, dann her damit!
Code: Alles auswählen
minAbstand = #MAXLONG
For n = 0 To 100
Abstand = Abs(meinArray(n)-meinWert)
If Abstand < minAbstand :
minAbstand = Abstand
ArrayFeld = n
EndIf
Next
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Nic meinte ja den Fall, dass die Werte schon sortiert vorliegen. Dann kann man das Verfahren auf log(n) Suchschritte beschleunigen, indem man z.B. die binäre Suche leicht modifiziert.Aber wenn die Werte in deinem Array sortiert sind
Das Sortieren dauert definitiv schon länger als die lineare Suche wie in stargates Beispiel.
!UD2
ah, da hatten wohl noch mehr leute hier informatik erstes semester.*würg*
die sache ist, dass ich für mehrere pixel die helligkeit mit dem array abgleiche - somit hätt zwar mit quicksort im besten fall O(log n) zusätzlichen aufwand zum suchen, aber 100*n ist weniger als 100*(log n).
nur so nebenbei: gibts für trackbar ein change-event bzw. irgendwelche anderen?
die sache ist, dass ich für mehrere pixel die helligkeit mit dem array abgleiche - somit hätt zwar mit quicksort im besten fall O(log n) zusätzlichen aufwand zum suchen, aber 100*n ist weniger als 100*(log n).
nur so nebenbei: gibts für trackbar ein change-event bzw. irgendwelche anderen?
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
100*n > 100*(log n) für alle n>0
Aber iss klar, was du meinst.
[edit]
Folgender Code erzeugt bei mir (unter Linux) bei jeder Änderung des Trackbars ein #PB_Event_Gadget - Event.
[/edit]

Aber iss klar, was du meinst.
[edit]
Folgender Code erzeugt bei mir (unter Linux) bei jeder Änderung des Trackbars ein #PB_Event_Gadget - Event.
Code: Alles auswählen
If OpenWindow(0, 0, 0, 300, 40, "TrackBarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
TrackBarGadget(1, 5, 5, 290, 20, 0, 10000)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget And EventGadget() = 1
Debug "Moved"
EndIf
Until event = #PB_Event_CloseWindow
EndIf
!UD2
Diese Art zu suchen, also das ähnlichste Element, nennt sich "Nearest Neighbour", vielleicht kannst Du mit diesem Stichwort ja irgendwo noch andere gute Ansätze finden.


ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Nicht vergessen: Wenn der Abstand sowieso =1 (minimalster abstand) oder <1 (identisch) ist, dann die SUche mit Break abbrechen, um noch mal eine ordentliche Portion Zeit zu sparen!!STARGÅTE hat geschrieben:Das vergleich jeden ArrayFeldWert mit deinem Wert und merkt sich den kleinsten Abstand. und am ende hast du dann dein ArrayFeldCode: Alles auswählen
minAbstand = #MAXLONG For n = 0 To 100 Abstand = Abs(meinArray(n)-meinWert) If Abstand < minAbstand : minAbstand = Abstand ArrayFeld = n EndIf Next
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End