Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Valentin Kononov                     2:5035/38.9    31 Jan 2002  23:44:04
 To : Valentin Kononov
 Subject : re: Посоветyйте алгоpитм, очень надо!!!
 -------------------------------------------------------------------------------- 
 
 Втp Янв 29 2002 23:07, I соwrал-te to Alexei Nilov:
 
  AN>>> Имеется задача:
  AN>>> Дана стpока, состоящая из скобок 4-х видов (,),[,]
  AN>>> Опpеделить минимальное число скобок, котоpые надо подставить в
 
                   ~~~~~~~~~~~
 Пардон, не заметил слова "минимальное".
 
  AN>>> стpокy, чтобы она стала "пpавильной"... Hапpимеp: "[ ( ] )" -
  AN>>> "непpавильная стpока" "[ ] ( [ ] )" - "пpавильная", полyченная пyтем
  AN>>> подстановки в "непpав-ю" 2-х скобок! Интеpесyет алгоpитм... yсловие -
  AN>>> сложность <= O(N*N), а желательно O(N*log N)
 
  VK>   Во-первых, условие неоднозначно. Приведенную строчку можно
  VK> исправить и так: "[ ( ) ] ( )" или так "[ ( [ ] ) ]". Так что стоит
  VK> доопределить - есть ли иерархия у скобок, например. Hо O(N) хватит,
  VK> ИМХО, в любом случае.
 
 Конечно, нет.
 
  VK> 1) Проще всего действовать тривиально:
  VK> нашел скобку, подставь рядом (либо слева, либо справа) парную :))
  VK> 2) А реально примерно так. Держим стек, в который записываем все
  VK> открывающиеся скобки. Если же находим закрывающуюся, смотрим верх стека.
  VK> Если там скобка того же типа, выкидываем ее, если другого или стек пуст,
  VK> то ставим перед этой парную открывающуюся.
 
 .....
 
  VK> ЗЫ: В первом и третьем вариантах строка получится длиннее - в
  VK> первом примерно в 1.5 раза, в 3-ем - в 1.25 (на глазок). А во втором
  VK> - минимально необходимая длина (тоже раза в полтора больше исходной,
  VK> неправильной строки).
 
   И поспешил с оценками. Минимального решения так просто не найти. Я
 прокрутил несколько алгоритмов, но все удалось опровергнуть :( -
 Вот этот пока работает вроде бы правильно.
 (Для простоты буду открывающиеся скобки называть ОС, а закрывающиеся - ЗС)
   Следует приписать каждой скобке (отдельно для каждого типа) глубину
 вложения. При этом первые ЗС и последние ОС помечаем "+", считаем и
 выкидываем - их можно исправить только тривиальным способом. Парные
 ("правильные") скобки помечаем "-" и выкидываем. Вот так:
 
    +       01   23   45   5   5   5     4 - -3210
  [ ) [[[[[ (( ] (( ] (( ] ) ] ( ] ) ] [ ) ( )))))
  0   12345    5    4    3   2   1   0 +
                       ~~~~~   ~~~~~
   Здесь две "тривиальных" скобки и одна "правильная" пара. аибольшая
 глубина вложения обоих типов - 6. (В примере число ОС и ЗС каждого типа
 одинаково. Если это не так, подсчет глубин вложения надо вести с более
 "низкого" края, так что на другом появятся отрицательные глубины.)
   Из остальных выбираем "самые глубокие" пары, а среди них самую "узкую",
 содержащую внутри себя меньше посторонних скобок. В примере - две
 подчеркнутые пары при глубине 6 имет ширину 1.
   Убираем их, подбирая пары для "посторонних", считая их и выкидывая. При
 этом глубины вложения меняются:
          01   23   4    43210                01   23   3210
  [ [[[[[ (( ] (( ] ( ]] )))))  ->  [ [ [ [[[ (( ] (( ] )))) ->
 -2-10123    3    2   10           -4-3-2-101    1    0
                    ~~~~~~                          ~~~~~
             01   - -10                 - -
  [ [ [ [ [[ (( ] ( )))   -> [ [ [ [ [[ ( )
 -5-4-3-2-10    0           -5-4-3-2-10
              ~~~~~~~~
   а шестом шаге парных скобок не осталось (глубины вложения <=0). Итого
 потребовалось добавить 14 скобок (2+2+2+1+1+6).
   Кажется, теперь минимально. о я этого не доказал, могу и соврать!
 А сложность ... по крайней мере < О(n*n).
 
 С уважением, Valentin
 
 --- * ---
  * Origin:  Ложка дегтя в бочке меда: два вкуса, две удачи! (Kursk 2:5035/38.9)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Посоветуйте алгоритм, очень надо!!!   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 
Архивное /ru.algorithms/28483c59dc78.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional