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

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

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

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

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

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

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

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


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

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

() () ()




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

() () ()




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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

()()
(())

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

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

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

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

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

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

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

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

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

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

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

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

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

например,


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



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


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


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

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


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