Упрощение математических выражений с использованием модели дерева наследования - PullRequest
0 голосов
/ 12 апреля 2019

Я изо всех сил пытался найти решение этой проблемы. Или, может быть, подход, который будет соответствовать моим условиям проблемы.

Мы представляем математические выражения с помощью классов, расположенных в иерархическом дереве. Вверху находится базовое математическое выражение, а внизу - двоичные, унарные, а под ними - все операторы, такие, что унарные представляют: отрицание, cos, sin. Двоичные: плюс, минус, деление, пау, лог.

В стороне у нас есть номер и переменная.

Пример выражения:

new Plus(new Plus(x , 5), 5) => x + 5 + 5 

Все эти классы реализуют интерфейс с методами, которые обычно связаны с .math.

Пример: оценить, назначить, получить. Эти методы работают рекурсивно благодаря иерархическому дереву.

Я также заметил, что это не обычное регулярное двоичное дерево. (Я прав?)

Все идет хорошо и гладко, пока мы не сделаем упрощение этих выражений.

Простое упрощение x * 0 => 0 просто.

Но я хочу упростить использование ассоциативности, дистрибутивности также ..

Например, данное (2 * x + 4 * x) + 5 + 2x даст мне 8x + 5.

Поэтому мне интересно, как подойти к этой проблеме.

...