Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2017, 10:29   #1
Карл Кремень
 
Регистрация: 04.01.2017
Сообщений: 8
По умолчанию [Алгоритм, C++] Наибольшая общая правильная скобочная подпоследовательность

Здравствуйте!

Такая вот задача: даны две строки, только из круглых скобок, длины n <= 700.
Требуется найти правильную скобочную последовательность наибольшей длины, которая в то же время является подпоследовательностью этих двух строк. Если таких несколько, можно вывести любую.
Пример:
Код:
Input: 
())(()()()
)(())(())

Output:
(())()
Буду благодарен за идею!
Всегда ваш, Karl Frederich-Adler "Kremen" Meinkopf < kremen.karl@yandex.com >

Последний раз редактировалось Карл Кремень; 10.01.2017 в 11:13.
Карл Кремень вне форума Ответить с цитированием
Старый 10.01.2017, 10:56   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
найти правильную
значит она начинается с ( и соблюдаются еще некоторые правила (количество и порядок).
Цитата:
длины n <= 700.
ну не так много, можно составить ДВА списка(для КАЖДОЙ нашей последовательности) ПРАВИЛЬНЫХ подпоследовательностей (начало + длина)
а потом эти списки СРАВНИТЬ( сравнить последовательности ВХОДЯЩИЕ в эти списки).

а можно просто
перебрать ВСЕ правильные подпоследовательности в одной из ...
и ПРОСТО проверить ЕСТЬ ЛИ такая в другой из ...
если ЕСТЬ, то сравнить с "ранее" найденной и "оставить" лучшую.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.01.2017, 11:14   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Карл Кремень Посмотреть сообщение
Пример:
Код:
Input: 
())(()()()
)(())(())

Output:
(())()
простите, может быть, я не понял задачу, но где указанный Output в первой или во второй строчках?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2017, 11:14   #4
Карл Кремень
 
Регистрация: 04.01.2017
Сообщений: 8
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
з
перебрать ВСЕ правильные подпоследовательности в одной из ...
Так их же может быть до хрена, разве нет?
Всегда ваш, Karl Frederich-Adler "Kremen" Meinkopf < kremen.karl@yandex.com >
Карл Кремень вне форума Ответить с цитированием
Старый 10.01.2017, 11:15   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

k=0
если "(" то k=k+1
если ")" то k=k-1

а если в ходе подсчета получим отрицательное число?
если скобочная последовательность правильная чему равно k?
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 10.01.2017, 11:15   #6
Карл Кремень
 
Регистрация: 04.01.2017
Сообщений: 8
По умолчанию

Прошу прощения, в условии была опечатка. Требуется найти подпоследовательность, а не подстроку
Всегда ваш, Karl Frederich-Adler "Kremen" Meinkopf < kremen.karl@yandex.com >
Карл Кремень вне форума Ответить с цитированием
Старый 10.01.2017, 11:15   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Может что-то не понял. Не вижу результат ни в одной из входящих строк. По идее в данном случае должно быть (). Не?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.01.2017, 11:22   #8
Карл Кремень
 
Регистрация: 04.01.2017
Сообщений: 8
По умолчанию

Прошу прощения, в условии была опечатка. Требуется найти подпоследовательность, а не подстроку
Всегда ваш, Karl Frederich-Adler "Kremen" Meinkopf < kremen.karl@yandex.com >
Карл Кремень вне форума Ответить с цитированием
Старый 10.01.2017, 11:36   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Input:
())(()()()
)(())(())

Output:
(())()

Непонятки. Выделенное красным правильные подпоследовательности?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.01.2017, 11:36   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Карл Кремень Посмотреть сообщение
Прошу прощения, в условии была опечатка. Требуется найти подпоследовательность, а не подстроку
а что такое "подпоследовательность" в вашем задании?

где найденная "подпоследовательность" (см. Output) есть в первой и во второй строчках?!

update
уже увидел пример Аватар'а.
если это верно, то задача весьма занимательна!

Последний раз редактировалось Serge_Bliznykov; 10.01.2017 в 11:39.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наибольшая общая подпоследовательность fufayka Помощь студентам 1 18.11.2016 01:16
Рефал. Наибольшая общая подстрока LifeWind Помощь студентам 1 03.06.2013 20:27
Подпоследовательность phoenix92 Помощь студентам 0 16.05.2011 17:56
найти подпоследовательность из подряд идущих элементов с наибольшей суммой на С++ aj_tramp Помощь студентам 2 12.12.2008 08:57