[ Foro de Pascal ]

matriz dispersa

28-Mar-2014 16:28
oscar gomez
6 Respuestas

buen dia profesor nacho.
queria preguntarte acerca de una duda que tengo en la realizacion de un programa. es que tengo duds digams mas bien conceptuales, me refiero a la forma de representarlas a traves de una matriz k*3 donde k es el numero de elementos no nulos ubicados en su primera fila y en las dos siguientes filas estarian los indices de la fila y columnas respectivas donde estan esos elementos no vacios. se que lo mas eficiente es hacerlo a traves de listas enlazadas para no desperdiciar memoria, pero bueno mi intencion en este caso es el de realizarlo con matrices normal y corrientes.
lo que no entiendo es que dimension debe de tener la matriz esparcida, dada su representacion. quiza tu sabes mas del tema que yo y puedas ayudarme.
yo he realizado ya un programa en que dada la representacion obtengo la matriz dispersa, pero lo que no tengo claro es si esa matriz dispersa deba tener las dimensiones siguientes:
1- N*N dependiendo del numero de elementos no nulos
o
2- maxFila *N , donde maxFila es el mayor valor de la fila 2 de la matriz de representacion
o
3- K*F , donde K y F son valores que se ingresan desde la entrada estandar y que definen a conveniencia del usuario la dimension de la matriz dispersa que se desea.

yo he realizado los tres casos pero quiero tu opinion profesional de en la practica dada la representacion de estas matrices, cual es la opcion que se toma para la dimension de la matriz dispersa resultante ? un saludo profesor nacho, si algun compañero que sepa del tema puede tambien colaborarme estare muy agradecido.


28-Mar-2014 23:06
Nacho Cabanes (+30)

No acabo de entender lo que pretendes... ¿quieres implementar una matriz dispersa usando una matriz 3xn que haga referencia a otra matriz bidimensional?

No entiendo lo de la matriz N*N, maxfila*N y demás. Te basta con la matriz de tamaño 3xn, que puede estar sobredimensionada. Por ejemplo, si tienes 10 elementos no nulos, te bastaría con una matriz de 30 elementos, en la que cada terna de elements fueran (fila, columna, valor). Si no sabes cuántos elementos va a haber, y no quieres usar lista, puedes intentar acotarlos. Por ejemplo, si esperas que no se introduzcan más de 50 datos, puedes crear una matriz de 70x3 y te dejas 20 datos de margen para ampliaciones.


28-Mar-2014 23:29
oscar gomez

ok , nacho entiendo ahora , lo mejor seria acotar la salida de la ,matriz dispersa, quiza incluso pidiendole al usuario la dimension que se desea para esa matriz dispersa.gracias


28-Mar-2014 23:37
oscar gomez

profesor disculpa solo una duda aunque en el programa que he realizado para la opcion :
- maxFila *N , donde maxFila es el mayor valor de la fila 2 de la matriz de representacion.
si que me funciona solo quiero salir de la duda, para calcular el maximo de una matriz en su fila 2 esta ok el codigo mio:

 
max:=A[2,1];
for i:=2 to M do
  begin
    for j:=2 to N do
     if A[i,j] >= max then
       max:= A[i,j];
   end; 
 


mi duda mas que todo esta en si es siempre necesario comparar con el >= o solo bastaria con el > , gracias por tu opinion.


31-Mar-2014 00:22
Nacho Cabanes (+30)

Hay un par de errores: si la matriz es de 2 dimensiones, deberás empezar en la fila 1 (no en la 2) y en la columna 1 (no en la 2), o dejarás la mayor parte de una fila y de una columna sin procesar.

En cuanto a si te basta con un "mayor que", sí, así es en general (excepto que quieras contar cuántas veces aparece ese máximo).


31-Mar-2014 15:36
oscar gomez

hola nacho, mira mi matriz es realmente de tres dimensiones, lo que necesito es solo sacar de esa matriz el máximo valor de su fila 2, según entiendo tu explicación el código correcto en este caso para mi seria algo como : ??????

 
max:=A[2,1];
  for j:=2 to N do
     if A[2,j] >= max then
       max:= A[2,j];
 


estaría en lo correcto con mi codigo??, pues a mi en realidad lo que haya en la fila 1 y 3 de esa matriz no me interesa, espero tu respuesta profesor, mil gracias.


31-Mar-2014 21:03
Nacho Cabanes (+30)

Así es, ese código hallaría el máximo de la fila 2 (suponiendo que el primer índice denota la fila, que N es el número de la última columna, etc) ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)