Sha256: c82b5ff60608da447474818bbe70fa7ee6e32eeaec3d50f96a98c990f96b794e
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
module Rambling module Trie # Provides the compressing behavior for the Trie data structure. module Compressor # Flag for compressed tries. # @return [Boolean] `true` for compressed tries, `false` otherwise. def compressed? @parent.nil? ? false : @parent.compressed? end # Compress the current node using redundant node elimination. # @return [Root, Node] the compressed node. def compress_tree! if @children.size == 1 and not terminal? and @letter merge_with! @children.values.first compress_tree! end @children.values.each &:compress_tree! self end private def merge_with!(child) new_letter = (@letter.to_s << child.letter.to_s).to_sym rehash_on_parent! @letter, new_letter redefine_self! new_letter, child @children.values.each { |node| node.parent = self } end def rehash_on_parent!(old_letter, new_letter) return if @parent.nil? @parent.delete old_letter @parent[new_letter] = self end def redefine_self!(new_letter, merged_node) @letter = new_letter @children = merged_node.children @terminal = merged_node.terminal? end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rambling-trie-0.5.0 | lib/rambling/trie/compressor.rb |