Module: HungarianAlgorithmC

Defined in:
lib/hungarian_algorithm_c.rb,
lib/hungarian_algorithm_c/version.rb,
ext/hungarian_algorithm_c/hungarian_algorithm_c.c

Constant Summary collapse

VERSION =
'0.0.5'

Class Method Summary collapse

Class Method Details

.find_pairings(matrix) ⇒ Object



12
13
14
15
16
# File 'lib/hungarian_algorithm_c.rb', line 12

def find_pairings(matrix)
  validate!(matrix)
  array = value_capped_flattened_array(matrix)
  pairs(array, matrix.size)
end

.pairsObject



11
# File 'ext/hungarian_algorithm_c/hungarian_algorithm_c.c', line 11

VALUE pairs(VALUE self, VALUE flattened_array_ruby, VALUE row_size_val);

.rectangular?(matrix) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
# File 'lib/hungarian_algorithm_c.rb', line 41

def rectangular?(matrix)
  row_size = matrix.size
  matrix.all? { |column| row_size == column.size }
end

.validate!(matrix) ⇒ Object

Raises:

  • (ArgumentError)


36
37
38
39
# File 'lib/hungarian_algorithm_c.rb', line 36

def validate!(matrix)
  return if rectangular?(matrix)
  raise ArgumentError.new('matrix must be rectangular')
end

.value_capped_flattened_array(matrix) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/hungarian_algorithm_c.rb', line 18

def value_capped_flattened_array(matrix)
  [].tap do |array|
    matrix.each do |row|
      row.each do |element|
        array << begin
          if element > LIMITS[:positive]
            LIMITS[:positive]
          elsif element < LIMITS[:negative]
            LIMITS[:negative]
          else
            element
          end
        end
      end
    end
  end
end