![]() |
|
|
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую!
Требуется написать программу, которая будет получать выражение с одними только иксами. Возможные операции: суммирование, умножение и вычитание. Требуется найти коэффициенты полинома тождевственного этому выражению. Например: ввод: ((((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 Какой алгоритм решает эту задачу? -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| dereyly |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 16.6.2006 Репутация: 1 Всего: 4 |
Поиск шаблона-поддерева в дереве. При работе этого стоит выбор : приводить дерево к канонической (инвариантной) форме или сделать много итераций. Под канонической формой я имею ввиду разного рода развороты между левым и правым потомком...
|
|||
|
||||
| maxdiver |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Мне примерно такое попадалось, я реализовал так. Можно понимать, что все операции в этом выражении - это операции над полиномами. Икс - это тоже полином. Т.е. у нас есть какое-то выражение, которое содержит иксы (простейшие полиномы), сложения, вычитания, умножения полиномов. Нам надо сделать какую-нибудь структуру данных для полинома, для которой надо определить операции сложения, вычитания, умножения.
Я делал так. Полином:
где polynom[i] - это коэффициент при x^i. Тогда операция сложения выглядит так:
Ну и минус по аналогии, с умножением примерно так же, как бы столбиком перемножаем. Всё, теперь у нас всё готово, и теперь надо просто распарсить и посчитать значение выражения. Обратная польская нотация (парсер со стеком) сделает это на ура, строчек в 20. Иксы в выражении мы рассматриваем как polynom, у которого [0]=1. |
||||
|
|||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
Можно много проще. n -> n * x ^ 0 x -> 1 * x ^ 1 И выполняем операции в соответствии с правилами действий над многочленами. Вот, накидал на Хаскеле без парсера:
Добавлено через 1 минуту и 18 секунд Пока писал, уже ответили -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |