powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какие есть идеи? Нужна помощь в вариантах решения задачи.
25 сообщений из 43, страница 1 из 2
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480059
RomanBanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попалась мне тут задачка следующего вида:
Для произвольной строки, состоящей из открывающих и закрывающих скобок написать запрос для вывода всех слов максимальной длины, представляющих правильные скобочные записи. Например, для строки (()(() ответ должен быть:
()()
(())

По идее на нее человек с начальными знаниями должен потратить от 20 мину до часа. Ну, решал я ее пару дней.
В итоге получился запрос из 11-и SELECT-ов.
В кратце последовательность следующая:
1) Хитрейшим способом находим все правильные скобочные последовательности максимальной длины для данной строки(соответствует числам Каталана).
2) В полученные последовательности впихиваем через символ -это (.*\)
3) Применяем все эти строки как регулярки к исходной строке.

Но что-то получается слишком жестко, наверняка есть более простые способы решить эту задачу, через регэкспы или еще как-то?
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480079
RomanBanan,

принцип получения результата не совсем понятен. раскрась цветом какие скобки из исходного множества попали в конечное и объясни словами, почему именно так, а не по другому.

Но в целом, есть подозрение, что задача сведется к банальному запросу по преобразованию "интервалов" в "конечные точки" с последующим заворачиваем этих самых "конечных точек" в новые "интервалы".
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480129
RomanBanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Для данной строки минимальное количество скобок в любую из сторон это 2. Следовательно все возможные варианты это (()) и ()().
Из исходного множества это (()(() и (()((). Далее превращаются в регэкспы '.*\(.*\(.*\).*\)' и '.*\(.*\).*\(.*\)'. Оба выражения к исходной строке подходят, следовательно являются ответами.
Но для строки посложнее например '((())(()' вариант '()(())' -> '.*\(.*\).*\(.*\(.*\).*\)' уже не подойдет и в результат не попадает.
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480160
Скобарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RomanBanan минимальное количество скобок
!=
RomanBanan всех слов максимальной длины, представляющих правильные скобочные записи
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480217
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanBanan,

Можно ссылку на задачу посмотреть?
Почему так (()(() ответ должен быть:
()()
(()) а не так?:

() () ()
() (())
(()) ()


У Вас 6 скобок = 3 пары
Сочетания 2 из 3 - это С 23 = 3! / 2! (3-2)! = 2*3 / 2 = 3
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480231
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123,

() (())
(()) ()
((()))
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480281
RomanBanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dba123,
dba123а не так?:

() () ()




Потому что в строке (()(() - две скобки влево, а в ()()() - три и по идее это не должно подойти к этому слову.
Ссылки на задачу нет, видимо некоторые задачи для нас придумываются по ходу.
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480292
vladimir74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanBanandba123,
dba123а не так?:

() () ()




Потому что в строке (()(() - две скобки влево, а в ()()() - три и по идее это не должно подойти к этому слову.
Ссылки на задачу нет, видимо некоторые задачи для нас придумываются по ходу.
допустим, а почему тогда нет такого варианта ответа? ()
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480310
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladimir74,
Имеется " (()(() ".

Бежим по символам до "(":
(()(()
Нашли начало -> Бежим до первой ")":
(()(()
Убираем все самволы "внутри".
Закончили с первым "отрезком" строки, продолжаем дальше в том же духе с остатком строки.

Бежим по символам до "(":
(()(()
Нашли начало -> Бежим до последней ")":
(()(()
Проверяем, что этот кусок not like "(%(%)%)"
Если not like, то откидываем всё, что внутри, если он лайк, то начинаем с начала только в рамках данного "отрезка".

В зависимости от бежим до первой ")" или бежим до последней ")" сформируем все возможные варианты.
Причём, когда мы проверяем 2ым способом, то "внутри" можно использовать и 1ый и 2ой варианты, результаты могут быть разные.
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480317
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanBananПопалась мне тут задачка следующего вида:
Для произвольной строки, состоящей из открывающих и закрывающих скобок написать запрос для вывода всех слов максимальной длины, представляющих правильные скобочные записи. Например, для строки (()(() ответ должен быть:
()()
(())

По идее на нее человек с начальными знаниями должен потратить от 20 мину до часа. Ну, решал я ее пару дней.
В итоге получился запрос из 11-и SELECT-ов.
В кратце последовательность следующая:
1) Хитрейшим способом находим все правильные скобочные последовательности максимальной длины для данной строки(соответствует числам Каталана).
2) В полученные последовательности впихиваем через символ -это (.*\)
3) Применяем все эти строки как регулярки к исходной строке.

Но что-то получается слишком жестко, наверняка есть более простые способы решить эту задачу, через регэкспы или еще как-то?

Вопрос по алгоритмам - к математикам.

Лично я вижу, что в вашем случае подойдёт только полный перебор вложенных отрезков.
Алгоритмы комбинаторной механизации не подойдут, тк находят лишь единственное(оптимальное) решение.

полный перебор можно осуществить с помощью цикла(model, regexp и тп)
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480319
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kernA
Алгоритмы комбинаторной *механизации не подойдут

*оптимизации
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480338
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще не поняла задачу

()() - это откуда ответ ?


строка (()((), там нет подряд ()()
можно вкидывать символы ?
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480346
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поняла
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480347
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitca,

Мы выкидываем все символы, которые не имеют "пару".
По сути, для (()(() ответ должен быть:
1) (()(()
2) (()(()
3) (()(()
4) (()(()
5) (()(()
6) ...
Если не distinctitь, то получится как раз

()()
(())
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480353
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooOzornitca,

Мы выкидываем все символы, которые не имеют "пару".
По сути, для (()(() ответ должен быть:
1) (()(()
2) (()(()
3) (()(()
4) (()(()
5) (()(()
6) ...
Если не distinctitь, то получится как раз

()()
(())

да я поняла поняла
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480358
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда надо регекспом вырезать повторяющиеся 2 и более раза символы,

в цикле отрезая постепенно строку с начала)))
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480394
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и потом подчистить с концов ))
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480397
_lLocust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ozornitcaтогда надо регекспом вырезать повторяющиеся 2 и более раза символы,

в цикле отрезая постепенно строку с начала)))
1) Если в цикле вырезать хотя бы один из 2х повторяющихся симоволов (( из начала, то будет пропущен этот вариант (()), что не допустимо.
2) а для строки )()( врожде и нечего вырезать, а правильный ответ будет такой ()

не все так просто ))) (и если что эти скобки - не скобки, а смайлики ))) )
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480400
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitcaтогда надо регекспом вырезать повторяющиеся 2 и более раза символы,

в цикле отрезая постепенно строку с начала)))

в строке вложенность может быть n, а не только 2
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480406
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kernAOzornitcaтогда надо регекспом вырезать повторяющиеся 2 и более раза символы,

в цикле отрезая постепенно строку с начала)))

в строке вложенность может быть n, а не только 2

а точно
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480407
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitcaну и потом подчистить с концов ))

а в самом начале проверить на вырожденность:

))))))))))))))))))))))))))))))(((((((((((((((((((((((((((((((((
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480410
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а иерархическим запросом кк-то можно ? ну раз вложенность
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480451
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitcaа иерархическим запросом кк-то можно ? ну раз вложенность

если паттерном задать правило вложенности отрезков, то можно
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480453
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kernAOzornitcaа иерархическим запросом кк-то можно ? ну раз вложенность

если паттерном задать правило вложенности отрезков, то можно

например,


алгоритм Фараха
...
Рейтинг: 0 / 0
Какие есть идеи? Нужна помощь в вариантах решения задачи.
    #39480485
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanBanan,



нашёл, может поможет:


Правильные скобочные последовательности


RomanBananПо идее на нее человек с начальными знаниями должен потратить от 20 мину до часа.

* с хорошими знаниями Динамического программрования
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какие есть идеи? Нужна помощь в вариантах решения задачи.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]