|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Попалась мне тут задачка следующего вида: Для произвольной строки, состоящей из открывающих и закрывающих скобок написать запрос для вывода всех слов максимальной длины, представляющих правильные скобочные записи. Например, для строки (()(() ответ должен быть: ()() (()) По идее на нее человек с начальными знаниями должен потратить от 20 мину до часа. Ну, решал я ее пару дней. В итоге получился запрос из 11-и SELECT-ов. В кратце последовательность следующая: 1) Хитрейшим способом находим все правильные скобочные последовательности максимальной длины для данной строки(соответствует числам Каталана). 2) В полученные последовательности впихиваем через символ -это (.*\) 3) Применяем все эти строки как регулярки к исходной строке. Но что-то получается слишком жестко, наверняка есть более простые способы решить эту задачу, через регэкспы или еще как-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 01:37 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
RomanBanan, принцип получения результата не совсем понятен. раскрась цветом какие скобки из исходного множества попали в конечное и объясни словами, почему именно так, а не по другому. Но в целом, есть подозрение, что задача сведется к банальному запросу по преобразованию "интервалов" в "конечные точки" с последующим заворачиваем этих самых "конечных точек" в новые "интервалы". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 03:54 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, Для данной строки минимальное количество скобок в любую из сторон это 2. Следовательно все возможные варианты это (()) и ()(). Из исходного множества это (()(() и (()((). Далее превращаются в регэкспы '.*\(.*\(.*\).*\)' и '.*\(.*\).*\(.*\)'. Оба выражения к исходной строке подходят, следовательно являются ответами. Но для строки посложнее например '((())(()' вариант '()(())' -> '.*\(.*\).*\(.*\(.*\).*\)' уже не подойдет и в результат не попадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 09:09 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
RomanBanan минимальное количество скобок != RomanBanan всех слов максимальной длины, представляющих правильные скобочные записи ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 09:39 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
RomanBanan, Можно ссылку на задачу посмотреть? Почему так (()(() ответ должен быть: ()() (()) а не так?: () () () () (()) (()) () У Вас 6 скобок = 3 пары Сочетания 2 из 3 - это С 23 = 3! / 2! (3-2)! = 2*3 / 2 = 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 10:47 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
dba123, () (()) (()) () ((())) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 10:59 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
dba123, dba123а не так?: () () () Потому что в строке (()(() - две скобки влево, а в ()()() - три и по идее это не должно подойти к этому слову. Ссылки на задачу нет, видимо некоторые задачи для нас придумываются по ходу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 11:56 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
RomanBanandba123, dba123а не так?: () () () Потому что в строке (()(() - две скобки влево, а в ()()() - три и по идее это не должно подойти к этому слову. Ссылки на задачу нет, видимо некоторые задачи для нас придумываются по ходу. допустим, а почему тогда нет такого варианта ответа? () ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 12:11 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
vladimir74, Имеется " (()(() ". Бежим по символам до "(": (()(() Нашли начало -> Бежим до первой ")": (()(() Убираем все самволы "внутри". Закончили с первым "отрезком" строки, продолжаем дальше в том же духе с остатком строки. Бежим по символам до "(": (()(() Нашли начало -> Бежим до последней ")": (()(() Проверяем, что этот кусок not like "(%(%)%)" Если not like, то откидываем всё, что внутри, если он лайк, то начинаем с начала только в рамках данного "отрезка". В зависимости от бежим до первой ")" или бежим до последней ")" сформируем все возможные варианты. Причём, когда мы проверяем 2ым способом, то "внутри" можно использовать и 1ый и 2ой варианты, результаты могут быть разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 12:45 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
RomanBananПопалась мне тут задачка следующего вида: Для произвольной строки, состоящей из открывающих и закрывающих скобок написать запрос для вывода всех слов максимальной длины, представляющих правильные скобочные записи. Например, для строки (()(() ответ должен быть: ()() (()) По идее на нее человек с начальными знаниями должен потратить от 20 мину до часа. Ну, решал я ее пару дней. В итоге получился запрос из 11-и SELECT-ов. В кратце последовательность следующая: 1) Хитрейшим способом находим все правильные скобочные последовательности максимальной длины для данной строки(соответствует числам Каталана). 2) В полученные последовательности впихиваем через символ -это (.*\) 3) Применяем все эти строки как регулярки к исходной строке. Но что-то получается слишком жестко, наверняка есть более простые способы решить эту задачу, через регэкспы или еще как-то? Вопрос по алгоритмам - к математикам. Лично я вижу, что в вашем случае подойдёт только полный перебор вложенных отрезков. Алгоритмы комбинаторной механизации не подойдут, тк находят лишь единственное(оптимальное) решение. полный перебор можно осуществить с помощью цикла(model, regexp и тп) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 12:57 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
kernA Алгоритмы комбинаторной *механизации не подойдут *оптимизации ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 12:59 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
вообще не поняла задачу ()() - это откуда ответ ? строка (()((), там нет подряд ()() можно вкидывать символы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 13:19 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
поняла ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 13:28 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Ozornitca, Мы выкидываем все символы, которые не имеют "пару". По сути, для (()(() ответ должен быть: 1) (()(() 2) (()(() 3) (()(() 4) (()(() 5) (()(() 6) ... Если не distinctitь, то получится как раз ()() (()) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 13:29 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
DshedooOzornitca, Мы выкидываем все символы, которые не имеют "пару". По сути, для (()(() ответ должен быть: 1) (()(() 2) (()(() 3) (()(() 4) (()(() 5) (()(() 6) ... Если не distinctitь, то получится как раз ()() (()) да я поняла поняла ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 13:34 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
тогда надо регекспом вырезать повторяющиеся 2 и более раза символы, в цикле отрезая постепенно строку с начала))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 13:36 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
ну и потом подчистить с концов )) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:04 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Ozornitcaтогда надо регекспом вырезать повторяющиеся 2 и более раза символы, в цикле отрезая постепенно строку с начала))) 1) Если в цикле вырезать хотя бы один из 2х повторяющихся симоволов (( из начала, то будет пропущен этот вариант (()), что не допустимо. 2) а для строки )()( врожде и нечего вырезать, а правильный ответ будет такой () не все так просто ))) (и если что эти скобки - не скобки, а смайлики ))) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:06 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Ozornitcaтогда надо регекспом вырезать повторяющиеся 2 и более раза символы, в цикле отрезая постепенно строку с начала))) в строке вложенность может быть n, а не только 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:07 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
kernAOzornitcaтогда надо регекспом вырезать повторяющиеся 2 и более раза символы, в цикле отрезая постепенно строку с начала))) в строке вложенность может быть n, а не только 2 а точно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:10 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Ozornitcaну и потом подчистить с концов )) а в самом начале проверить на вырожденность: ))))))))))))))))))))))))))))))((((((((((((((((((((((((((((((((( ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:11 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
а иерархическим запросом кк-то можно ? ну раз вложенность ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:15 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
Ozornitcaа иерархическим запросом кк-то можно ? ну раз вложенность если паттерном задать правило вложенности отрезков, то можно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:52 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
kernAOzornitcaа иерархическим запросом кк-то можно ? ну раз вложенность если паттерном задать правило вложенности отрезков, то можно например, алгоритм Фараха ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 14:57 |
|
Какие есть идеи? Нужна помощь в вариантах решения задачи.
|
|||
---|---|---|---|
#18+
RomanBanan, нашёл, может поможет: Правильные скобочные последовательности RomanBananПо идее на нее человек с начальными знаниями должен потратить от 20 мину до часа. * с хорошими знаниями Динамического программрования ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2017, 15:35 |
|
|
start [/forum/topic.php?fid=52&msg=39480160&tid=1881678]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 289ms |
total: | 452ms |
0 / 0 |