Рубрики

Кратчайшая проблема суперструн | Набор 2 (с использованием обложки)

Учитывая набор из n строк S, найдите наименьшую строку, которая содержит каждую строку в данном наборе в качестве подстроки. Можно предположить, что ни одна строка в arr [] не является подстрокой другой строки.

Примеры:

Input:  S = {"001", "01101", "010"}
Output: 0011010  

Input:  S = {"geeks", "quiz", "for"}
Output: geeksquizfor

Input:  S = {"catg", "ctaagt", "gcta", "ttca", "atgcatc"}
Output: gctaagttcatgcatc

В предыдущем посте мы обсудили решение, которое оказалось 4-х приближенным (предположительно как 2-х приближенное).
В этом посте обсуждается решение, которое может быть доказано как 2H n приближенное. где H n = 1 + 1/2 + 1/3 +… 1 / n. Идея состоит в том, чтобы преобразовать проблему Shortest Superstring в задачу Set Cover (Задача Set cover задается некоторыми подмножествами юниверса, и каждое подмножество данных имеет связанную стоимость. Задача состоит в том, чтобы найти самый дешевый набор данных подмножеств, чтобы все элементы Вселенная покрыта). Для решения задачи Set Cover нам необходимо иметь юниверс и подмножества юниверсов с соответствующими затратами.

Ниже приведены шаги по преобразованию Shortest Superstring в Set Cover .

1) Let S be the set of given strings.
   S = {s1, s2, ... sn}

2) Universe for Set Cover problem is S (We need
   to find a superstring that has every string
   as substring)

3) Let us initialize subsets to be considered for universe as
     Subsets =  {{s1}, {s2}, ... {sn}}
   Cost of every subset is length of string in it.

3) For all pairs of strings si and sj in S,
     If si and sj overlap
      a) Construct a string rijk where k is
         the maximum overlap between the two.
      b) Add the set represented by rijk to Subsets,
           i.e., Subsets = Subsets U Set(rijk)
         The set represented by rijk is the set 
         of all strings which are substring of it.
         Cost of the subset is length of rijk.

4) Now problem is transformed to Set Cover, we can 
   run Greedy Set Cover approximate algorithm to find
   set cover of S using Subsets.  Cost of every element in
   Subsets is length of string in it.

Пример:

S = {s1, s2, s3}.
s1 = "001"
s2 = "01101"
s3 = "010"

[Combination of s1 and s2 with 2 overlapping characters]
r122 = 001101 

[Combination of s1 and s3 with 2 overlapping characters]
r132 = 0010 

Similarly,
r232 = 011010
r311 = 01001
r321 = 0101101

Now set cover problem becomes as following:

Universe to cover is {s1, s2, s3}

Subsets of the universe and their costs :

{s1}, cost 3 (length of s1)
{s2}, cost 5 (length of s2)
{s3}, cost 5 (length of s3)

set(r122), cost 6 (length of r122)
The set r122 represents all strings which are
substrings of r122. 
Therefore set(r122) = {s1, s2}

set(r132), cost 3 (length of r132)
The subset r132 represents all strings which are
substrings of r132
Therefore set(r132) = {s1, s3}

Similarly there are more subsets for set(r232), 
set(r311), and set(r321).

So we have a set cover problem with universe and subsets
of universe with costs associated with every subset.

Мы обсуждали, что экземпляр проблемы Shortest Superstring может быть преобразован в экземпляр задачи Set Cover за полиномиальное время.

См. Это для доказательства того, что алгоритм на основе Set Cover является приблизительным 2H n .

Ссылка:
http://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Notes/wan-ba-notes.pdf
http://fileadmin.cs.lth.se/cs/Personal/Andrzej_Lingas/superstring.pdf
http://math.mit.edu/~goemans/18434S06/superstring-lele.pdf

Эта статья предоставлена Dheeraj Gupta . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Кратчайшая проблема суперструн | Набор 2 (с использованием обложки)

0.00 (0%) 0 votes