# File lib/bn4r/bn.rb, line 219
  def get_table_index(node_assignment, givens_assignments)
    x = []
    indices = []
    index = 0
    
    if givens_assignments.length != @givens.length
      raise "Error. Number of assignments does not match node."
    end
  
    if @givens.length > 0
      # create a indices array with the position of each value of
      # given assignments.
      givens_assignments.length.times { |i|
        assignment = givens_assignments[i]
        indices[i] = @givens[i].outcomes.index(assignment)
      }
  
      # create a array with the number of possible values each
      # given node and this node itself can have ( node.outcomes.length )
      # plus all next nodes.
      x[givens_assignments.length-1] = @outcomes.length
      (givens_assignments.length-2).downto(0) { |j|
        x[j] = x[j+1] * @givens[j+1].outcomes.length
      }      
  
      # to get the index, sum for each assignment the
      # product of each given assignment outcomes size
      # by its value index.
      givens_assignments.length.times { |i|
        index += x[i] * indices[i]
      }
    end
    
    index += @outcomes.index(node_assignment)
    
    return index
  end