> -- Rifat писал(а):
> не совсем понятно какие структуры данных и алгоритмы лучше для этого использовать.Литературу не посоветую.
Сам делал, представляя формулу в виде дерева.
Ключевые процедуры:
- определение эквивалентности веток (рекурсивная функция с перебором порядка следования подветок в узлах);
- приведение констант (отлавливаются случаи умножения на 1 и на 0, например, а также деление и вычитание одинаковых веток;
- вынесение общего множителя за скобку;
- раскрытие скобок;
- прочая специфика (тригонометрические преобразования в моём случае).

А сам процесс упрощения организуется при помощи чего-то вроде минимаксной процедуры, известной из теории игр.
То есть, к примеру, у нас в данной формуле есть разные варианты преобразований: можно вынести за скобку, а можно, наоборот, раскрыть скобки. Пробуем сначала одно, потом другое, оцениваем эффективность (размер) результата, сравниваем и выбираем тот или другой путь. И так рекурсивно от корневого узла до самых листьев.