Vererbung Submatrix mit Verweis auf Matrix erstellen

Noblord

Mitglied
Hallo,
ich weiß der Thread ist nicht aussagekräftig aber mir ist kein stichwort bekannt mit dem ich mein Problem beschreiben kann...
also zum Problem:
ich besitze eine Matrixklasse auf der die Strassen-Matrixmultiplikation implementiert ist.
https://de.wikipedia.org/wiki/Strassen-Algorithmus
um nicht immer neue (speicher und laufzeitintensive) Matrizen erstellen zu müssen habe ich den Tipp bekommen Submatrizen zu erstellen die von der Klasse Matrix erben aber "keinen" Speicher verbrauchen indem sie auf auf einen Quadranten der ursprünglichen Matrix verweisen.
Nun habe ich aber keine Idee wie ich das machen sollte oder unter welchem Stichwort ich nach Hilfe suchen kann.
Schon mal danke im vorraus :)
 

Noblord

Mitglied
public class Matrix {

private int height;
private int width;

private int[][] value;

public Matrix(int[][] value) {
this.value = value;
this.height = value.length;
this.width = value[1].length;
}
}

... sry für die formatierung
im prinzip gehts nur um diesen ausschnitt.
in der Submatrix Klasse sollte auf einen quadranten der matrix verwießen werden ohne ein neues 2-dim int array zu erstellen.
 

mrBrown

Super-Moderator
Mitarbeiter
Das ginge recht leicht, wenn die Sub-Matrizen auf das gleiche int-Array verweisen, und jeweils zusätzlich zur Höhe und Breite noch die Indizes, an denen sie starten speichern.

Du musst dann nur drauf achten, dass die Arrays nicht verändert werden, also auf Setter verzichten und im (öffentlichen) Konstruktor am besten auch defensive Kopien machen
 

Noblord

Mitglied
also übergebe ich dem Konstruktor einen ausschnitt aus dem alten int [][]?
wenn ja wie bekomme ich diesen ausschnitt ohne ein neues int[][] anzulegen?
 

mrBrown

Super-Moderator
Mitarbeiter
also übergebe ich dem Konstruktor einen ausschnitt aus dem alten int [][]?
wenn ja wie bekomme ich diesen ausschnitt ohne ein neues int[][] anzulegen?
Du übergibst keinen Ausschnitt, sondern das ganze alte int[][], dazu aber die Koordinaten des Ausschnitts, dann brauchst du es nicht kopieren oder neu zu erstellen
 

fhoffmann

Top Contributor
Ich würde es etwa in folgender Art machen.
Java:
interface Matrix {
    int dimension();
    double get(int i, int j);
}

class SpeicherMatrix implements Matrix {
    double[][] values;
    int dimension() {
        return values.length;
    }
    double get(int i, int j) {
        return values[i][j];
    }
}

class Quadrant implements Matrix {
    Matrix matrix;
    int quadrantX; // nur 0 und 1 erlaubt
    int quadrantY; // nur 0 und 1 erlaubt
    int dimension() {
        return matrix.dimension() / 2;
    }
    double get(int i, int j) {
        return matrix.get(quadrantX * dimension() + i, quadrantY * dimension() + j);
    }
}
Dabei sollten natürlich einige Werte (z.B. die Dimension) zwischengespeichert werden statt sie ständig neu zu berechnen.
 

Noblord

Mitglied
public class SubMatrix extends Matrix {

int x;
int y;
int size;

public SubMatrix(int[][] value, int x, int y) {
super(value);
this.x = x;
this.y = y;
size = value.length/2;
// TODO Auto-generated constructor stub
}

}


aber so wie es jetzt ist muss ich alle methoden so modifizieren dass sie nur einen Ausschnitt der Matrix benutzen
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würd's eher so machen:

Java:
 private Matrix(final int[][] values, final int width, final int height, final int offsetI, final int offsetJ) {
        this.values = values;
        this.width = width;
        this.height = height;
        this.offsetI = offsetI;
        this.offsetJ = offsetJ;
    }

public int get(int i, int j) {
    return values[offsetI + i][offsetJ + j];
}

Ändern musst du nur einmal viel: Zugriffe auf Variablen auf Getter auslagern. Das sollten die meisten IDEs größtenteils automatisch machen.

Ansonsten fällt mir zu solchen Optimierungen nur ein:
M.A.Jackson hat gesagt.:
Rules of Optimization:
Rule 1: Don’t do it.
Rule 2 (for experts only): Don’t do it yet.

