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

Опубликовано: 20 Января, 2022

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

Примеры:

Ввод: S = {"001", "01101", "010"}
Выход: 0011010  

Ввод: S = {"компьютерщики", "викторина", "для"}
Вывод: geeksquizfor

Ввод: S = {"catg", "ctaagt", "gcta", "ttca", "atgcatc"}
Вывод: gctaagttcatgcatc

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

Ниже приведены шаги по преобразованию кратчайшей суперструны в набор обложек.

1) Пусть S - множество заданных строк.
   S = {s 1 , s 2 , ... s n }

2) Вселенная для задачи Set Cover - S (Нам нужно
   найти суперструну, в которой каждая строка
   как подстрока)

3) Давайте инициализируем подмножества, которые будут рассматриваться для вселенной, как
     Подмножества = {{s 1 }, {s 2 }, ... {s n }}
   Стоимость каждого подмножества - это длина строки в нем.

3) Для всех пар строк s i и s j в S,
     Если s i и s j перекрываются
      а) Постройте строку r ijk, где k -
         максимальное перекрытие между ними.
      б) Добавьте набор, представленный r ijk, в Подмножества,
           т.е. подмножества = подмножества U набор (r ijk )
         Набор, представленный r ijk, - это набор 
         всех строк, которые являются его подстрокой.
         Стоимость подмножества составляет длину r ijk .

4) Теперь задача преобразована в Set Cover, мы можем 
   запустите приблизительный алгоритм Greedy Set Cover, чтобы найти
   установить обложку S, используя подмножества. Стоимость каждого элемента в
   Подмножества - это длина строки в нем.

Пример:

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

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

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.