| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Синтаксический разбор и упрощение полинома |
| Автор: neutrino 5.5.2009, 16:40 |
| Приветствую! Требуется написать программу, которая будет получать выражение с одними только иксами. Возможные операции: суммирование, умножение и вычитание. Требуется найти коэффициенты полинома тождевственного этому выражению. Например: ввод: ((((x + x) + (x * x)) - ((x * x) * x)) * x) вывод: -1 1 2 0 0 так как ((((x + x) + (x * x)) - ((x * x) * x)) * x) = -x^4 + x^3 + 2x^2 Какой алгоритм решает эту задачу? |
| Автор: dereyly 5.5.2009, 20:53 |
| Поиск шаблона-поддерева в дереве. При работе этого стоит выбор : приводить дерево к канонической (инвариантной) форме или сделать много итераций. Под канонической формой я имею ввиду разного рода развороты между левым и правым потомком... |
| Автор: maxdiver 5.5.2009, 21:46 | ||||
| Мне примерно такое попадалось, я реализовал так. Можно понимать, что все операции в этом выражении - это операции над полиномами. Икс - это тоже полином. Т.е. у нас есть какое-то выражение, которое содержит иксы (простейшие полиномы), сложения, вычитания, умножения полиномов. Нам надо сделать какую-нибудь структуру данных для полинома, для которой надо определить операции сложения, вычитания, умножения. Я делал так. Полином:
где polynom[i] - это коэффициент при x^i. Тогда операция сложения выглядит так:
Ну и минус по аналогии, с умножением примерно так же, как бы столбиком перемножаем. Всё, теперь у нас всё готово, и теперь надо просто распарсить и посчитать значение выражения. Обратная польская нотация (парсер со стеком) сделает это на ура, строчек в 20. Иксы в выражении мы рассматриваем как polynom, у которого [0]=1. |