Je nach Usecase hat so eine Optimierung halt immer auch Nachteile...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S verweis auf andere Klasse fehler Java Basics - Anfänger-Themen 3
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
F Verweis oder neues Objekt? Java Basics - Anfänger-Themen 8
I Verweis auf ein Objekt Java Basics - Anfänger-Themen 13
F Neues Objekt oder nur ein Verweis? Java Basics - Anfänger-Themen 5
T Verweis java.exe Java Basics - Anfänger-Themen 14
X Klassen verweis Java Basics - Anfänger-Themen 8
F Verweis auf Objekt Java Basics - Anfänger-Themen 7
N Jar-Datei mit Verweis auf andere Jar-Datei ausführen Java Basics - Anfänger-Themen 2
J Programm beenden und Verweis an andere Stelle im Programm Java Basics - Anfänger-Themen 10
I matrix aufgabe Java Basics - Anfänger-Themen 22
L Zweidimensionaler Array; n x m - Matrix überprüfuen Java Basics - Anfänger-Themen 35
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
M Matrix Java Basics - Anfänger-Themen 3
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
B Dünn besetzte Matrix Java Basics - Anfänger-Themen 7
Al3xand3r01 Matrix, Nachbarelemente Java Basics - Anfänger-Themen 16
E Rückwärtsmultiplikation einer invertierten matrix Java Basics - Anfänger-Themen 2
U Dreiecks-Matrix mit Array Java Basics - Anfänger-Themen 3
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
B Diskrete Faltung (Matrix) Randfälle Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
O Matrix, Vektor Java Basics - Anfänger-Themen 9
H 2D Array, Symmetrische Matrix Java Basics - Anfänger-Themen 12
S Matrix spaltenweise befüllen Java Basics - Anfänger-Themen 1
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
C Matrix erstellen Spaltensumme, Zeilensumme, Diagonale Java Basics - Anfänger-Themen 1
S Methoden Transponierte Matrix Java Basics - Anfänger-Themen 3
J Matrix erstellen Java Java Basics - Anfänger-Themen 7
B Transponiertes Matrix Java Basics - Anfänger-Themen 12
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
C Matrix transponieren - Hilfe Java Basics - Anfänger-Themen 1
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
L Matrix(Array) minimieren... Java Basics - Anfänger-Themen 9
E Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 7
S eingegebene Matrix anzeigen Java Basics - Anfänger-Themen 4
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bilddaten in Matrix umwandeln Java Basics - Anfänger-Themen 1
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
O Matrix Multiplizieren Java Basics - Anfänger-Themen 4
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
V Matrix Transponieren Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
W Zweidimensionale Arrays als Matrix ausgeben Java Basics - Anfänger-Themen 8
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
O Matrix ordnen Java Basics - Anfänger-Themen 4
M Symmetrische Matrix Java Basics - Anfänger-Themen 2
W Methoden Rang von einer Matrix mit Gauss Java Basics - Anfänger-Themen 0
U Matrix Subtrahieren Java Basics - Anfänger-Themen 12
E Input/Output convert string to two dimensional char and output = matrix Java Basics - Anfänger-Themen 2
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
I Matrix überprüfen Java Basics - Anfänger-Themen 8
Z Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 13
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
N Matrix/Vektoren Java Basics - Anfänger-Themen 3
N Matrix Java Basics - Anfänger-Themen 14
T Methode, die eine 2 dimensionale Matrix kopiert. Java Basics - Anfänger-Themen 16
J Matrix Java Java Basics - Anfänger-Themen 3
D 2 mehrdimensionale Matrix einlesen Java Basics - Anfänger-Themen 2
A N*N Matrix Determinante berechnen Java Basics - Anfänger-Themen 47
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
O Java Matrix mal Matrix über while Schleife... Java Basics - Anfänger-Themen 10
O Transponieren einer Matrix per While-Schleife Java Basics - Anfänger-Themen 3
M Matrix - Probelm Java Basics - Anfänger-Themen 7
O 2D Matrix befüllen mit geraden Zahlen!? Java Basics - Anfänger-Themen 14
J Java Matrix befüllen Java Basics - Anfänger-Themen 5
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
F Matrix Java Basics - Anfänger-Themen 11
E Array als Matrix Java Basics - Anfänger-Themen 21
G OOP Parameter Matrix Java Basics - Anfänger-Themen 2
N Matrix Klasse Java Basics - Anfänger-Themen 4
B Maske an eine Matrix anpassen Java Basics - Anfänger-Themen 5
W Matrix übergeben Java Basics - Anfänger-Themen 7
T Matrix transponieren Java Basics - Anfänger-Themen 17
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
D Problem: Werte eine Matrix vergleichen! Java Basics - Anfänger-Themen 5
B Matrix Java Basics - Anfänger-Themen 2
Semox Matrix multiplizieren Java Basics - Anfänger-Themen 4
N Matrix an toString Java Basics - Anfänger-Themen 7
C Diagonale in einem NxN Matrix Java Basics - Anfänger-Themen 6
F Einträgen von Matrix zu sotieren Java Basics - Anfänger-Themen 2
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
S Problem bei Matrix Addition Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben