Muster in der Matrix erkennen

  • Themenstarter Themenstarter Mikrowelle
  • Beginndatum Beginndatum
M

Mikrowelle

Hallo
Ich möchte in einer zufällig gefüllten 10.000 x 10.000 alle zahlen wieder löschen bis auf Primzahlen.

Danach möchte ich nach verschiedenen Sternzeichen drinne suchen lassen in allen möglichen Skallierungen sowie Richtungen. Falls keints gefunden, soll es wieder neu befüllt werden um neu zu suchen. Das war bis jetzt kein Problem.
Problematisch wird es jetzt wenn ich das ganze im Raum versuche 10.000 x 10.000 x 10.000

Probleme habe ich mit der performance sowie dem fehlen einer Idee wie das überhaupt möglich sein soll in einer angemessenen Zeit zu durchlaufen, da hier natürlich viel mehr Perspektiven gibt.

Mich würde Interessieren wie ihr an sowas rangehen würdet.
 
Hallo Mikrowelle,

Ich habe dein Projekt leider nicht 100%-ig verstanden, du willst also quasi einen Teil des Weltalls simulieren und nach Primzahlen suchen, die dann Bestandteile von Sternbildern sind.?

Grundsätzlich würde ich eine von Thread abgeleitete Klasse nach Primzahlen in jeweils einer Ebene suchen lassen. Die Hauptklasse würde dann für alle 10.000 ebenen jeweils einen Thread starten. Wenn ein Thread fertig ist, meldet er die von ihm generieren/veränderten Daten an die Haupt-Klasse. Bei kritischen Bereichen wie Veränderung von Daten in der Haupt-Klasse oder Ausgaben solltest du die betroffenen Variablen bzw. Methoden oder Blöcke als synchronized kennzeichnen.

Ich hoffe, ich konnte dir ein wenig weiterhelfen,
javaDeveloper2011
 
Naja .. den ersten Schritt aus dem 3-demensionalen Raum die 3 2-demensionalen Ebenen rausnehmen und diese abarbeiten wird noch nicht das Problem sein.
Was TO jetzt aber versucht ist die suche im 3d-Raum. und dabei ergeben sich erstmal ne vielzahl neuer abzuarbeitener Ebenen.

Kleines Rechenbeispiel
3 Ebenen
links-rechts
oben-unten
vorne-hinten

Die ersten nun neu entstehenden Ebenen ergeben sich wenn wir dir FRONT-Ebene nach links klappen. Machen wir das erstmal nur grob für die 90° ergeben sich schon 90 neue Ebenen. Das ganze noch 7 mal *4mal im Uhrzeigersinn klappen und dann noch 4mal gegn den Uhrzeigersinn* sind schon 8x90 = 720 Ebenen. Das ganze auch noch für die anderen 2 achsen macht 3x720 = 2160.
Dann noch für die einzelnen Winkel gerade durchgehen *also z.B. im 45°-Winkel von der vorderen linken zur hinteren rechten Ecke sind bei 10k x sqrt(2) = rund 14'000 ... bei anderen Winkeln verändertt sich diese Zahl natürlich geringfügig* ... das noch mal mal 90 und mal 8 und mal 3 ... kommen wir auf schlappe 30 Millionen zur durchsuchende Ebenen *wenn das mal reicht*.
Und das jetzt noch halbwegs sinnvoll in einer halbwegs vertretbaren Zeit halte ich für schlicht für zu zeitaufwändig.
Sagen wir mal dein Rechner schafft in 1 sec n paar tausend Ebenen ... z.B. 10'000 ... dann brauchst du immer noch 3000sec also fast ne Stunde. Zu beachten ist hierbei ja auch wie viele "Muster" du erkennen willst ... also auch Skalierung und Rotation mitzugezählt. Das ist einfach nie gigantische Menge an Rechenaufwand.
Und wie gesagt : wenn das mal von Anzahl und Geschwindigkeit her hinkommt.
Ich hoffe ich habs richtig verstanden und konnte euch halbwegs erklären wie kompliziert das ganze wird. Als einzelner wird man da bestimmt schon ne Weile dran sitzen. Und selbst als Team müssten da schon n paar verdammt gute Mathe-Asse dabei sein die halbwegs sinnvoll die Such-Algorythmen berechnen können. Wünsche viel Spass beim entwickeln und bin auf die Lösung gespannt.
 
Zuletzt bearbeitet von einem Moderator:
Zurück