dynamisches 2D-Array mit schnellem Zugriff / PriorityQueue
dynamisches 2D-Array mit schnellem Zugriff / PriorityQueue
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?
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?
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Re: dynamisches 2D-Array mit schnellem Zugriff / PriorityQue
Wir reden hier von indizierten 8-Bit Bildern oder?spider84 hat geschrieben:Dazu brauche ich ein Array mit der Größe des Bildes (kenne ich also erst zur Laufzeit).
Windows 10 Pro, 64-Bit / Outtakes | Derek
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.
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
Open Suse 11.2: PB 4.4
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
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
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.
Der Weise weiß, dass er ein Narr ist.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
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.
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
>> 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?
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.
Der Weise weiß, dass er ein Narr ist.