Beiträge von Swoncen

    Hallo!

    Ich hab eine Stelle in meinem Algorithmus den ich extrem beschleunigen kann indem ich einen großen Bereich im Speicher auf 0 setz. Ich möchte 640*480 Byte auf 0 setzen und ZeroMemory ist viel zu langsam. Kennt wer eine schnellere Möglichkeit?

    Sollte eigentlich in jedem guten C#-Buch drinnen stehn. Schau dir die GDI+ an. Wenn du etwas mehr mit Bildbearbeitung vorhast, solltest du dir deine eigenen Algorithmen schreiben, weil die GDI+ etwas langsam ist, was in der Bildverarbeitung fatal sein kann. Was genau hast du denn vor? Ich selbst bin auch ein Bildverarbeitungsfreak und hab eine relativ große Image-Klasse geschrieben.

    Achja.. ich programmier aber in C++ (nicht managed) weil der garbage collector ziemlich stören kann. Soviel ich weiß muss man in C# mit dem gc leben, weils immer managed ist, aber ich hab da nicht soviel Ahnung in C#.

    mfg

    Wen es noch interessiert: Ich habs jetzt implementiert und es läuft im Schnitt auf große Flächen 10 mal so schnell wie der Floodfill-Algorithmus. Das interessante ist, dass der Algorithmus schneller ist, wenn ich alle 8 Umgebungspixel betrachte und abbreche, wenn eines davon nicht grün ist als wenn ich nur 4 Umgebungspixel betrachte.

    Zitat

    das ding brauch speed!



    Auf das kann ich gut verzichten bei einem Laptop, wenn er dafür nicht so heiß wird. Ich hab einen Pentium 4 2,66 GHz Laptop mit Radeon 9600 GraKa vor ca 2 Jahren gekauft und er wird oft so heiß, dass er sich von selbst abdreht.

    Bei einem Laptop würd ich auf folgende Dinge besonders achten:

    Mobiler Prozessor
    Lüfterlautstärke
    Gewicht
    Größe
    Monitor (nicht größe, sondern Lichtstärke)
    Schwache GraKa, damits nicht zu heiß wird.
    Vor allem kein Shared Memory

    Das wären meine jetzigen Kriterien. Wenns geht, würd ich sogar einen Laptop ohne Software kaufen.. Software hab ich genug..

    Wenn man das so betrachtet könnte es wirklich gut sein für MacOS. Dadurch, dass man die Möglichkeit hat auch Windows zu benutzen "trauen" sich sicher mehr Leute einen Apple zu kaufen. Dadurch kann man ohne Verluste MacOS "probieren" und vielleicht werden einige Windows User bekehrt. Mir selbst ist Windows am liebsten, aber ich hab mir schon überlegt einen Apple zu kaufen.

    Die TU-Version vom Windows XP fragt nie nach einem Update oder nach einem Ort, wo man es hinspeichern möchte. Zumindest ist es mir noch nicht gelungen (Hab ehrlich gesagt auch nicht vor mich damit zu beschäftigen :-)). Es speichert immer dorthin wo's grad geht.

    Hallo!

    Danke für deine Anregungen! Folgendes:

    Sagen wir es ist z.B.: eine 640*480 Matrix und es sind sehr viele solcher zusammenhängender Graphen in dieser Matrix. Ich brauch von allen die maxima. Somit kann ich nicht von links, recht, unten und oben kommen. Es liegt am Speicher, der Zeilenweiße linear im Speicher liegt. So wie ich nach dem ersten grünen Feld suche, ist sicher die schnellste.

    Leider ist nicht bekannt, wie der Graph aussieht, sonst wär es leicht. Die einzige Möglichkeit das Problem zu lösen ist diese, sich IM Graph zu bewegen und so die Maxima finden. Die erste Idee war eben der Floodfill, aber wir kennen den Performanceverlust.. Das extreme ist, dass ein solcher Graph auch 20.000 Felder beinhalten kann, deswegen war die nächste Idee, dass ich mich nur am Rand bewege. Das war schon meine Idee, wie ich diesen Thread gestartet hab, aber ich wollte sehen welche Ideen da noch so kommen. Die Frage war nur, wie ich automatisch am Rand bleib. Meine Idee war folgende:

    1.) Schau aufs Feld rechts neben dem aktuellen. Falls es im Graphen ist, dann schau wieviele Nachbarn dieses Feld hat. (Alle 8 Nachbarn). Falls dieses Feld weniger als 8 grüne Nachbarn hat, dann marschier dorthin. Das ganze solange ich nach rechts so gehen kann. Wenns nicht mehr geht, dann das gleiche mit nach unten gehen, nach links gehen und nach oben gehen.

    2.) Das ganze funktioniert rekursiv ähnlich wie Floodfill, nur mit der Außnahme, dass ich Felder nicht betrete, die 8 grüne Nachbarn haben.


    Somit bleib ich immer am Rand und spar mir die massigen Felder in der Mitte. Wenn ich durch die rekursiven Aufrufe wieder zum Anfang komme, ist es fertig. Jetzt hab ich mir gedacht, dass die 8 Nachbarn für jedes Feld eine große Anzahl von Vergleichen ist, deswegen wähl ich die 4er-Umgebung (oben, rechts, unten, links).



    Die Grafik zeigt die Nachbarn pro Feld für die verschiedenen Umgebungen. Das einzige was hier anders ist, ist dass es mehr 4er gibt als 8er in der 8er Umgebung (Im Graph, nicht in obiger Darstellung!). Es kommt aber aufs selbe, wenn ich trotzdem 4er betrete, aber keine 4er betrete, wenn ich schon auf einem 4er bin. Somit hab ich mir schon wieder einiges gesparrt. Die nächste Ersparniss ist, dass ich nicht alle Nachbarn anschauen muss.

    1.) Von dem Feld wo ich komm, weiß ich dass es ein grüner Nachbar ist.
    2.) Sobald ich einen Nachbar finde, der nicht grün ist, kann ich das Feld betreten.

    Ja das waren meine Überlegungen. Vielleicht fällt jemandem noch was besseres ein. Ich würd mich freuen..

    mfg

    Ja hab ich mir auch schon gedacht, jedoch ist es bei ca 10.000 - 50.000 Punkten in einem Graphen trotzdem sehr Zeitaufwändig. Ich hab schon eine Idee, wie ich das besser und schneller machen kann, trotzdem warte ich auf Vorschläge ab, falls es was besseres gibt. Danke trotzdem! =)