|
ru.algorithms
- RU.ALGORITHMS ----------------------------------------------------------------
From : Ilya Potrepalov 2:5020/400 31 Jan 2002 09:41:58
To : Max Alekseyev
Subject : Re: Посоветуйте алгоритм, очень надо!!!
--------------------------------------------------------------------------------
Hi, Max!
Max Alekseyev сообщил в новостях следующее:
> AN> Дана строка, состоящая из скобок 4-х видов (,),[,]
> AN> Определить минимальное число скобок, которые надо подставить в строку,
> AN> чтобы она стала "правильной"... Hапример: "[ ( ] )" - "неправильная
> AN> строка" "[ ] ( [ ] )" - "правильная", полученная путем подстановки в
> AN> "неправ-ю" 2-х скобок! Интересует алгоритм... условие - сложность <=
> AN> O(N*N), а желательно O(N*log N)
[skip]
> Задача решается динамическим программированием.
[skip]
Можно и так. Hо тут можно и по-другому попробовать. Сам я далек от этого, но
кое-какие мысли у меня появились.
Для начала нужно сделать предварительную обработку исходной строки:
1. Закрывающиеся скобки в начале строки дополнить открывающимися (и удалить,
т.е. дальше их учитывать не нужно).
2. Открывающиеся скобки в конце строки дополнить закрывающимися (и удалить;
напимер: '])[[()(][()][))[([' -> '[]()[[()(][()][))[]()[]' ->
'[[()(][()][))' ).
3. Удалить внутренние парные скобки (напимер: '[[()(][()][))' -> '[[(][))',
это довольно просто и быстро).
А далее... Тут можно проанализировать, как человек решает такую задачу.
Я ее решаю так: смотрю на начальную последовательность открывающихся скобок
(до первой закрывающейся) и ищу _максимально_ длинную соответствующую
последовательность закрывающихся скобок. И тоже их 'сокращаю'. Hапример:
([)])[(])] -> ([ ) ]) [(])] (пробелы для наглядности)
([(([)]])]) -> ([( ([)]] )])
[[(][)) -> [ [ ( ] [)) или [[ ( ][ ) ) - оба разбиения дают
одинаковый результат
([(([)]]))][) -> ( [(([ )] ]))] [)
Очевидно, что просто удалить соответствующие последовательности нельзя. А вот
то, что они разбивают исходную строку на отдельные фрагменты - нужно учесть.
Следующий этап - дополнение 'внутренних' фрагментов (а вот тут уже пошла
рекурсия). Продолжая крайний пример:
( [(([ )] ]))] [) -> ( [(([ ()[] ]))] [) -> ([) -> ( [ ) ->
[] ) -> все. Добавили всего 3 скобки.
Вот где-то в этом направлинии и нужно идти, имхо. Hо тут еще нужно доказать,
что такой алгоритм будет давать лучшее решение.
ps. Если будете делать реализацию, то хотелось бы увидеть ее. Можно и письмом.
--
WBR, Ilya from Nizhnevartovsk
e-mail: nc@mailru.com
2:5079/35.12@fidonet
--- ifmail v.2.15dev5
* Origin: In God we trust. Others must pay. (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Тема: |
Автор: |
Дата: |
Посоветуйте алгоритм, очень надо!!! |
Aleksey Nilov |
24 Jan 2002 20:46:28 |
Re: Посоветуйте алгоритм, очень надо!!! |
Grandalf Gray |
25 Jan 2002 19:44:12 |
 Re: Посоветуйте алгоритм, очень надо!!! |
Grandalf Gray |
25 Jan 2002 20:52:01 |
  Re: Посоветуйте алгоритм, очень надо!!! |
Aleksey Nilov |
26 Jan 2002 03:00:47 |
  Re^2: Посоветуйте алгоритм, очень надо!!! |
Sergey Politov |
26 Jan 2002 06:50:50 |
   Посоветуйте алгоритм, очень надо!!! |
Max Alekseyev |
25 Jan 2002 23:15:54 |
    Посоветуйте алгоритм, очень надо!!! |
Max Alekseyev |
26 Jan 2002 03:40:34 |
  Посоветуйте алгоритм, очень надо!!! |
Max Alekseyev |
25 Jan 2002 22:08:58 |
  Re: Посоветуйте алгоритм, очень надо!!! |
Grandalf Gray |
26 Jan 2002 12:46:42 |
   Посоветуйте алгоритм, очень надо!!! |
Max Alekseyev |
26 Jan 2002 02:30:30 |
  Re: Посоветуйте алгоритм, очень надо!!! |
Grandalf Gray |
26 Jan 2002 12:46:43 |
Посоветуйте алгоритм, очень надо!!! |
Max Alekseyev |
25 Jan 2002 22:04:28 |
 Посоветуйте алгоритм, очень надо!!! |
Aleksey Nilov |
29 Jan 2002 01:53:54 |
 Посоветуйте алгоритм, очень надо!!! |
Max Alekseyev |
28 Jan 2002 16:49:14 |
 Re: Посоветуйте алгоритм, очень надо!!! |
Sergey Politov |
29 Jan 2002 06:34:29 |
  Re: Посоветуйте алгоритм, очень надо!!! |
Aleksey Nilov |
31 Jan 2002 02:43:30 |
 Re: Посоветуйте алгоритм, очень надо!!! |
Ilya Potrepalov |
31 Jan 2002 09:41:58 |
  Re: Посоветуйте алгоритм, очень надо!!! |
Ilya Potrepalov |
31 Jan 2002 13:11:33 |
  Re^2: Посоветуйте алгоритм, очень надо!!! |
Sergey Politov |
01 Feb 2002 06:43:50 |
  Re: Re^2: Посоветуйте алгоритм, очень надо! !! |
Ilya Potrepalov |
01 Feb 2002 15:46:36 |
Посоветуйте алгоритм, очень надо!!! |
Sergey Ezhov |
26 Jan 2002 14:03:07 |
 Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
27 Jan 2002 02:28:38 |
 Посоветyйте алгоpитм, очень надо!!! |
Sergey Ezhov |
27 Jan 2002 22:36:11 |
  Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
28 Jan 2002 14:08:18 |
  Re: Посоветyйте алгоpитм, очень надо!!! |
Sergey Politov |
30 Jan 2002 07:23:33 |
  Посоветyйте алгоpитм, очень надо!!! |
Sergey Ezhov |
30 Jan 2002 22:54:47 |
 Посоветуйте алгоритм, очень надо!!! |
Nickita A Startcev |
30 Jan 2002 02:18:38 |
Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
27 Jan 2002 02:39:02 |
 Re: Посоветyйте алгоpитм, очень надо!!! |
Sergey Politov |
27 Jan 2002 06:23:28 |
 Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
28 Jan 2002 03:18:38 |
  Re: Посоветyйте алгоpитм, очень надо!!! |
Sergey Politov |
28 Jan 2002 06:46:54 |
   Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
29 Jan 2002 15:25:24 |
  Посоветyйте алгоpитм, очень надо!!! |
Oleg Yanchenkov |
30 Jan 2002 22:03:08 |
  Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
01 Feb 2002 02:45:34 |
 re: Посоветyйте алгоpитм, очень надо!!! |
Valentin Kononov |
30 Jan 2002 00:07:05 |
  Re: Посоветyйте алгоpитм, очень надо!!! |
Andrew Ezhguroff |
31 Jan 2002 01:40:00 |
  Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
31 Jan 2002 02:19:28 |
  Re^2: Посоветyйте алгоpитм, очень надо!!! |
Sergey Politov |
31 Jan 2002 05:25:21 |
  re: Посоветyйте алгоpитм, очень надо!!! |
Valentin Kononov |
31 Jan 2002 23:44:04 |
  re:Посоветyйте алгоpитм, очень надо!!! |
Valentin Kononov |
04 Feb 2002 00:16:36 |
  Re: re:Посоветyйте алгоpитм, очень надо!!! |
Ilya Potrepalov |
05 Feb 2002 07:58:56 |
Посоветyйте алгоpитм, очень надо!!! |
Oleg Yanchenkov |
28 Jan 2002 08:30:07 |
 Re: Посоветyйте алгоpитм, очень надо!!! |
Sergey Politov |
29 Jan 2002 06:08:00 |
 Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
29 Jan 2002 15:27:40 |
Re: Посоветуйте алгоритм, очень надо!!! |
Michael Leontyev |
29 Jan 2002 14:46:19 |
 Посоветyйте алгоpитм, очень надо!!! |
Stanislav Aranovsky |
30 Jan 2002 04:25:30 |
 Re: Посоветyйте алгоpитм, очень надо!!! |
Michael Leontyev |
30 Jan 2002 10:45:03 |
 Re^2: Посоветуйте алгоритм, очень надо!!! |
Sergey Politov |
30 Jan 2002 07:55:24 |
 Посоветyйте алгоpитм, очень надо!!! |
Oleg Yanchenkov |
01 Feb 2002 00:31:21 |
Re: Посоветуйте алгоритм, очень надо!!! |
Zapadinsky Anatoly \\(ZAB\\) |
30 Jan 2002 18:06:09 |
 Re: Посоветуйте алгоритм, очень надо!!! |
Michael Leontyev |
30 Jan 2002 18:59:35 |
|
|