Esto es una aplicación que crea una matriz de tamanno x tamanno (en este ejemplo, he puesto 6x6), y calcula su respectivo determinante a base de llamar a un algoritmo recursivo que se va llamando a si mismo hasta llegar a una matriz de 2x2.
Dejo el código fuente.
Determinante.java
class Determinante
{
public static void main(String args[])
{
int tamanno = 6, i, j;
int matriz[][] = new int[tamanno][tamanno];
for (i=0;i<tamanno;i++)
{
for (j=0;j<tamanno;j++)
{
matriz[i][j] = (int)(Math.random()*10)-5;
}
}
printmat(matriz);
System.out.println(determin(matriz));
}
public static void printmat(int matriz[][])
{
int i, j;
for (i=0;i<matriz.length;i++)
{
for (j=0;j<matriz.length;j++)
System.out.print(String.valueOf(matriz[i][j]) + "\t");
System.out.println();
}
System.out.println();
}
public static int[][] submatrize(int matriz[][], int x, int y)
{
int submatriz[][] = new int[matriz.length-1][matriz.length-1];
int i, j, cur_x=0, cur_y=0;
for (i=0;i<matriz.length;i++)
{
if (i != x)
{
cur_y=0;
for (j=0;j<matriz.length;j++)
{
if (j != y)
{
submatriz[cur_x][cur_y] = matriz[i][j];
cur_y++;
}
}
cur_x++;
}
}
return submatriz;
}
public static int determin(int matriz[][])
{
int deter=0;
int i, mult = 1;
if (matriz.length > 2)
{
for (i=0;i<matriz.length;i++)
{
deter += mult * matriz[i][0] * determin(submatrize(matriz,i,0));
mult *= -1;
}
return deter;
}else
return matriz[0][0] * matriz[1][1] - matriz[0][1] * matriz[1][0];
}
}
Resultados:
5x5
run:
-3 -4 -1 -4 -5 1
-2 -5 -4 1 -4 -3
0 0 -3 -3 2 -4
1 1 0 -4 -3 0
4 -2 -3 -4 2 2
0 3 -2 4 3 -4
9756
BUILD SUCCESSFUL (total time: 0 seconds)
10x10
run:
-5 -3 0 -2 4 -5 0 -2 3 -5
1 3 -3 1 2 2 -1 0 -4 -4
-5 -5 3 0 1 -4 3 4 -1 2
-1 2 -4 -1 4 -2 -3 3 -2 2
1 -3 -1 1 -1 -2 -4 1 0 1
2 2 1 1 3 1 3 -5 -4 -1
3 -3 -4 1 -3 4 1 4 -2 -2
-5 -5 2 -5 1 -1 1 -3 -5 3
1 -4 -4 2 -5 -5 1 4 3 4
0 -5 -3 -5 2 1 -1 -1 -3 -4
71736511
BUILD SUCCESSFUL (total time: 2 seconds)
A partir de ahi los tiempos de ejecución se disparan