Class: Hashira::Duplication::Clusters

Inherits:
Object
  • Object
show all
Defined in:
lib/hashira/duplication/clusters.rb

Constant Summary collapse

PREFILTER =
12
BASE_MASS =
16
NEAR_MASS =
40
PAIR =
2
PENALTY_PER_RECURRENCE =
2

Instance Method Summary collapse

Constructor Details

#initialize(fragments) ⇒ Clusters

Returns a new instance of Clusters.



10
11
12
13
# File 'lib/hashira/duplication/clusters.rb', line 10

def initialize(fragments)
  @fragments = fragments.select { |fragment| fragment.mass >= PREFILTER }
  @sets = Hashira::Duplication::UnionFind.new
end

Instance Method Details

#sortedObject



15
16
17
18
19
# File 'lib/hashira/duplication/clusters.rb', line 15

def sorted
  @fragments.group_by(&:types).each_value { |group| chain(group) }
  Hashira::Duplication::NearMiss.new(@fragments).pairs.each { |left, right| @sets.union(left, right) }
  Hashira::Duplication::Maximal.new(sized).reduced.sort_by { -it.mass }
end