Давайте дадим набор чисел. Вставив элементы другого набора, состоящего из двоичных операторов между ними, и сгруппировав выражения со сбалансированными скобками, найдите все возможные перестановки.
Сложной частью вопроса является коммутативное поведение некоторых бинарных операторов. Например, если выражение (2 + 3) * 5
найдено, тогда нет необходимости вычислять выражения (3 + 2) * 5
, или 5 * (2 + 3)
, или 5 * (3 + 2)
из-за коммутативной идентичности операторов +
и *
. Их прежние эквиваленты нужно игнорировать.
Другим аспектом этого вопроса является группировка через сбалансированные скобки. Учитывая 2 * 3 + 5
, группировка 2 * (3 + 5)
дает отчетливый результат, но (2 * 3) + 5
, или даже (((2 * 3)) + 5)
просто создает дубликаты.
Существуют ли какие-либо алгоритмы для решения проблем такого типа? Как можно найти все перестановки выражений с оптимизацией коммутативного поведения бинарных операторов и фильтрацией скобок, которые приводят к дублированию?