Optimizacion de matriz
Roberto Bonvallet
rbonvall en inf.utfsm.cl
Jue Oct 28 15:07:43 CLST 2004
femella escribio:
> Resulta que estoy trabajando en un proyecto de Ing. Industrial sobre
> maquinas paralelas y meta-raps,(todo esto lo estoy programando en C) y
> necesito ptimizar un código. [...] El caso es que estoy ocupando una matriz
> grande(1800 X 1000 aprox. dependiendo del problema),y recorriéndolas
> unas 10000 veces. Por otro lado yo se que al asignar una matriz de la
> forma tradicional int matrix[1800][1600], no es nada mas que una
> lista en la memoria y que recorrerla por columna es ineficiente.
Deberías usar un lenguaje orientado a este tipo de operaciones. Por
ejemplo Matlab (propietario) u Octave (libre).
> Aqui vien mi problema, necesito que esta matriz sea dinámica y crezca
> a medida que crece el problema, probé usando un int **matriz, pero
> esta solución me alargo enormemente el tmpo de ejecución, por otro
> lado una matriz en forma de lista no me sirve mucho por que en una
> parte del programa debo dirigirme a un punto especifico
> (matrix[800][70]) y recorrerla para encontrar ese punto también afecta
> el tmpo.
Si utilizaste int** matrix como "puntero a un arreglo de punteros a
arreglos", o sea esta idea:
matrix *matrix
+---+ +---+ +---+---+---+---+---+---+---+
| -+-->| -+--->| | | | | | | |
+---+ +---+ +---+---+---+---+---+---+---+
| -+--->| | | | | | | |
+---+ +---+---+---+---+---+---+---+
| -+--->| | | | | | | |
+---+ +---+---+---+---+---+---+---+
| -+--->| | | | | | | |
+---+ +---+---+---+---+---+---+---+
entonces el acceso al elemento (800,70) no debería ser tan caro, sólo
es seguir dos punteros. Aun así, mejor usa la herramienta correcta.
--
Roberto Bonvallet
Más información sobre la lista de distribución Linux