Wenn ich den oberen dreieckigen Teil einer Matrix, versetzt über der Diagonalen, als lineares Array gespeichert habe, wie können die (i,j)
Indizes eines Matrixelements aus dem linearen Index des Arrays extrahiert werden?Linearer Index obere Dreiecksmatrix
Zum Beispiel ist die lineare Anordnung [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9
ist Speicher für die Matrix
0 a0 a1 a2 a3 0 0 a4 a5 a6 0 0 0 a7 a8 0 0 0 0 a9 0 0 0 0 0
Und wir wollen die (i, j) in einem Array wissen, zu einem in der linearen Matrix Offset entspricht, ohne Rekursion.
Ein geeignetes Ergebnis k2ij(int k, int n) -> (int, int)
würde genügen, beispielsweise
k2ij(k=0, n=5) = (0, 1) k2ij(k=1, n=5) = (0, 2) k2ij(k=2, n=5) = (0, 3) k2ij(k=3, n=5) = (0, 4) k2ij(k=4, n=5) = (1, 2) k2ij(k=5, n=5) = (1, 3) [etc]
Schreiben Sie eine Formel für Elemente in der letzten Spalte. Um es einfacher zu machen, schreibe eine Formel, die den linearen Index aus einer Zeilennummer berechnet (die Spaltennummer ist fest), dann invertiere sie. Fahren Sie mit einer allgemeinen Formel von dort fort. –
Beachten Sie, dass die hier vorgestellten Lösungsmethoden auch verwendet werden können, um die Kombinationen von N Dingen, die jeweils 2 (ohne Wiederholung) genommen wurden, ohne die Notwendigkeit einer Iteration/Rekursion aufzulisten. –