Я делаю проект на Java, где мне нужно использовать класс BigInteger для реализации метода шифрования.Определитель огромной матрицы Java
У меня квадратные матрицы nxn, где n может быть 200, и мне нужно вычислить определитель. Я использовал этот метод, используя детерминант подматриц, но навсегда его вычислял.
public BigInteger determinant(Matrix matrix){
if (matrix.getColumns()!=matrix.getRows()){
System.out.println("The matrix is not square");
return BigInteger.valueOf(-1);
}
if (matrix.getColumns() == 1) {
return matrix.getMatrix()[0][0];
}
if (matrix.getRows()==2) {
return ((matrix.getValueAt(0, 0).multiply(matrix.getValueAt(1, 1)))).subtract((matrix.getValueAt(0, 1).multiply(matrix.getValueAt(1, 0))));
}
BigInteger sum = BigInteger.valueOf(0);
for (int i=0; i<matrix.getColumns(); i++) {
sum = sum.add(this.changeSign(BigInteger.valueOf(i)).multiply(matrix.getValueAt(0, i)).multiply(determinant(createSubMatrix(matrix, 0, i))));// * determinant(createSubMatrix(matrix, 0, i));
}
return sum;
}
Есть ли нерекурсивный способ вычисления детерминанта?
Заранее спасибо.
Вычисление детерминанта дорого, но редко требуется. Что такое метод шифрования, который вы пытаетесь реализовать? – NPE
Быстрый ответ был бы: да, потому что все написанное рекурсивно может быть написано нерекурсивно. Но вы действительно уверены, что вам нужно вычислить детерминант? Если вам это действительно нужно, взгляните на этот пакет: http://math.nist.gov/javanumerics/jama/ –
Мне нужно вычислить определитель, чтобы сделать обратный. плюс мне нужно, когда я создаю случайные матрицы, чтобы убедиться, что они обратимы. Шифрование - это новое полностью гомоморфное шифрование. к сожалению, я не могу опубликовать публикацию –