Следующая проблема из главы «Динамическое программирование» Вазирани и др.al.
[6.6] Определим операцию умножения (×) для трех символов a;б;c согласно следующей таблице:
Следовательно, a × a = b, a × b = b и т. д.
Найдите эффективный алгоритм, который проверяет aстрока этих символов, скажем, bbbbac, и решает, возможно ли заключить строку в скобки таким образом, чтобы значение полученного выражения было a.Например, при вводе bbbbac ваш алгоритм должен возвращать yes, потому что ((b (bb)) (ba)) c = a.
Вот мой подход: сопоставьте его с проблемой подсчета числабулевых скобок, как указано здесь .В этой задаче вам дано логическое выражение вида
T или F и T xor T
и вам нужно найти количество способов заключить это в скобки, чтобы оно получило значение true.
Мы можем думать о или , и , xor как операторах, которые следуют определенным правилам (T xor F =T и т. Д.) И действуют на операнды, принимающие значения T или F. Для нашей исходной задачи мы можем рассматривать a, b, c как операнды с умножением (x) , как определено в данной таблице , как обеспечивающиеправила.
Имеет ли смысл приведенный выше подход или существует более простой подход?