Matrices dispersas
Una matriz es dispersa si la mayoriá de sus elementos son ceros. Por ejemplo, la primera de las siguientes matrices es dispersa y la segunda no lo es
( 0 0 4 ) ( 0 1 4 ) ( 0 5 0 ) ( 0 5 1 ) ( 0 0 0 )
Usando la librería Data.Matrix, las anteriores matrices se pueden definir por
ej1, ej2 :: Matrix Int ej1 = fromList 3 3 [0,0,4,0,5,0,0,0,0] ej2 = fromList 2 3 [0,1,4,0,5,1]
La dispersión de una matriz es el cociente entre el número de ceros de la matriz y el producto de sus números de filas y de columnas.
Definir las siguientes funciones
dispersion :: (Num a, Eq a) => Matrix a -> Double esDispersa :: (Num a, Eq a) => Matrix a -> Bool
tales que
- (dispersion p) es la dispersión de la matriz p. Por ejemplo,
dispersion ej1 == 0.7777777777777778 dispersion ej2 == 0.3333333333333333 dispersion (fmap (+1) ej1) == 0.0 dispersion (identity 3) == 0.6666666666666666 dispersion (zero 9 9) == 1.0
- (esDispersa p) se verifica si la matriz p es dispersa. Por ejemplo,
esDispersa ej1 == True esDispersa ej2 == False esDispersa (fmap (+1) ej1) == False esDispersa (identity 3) == True esDispersa (zero 9 9) == True