In einer quadratischen Matrix der geraden Dimension s
gibt es s/4(s/2+1)
Arten von Quadraten, die auf sieben verschiedene Arten um die Matrix reflektiert werden können. Zum Beispiel wird eine 10 x 10-Matrix hat die einzigartigen Quadrate in der Figur unten gefärbt:Algorithmus zum Oktanten einer quadratischen Matrix alle sieben Möglichkeiten zu reflektieren
dieser 15 Plätze können um die horizontalen, vertikalen und diagonalen Achsen der Matrix in 7 verschiedene Weise reflektiert werden.
Angenommen, es gibt eindeutige Werte für jeden Typ eines solchen Elements eines n x n Arrays, wobei n eine gerade Zahl ist. Was ist der effizienteste Weg, die Matrix zu füllen (in C oder Java)? Mit anderen Worten, bei einer Liste von 15 Werten in einer beliebigen gewünschten Struktur müssen Sie den Rest des 10 x 10-Arrays mit den 15 Werten durch Reflexionen füllen. Was ist der schnellste Algorithmus, um dies zu tun?
Als Beispiel hier ist mein erster Versuch auf diesem (beachten Sie, dass es eine basierte Arrays verwendet):
public static int[][] valueSquare = new int[11][11];
public static int[][] valueSquareType = {
{ 0, 40, 2, 12, 15, 20 },
{ 0, 2, 1, 4, 8, 12 },
{ 0, 12, 4, 25, 20, 15 },
{ 0, 15, 8, 20, 22, 18 },
{ 0, 20, 12, 15, 18, 0 },
};
static {
for(int x = 1; x <= 5; x++) for(int y = 1; y <= 5; y++) valueSquare[ 11 - x ][ y ] = valueSquareType[x][y];
for(int x = 1; x <= 5; x++) for(int y = 1; y <= 5; y++) valueSquare[ 11 - x ][ 11 - y ] = valueSquareType[x][y];
for(int x = 1; x <= 5; x++) for(int y = 1; y <= 5; y++) valueSquare[ x ][ 11 - y ] = valueSquareType[x][y];
}
Ein Einwand gegen dieser ist, dass es einen redundanten Starter-Array, die 3 Möglichkeiten widerspiegeln , anstatt einer minimalen Starter-Array reflektiert 7 Wege. Idealerweise hätte ich gerne ein Starter-Array mit nur 15 Schlüsselwerten. Auch das Schleifen in meinem Versuch ist möglicherweise nicht der schnellste Ansatz.
Ihre Matrix hat nur '9' Reihen, und ich denke, einige Klammern sind hier fehlt:' s/4 (n/2 + 1) '? – IVlad
Teilen Sie Ihre Forschung hilft jedem. Sagen Sie uns, was Sie versucht haben und warum es nicht Ihren Bedürfnissen entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, sich selbst zu helfen, es rettet uns davor, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu bekommen! Siehe auch [how to ask] (http://stackoverflow.com/questions/how-to-ask) – Eregrith
Warum schreiben Sie nicht explizit die sieben Schleifen, die zum Füllen der Matrix benötigt werden? Wenn Sie das richtig machen, betrachten Sie nur jeden Index genau einmal und führen daher nur die erforderlichen Zuordnungen durch. – vib