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