dynamisches 2D-Array mit schnellem Zugriff / PriorityQueue

Anfängerfragen zum Programmieren mit PureBasic.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

dynamisches 2D-Array mit schnellem Zugriff / PriorityQueue

Beitrag von spider84 »

Hallo!
Ich würde gerne ein bissl mit Algos auf Bildern basteln. Dazu brauche ich ein Array mit der Größe des Bildes (kenne ich also erst zur Laufzeit). LinkedList finde ich hässlich. Soweit ich sehe gibts nur 3 Optionen: 1)LinkedList mit Links auf neue LinkedLists 2) 1D-Array mit Pointern auf neue 1D-Arrays und Größenänderung durch ReDim 3) allocatememory, wo ich aber jedesmal beim zugriff berechnen muss wo genau ich zugreifen muss...
hab ich eine geniale 4. option übersehen? gibts vlt eine lib? soll ich ein image oder imagegadget als array missbrauchen?

Zum anderen würde ich mit dem Array gerne wie in einem Labyrinth per Breitensuche arbeiten. Genaugenommen suche ich kürzeste Wege per Dijkstra - dafür wäre eine PriorityQueue genial. Muss ich da jetzt echt eine LinkedList nehmen und vorm Zugriff immer sort aufrufen?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: dynamisches 2D-Array mit schnellem Zugriff / PriorityQue

Beitrag von Fluid Byte »

spider84 hat geschrieben:Dazu brauche ich ein Array mit der Größe des Bildes (kenne ich also erst zur Laufzeit).
Wir reden hier von indizierten 8-Bit Bildern oder?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Beitrag von kswb73 »

4) Array neu anlegen. Du kannst mittels dem erneuten Aufruf von Dim ein Array neu anlegen. So kannst du Anzahl der Dimension und deren Größe Ändern. Die Werte gehen allerdings verloren, was in deinem Fall nicht weiter schlimm sein dürfte.
Bei meinen Tests blieben zwar manchmal die Werte noch im Speicher, z. B. wenn ich das Array vergrößerte, sie sind offensichtlich aber nicht gespert und werden wieder vom System vergeben z. B. für das neue Array.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, ich denke auch, hier besteht eine Unwissenheit bezüglich der Möglichkeiten von Dim.

Dim kann man beliebig erneut durchführen, man hat nur keine Garantie, dass irgendwelche Werte erhalten bleiben.

man kann jederzeit dynamisch Dim Array(x,y) durchführen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

Zuletzt geändert von spider84 am 09.07.2009 23:00, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

als Farbwert nimmt man normal eine Integer, also nutzt 24bit von einer Long.
du kannst stukturierte Elemente erstellen, um Farbe und Zusatzinformation im selben Array zu speichern.

Code: Alles auswählen

Structure Cell
  Color.l
  Weight.f
EndStructure

Dim Raster.Cell (799,599)   ; 800x600 Array
du musst bedenken, dass der Zugriff auf das Bild per StartDrawing extrem langsam ist, das ist dein Flaschenhals.
also wenn dir dein PB-Programm nachher so viel langsamer vorkommt als die C++ Lösung,
dann wird das am Drawing-Zugriff liegen, nicht an den Berechnungen.

zwar wirst du schon einiges rausholen, wenn du die eigentliche Berechnung im Array
machst und den Drawing-Zugriff nur fürs Rausholen und Reinschreiben benutzt,
aber direkter Speicherzugriff über API wäre trotzdem um einiges schneller.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Noch mal, wir reden von indizierten 8-Bit Bildern oder?
Alles andere wäre Schwachsinn da der Speicherverbrauch gigantisch wäre und die Geschwindigkeit leidet wenn man nicht direkt auf den Bildspeicher zugreift.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wie kommst du auf 8bit?
da steht doch nix drin, was auch nur die Vermutung nahelegt...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

eigentlich sollen die bilder universell sein - was pb draus macht, weiß ich nicht. die einzige einschränkung ist momentan, dass das bild auf den bildschirm passen sollte, weil ich keinen zoom schreiben wollte.

und ja, der speicherverbrauch wird wohl groß sein, aber das lässt sich später noch drücken durch benutzung anderer datentypen. im moment will ich aber ungenauigkeiten bei der berechnung als fehlerquelle ausschließen können.

hatte sowieso eben einen crash - vlt ein speicherleck oder so. jedenfalls hat der editor immer mehr unsinnige fehler gemeldet, dann waren die windows-icons weg und beim reboot kam ein bluescreen mit verweis auf rdbss.sys
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

>> jedenfalls hat der editor immer mehr unsinnige fehler gemeldet, dann waren die windows-icons weg und beim reboot kam ein bluescreen mit verweis auf rdbss.sys

lolz?

hast du nen 3GB Zugriff bei Win32 versucht, oder hast du nen schnuggeligen Virus?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten