最短共通超文字列問題の目標は、特定のセット内のすべての文字列を部分文字列として含む、可能な限り短い文字列を見つけることです。問題が「NP完全」であることは理解しています。しかし、この問題には近似戦略があります。たとえば、短い文字列が与えられた場合
ABRAC
ACADA
ADABR
DABRA
RACAD
上記の特定の文字列の出力がABRACADABRA
. もう一つの例
Given
fegiach
bfgiak
hfdegi
iakhfd
fgiakhg
文字列
bfgiakhfdegiach
は長さ 15 の可能な解です。
アルゴリズムの詳細な研究はありませんが、これを改善するために取り組んでいますが、Ruby でこれを実装したいと考えています。
単純な貪欲な実装には、各部分文字列の接尾辞配列の作成が含まれます
def suffix_tree(string)
size = string.length
suffixes = Array.new(size)
size.times do |i|
suffixes[i] = string.slice(i, size)
end
suffixes
end
#store the suffixes in a hash
#key is a fragment, value = suffixes
def hash_of_suffixes(fragments)
suffixes_hash = Hash.new
fragments.each do |frag|
suffixes_hash["#{frag}"]= suffix_tree(frag)
end
suffixes_hash
end
fragments = ['ABRAC','ACADA','ADABR','DABRA','RACAD']
h = hash_of_suffixes(fragments)
#then search each fragment in all the suffix trees and return the number of
#overlaps for each key
#store the results in graph??
#find possible ordering of the fragments
I would be grateful with some help.