【发布时间】:2015-09-22 20:40:47
【问题描述】:
我尝试使用不同的关键字进行搜索,但没有发现任何有用的信息。我什至不确定“多项式”在这里是否正确,请指教。
我正在尝试找到递归算法(理想情况下在 C# 上)来将我的表达式树转换/扩展为简化的标准(我猜是多项式)形式。例如:
输入:
(X1+X2+X3*X4)*X5+X6
输出:
X1*X5 + X2*X5 + X3*X4*X5 + X6
我有一组源类:
public abstract class Expr
{
public static Op Op(string operatorName, params Expr[] children)
{
var res = new Op() { Operator = operatorName };
res.Children.AddRange(children);
return res;
}
public static Var Var(string valName)
{
var res = new Var(){ Name = valName};
return res;
}
}
public class Op:Expr
{
public string Operator { get; set; }
public List<Expr> Children = new List<Expr>();
}
public class Var:Expr
{
public string Name { get; set; }
}
我需要实现以下方法:
public static IEnumerable<IEnumerable<Var>> SimplifyToPolynom(Expr expression)
{
throw new NotImplementedException();
}
//USE CASE:
public static void Test()
{
//(X1+X2+X3*X4)*X5+X6
var inputExpression =
Expr.Op("+",
Expr.Op("*"
, Expr.Op("+"
, Expr.Var("X1")
, Expr.Var("X2")
, Expr.Op("*"
, Expr.Var("X3")
, Expr.Var("X4")
)
)
, Expr.Var("X5")
)
, Expr.Var("X6")
);
var output = SimplifyToPolynom(inputExpression);
// Exected result [[X1,X5],[X2,X5], [X3,X4,X5], [X6]]
}
【问题讨论】:
-
是 + 和 * 唯一可能的运算符吗?
-
对于我的任务是的,但是如果解决方案可以扩展到更多,那当然会很棒
标签: c# algorithm recursion expression-trees polynomials