class Matrixlpp::Matriz_Densa

Esta clase permite representar matrices densas. Las matrices densas son aquellas que no tienen más de un 60% de elementos nulos. Su representación será muy similar a como se suelen representar tradicionalmente.

Public Class Methods

new(n, m) click to toggle source

Constructor de la matriz. Crea una matriz de tamaño N*M inicializada a valores nulos.

  • Argumentos    :

    • n: Número de filas. Debe ser mayor que 0.

    • m: Número de columnas. Debe ser mayor que 0.

Calls superclass method Matrixlpp::Matriz::new
# File lib/matrixlpp/matriz_densa.rb, line 11
def initialize(n, m)
  super
  
  @contenido = Array.new(@N,0)
  i = 0
  while i < @N
    @contenido[i] = Array.new(@M,0)
    i += 1  
  end
end

Public Instance Methods

get(i, j) click to toggle source

Permite obtener el elemento en la posición (i,j), donde:

  • Argumentos    :

    • i: Número de fila.

    • j: Número de columna.

    • value: Valor a insertar en la matriz.

  • Devuelve    :

    • Valor almacenado en la fila i y en la columna j. Devuelve nil si i o j están fuera de rango.

# File lib/matrixlpp/matriz_densa.rb, line 28
def get(i, j)
  if( i < 0 or i >=@N or j < 0 or j >= @M)
    return nil
  end

  @contenido[i][j]
end
max() click to toggle source

Devuelve el máximo valor almacenado en la matriz.

  • Devuelve    :

    • Valor máximo almacenado en la matriz.

# File lib/matrixlpp/matriz_densa.rb, line 103
def max
    m = get(0,0)
    i = 0
    while(i < @N)
            j = 0
            while(j < @M)
                    if (get(i,j) > m)
                            m = get(i,j)
                    end
                    j += 1
            end
            i += 1
    end
    m
end
min() click to toggle source

Devuelve el mínimo valor almacenado en la matriz.

  • Devuelve    :

    • Valor mínimo almacenado en la matriz.

# File lib/matrixlpp/matriz_densa.rb, line 122
def min
    m = get(0,0)
    i = 0
    while(i < @N)
            j = 0
            while(j < @M)
                    if (get(i,j) < m)
                            m = get(i,j)
                    end
                    j += 1
            end
            i += 1
    end
    m
end
null_percent() click to toggle source

Devuelve el porcentaje de valores nulos que hay en la matriz.

  • Devuelve    :

    • Número flotante entre 0 y 1 que represente cuantos valores nulos existen en la matriz densa.

# File lib/matrixlpp/matriz_densa.rb, line 38
def null_percent
   total = @N*@M
   no_nulos = 0
   
   i = 0
   while(i < @N)
     j = 0
     while(j < @M)
       if(@contenido[i][j] != @contenido[i][j].class.null)
         no_nulos += 1
       end
       j += 1
     end
     i += 1
   end
   
   nulos = total - no_nulos
   nulos.to_f/total.to_f
 end
set(i, j, value) click to toggle source

Establece el valor value en la posición (i,j) de la matriz, donde:

  • Argumentos    :

    • i: Número de fila.

    • j: Número de columna.

    • value: Valor a insertar en la matriz.

# File lib/matrixlpp/matriz_densa.rb, line 64
def set(i, j, value)
  if( i < 0 or i >=@N or j < 0 or j >= @M)
   return nil
  end
    
  if(!(value.class.respond_to? :null))
    puts "Se debe definir el metodo \"null\" que devuelva un elemento nulo para la clase #{value.class}"
    return nil
  end
  #--
  # Contar elementos nulos y comprobar si se hace una matriz dispersa
  # De momento, no dejamos añadir elementos nulos
  # ¿o si?
  #if(value != nil and value != value.class.null) # Y se puede comprobar para todos los tipos si es necesario. (con un método zero, por ejemplo)
    @contenido[i][j] = value
  #end
  #++
end
to_s() click to toggle source

Permite representar de manera gráfica la matriz por consola.

  • Devuelve    :

    • Objeto del tipo string con todos los elementos de la matriz.

# File lib/matrixlpp/matriz_densa.rb, line 85
def to_s
  s = ""
  i = 0
  while(i < @N)
    j = 0
    while(j < @M)
      s += "#{@contenido[i][j].to_s}\t"
      j += 1
    end
    s += "\n"
    i += 1
  end
  s
end