Data structures 复杂条件滤波器设计

Data structures 复杂条件滤波器设计,data-structures,binary-tree,decision-tree,conditional,Data Structures,Binary Tree,Decision Tree,Conditional,我在后台的表单中实现了一些条件规则。基本上,我需要找到一种高效且可扩展的方法来实现这一点。我在研究二叉树和决策树,但仍然不确定实现这一点的最佳方法是什么 如您所见,有一条语句可能包含多个条件,这些条件由逻辑AND/OR分隔。基本上我需要知道的是在数据库中存储这些信息的数据结构。当用户根据表单值提交表单时,它将作为一个过滤器。当表单通过过滤器时,将执行一些操作。您的问题有点笼统,但让我看看是否可以帮助您开始。在Java中,可以按如下方式设置类结构: interface ConditionTree

我在后台的表单中实现了一些条件规则。基本上,我需要找到一种高效且可扩展的方法来实现这一点。我在研究二叉树和决策树,但仍然不确定实现这一点的最佳方法是什么


如您所见,有一条语句可能包含多个条件,这些条件由逻辑AND/OR分隔。基本上我需要知道的是在数据库中存储这些信息的数据结构。当用户根据表单值提交表单时,它将作为一个过滤器。当表单通过过滤器时,将执行一些操作。

您的问题有点笼统,但让我看看是否可以帮助您开始。在Java中,可以按如下方式设置类结构:

interface ConditionTree {
    boolean evaluate(...);
}

class OperatorNode implements ConditionTree {
   List<ConditionTree> subTrees = ....;

   @Override
   boolean evaluate(...) {
      if(operator == AND) {
      //loop through and evaluate each sub tree and make sure they are all true,
      //or return false
      }
      else if(operator == OR) {
      //loop through and evaluate each sub tree, and make sure at least one is
      //true, or return false
      } 
   }
}

class LeafNode implements ConditionTree { 
    @Override
   boolean evaluate(...) {
      //get the LHS, operator, and RHS, and evaluate them   
   }

}
接口条件树{
布尔求值(…);
}
类OperatorNode实现条件树{
列表子树=。。。。;
@凌驾
布尔求值(…){
if(运算符==和){
//循环并评估每个子树,确保它们都是真实的,
//或者返回false
}
else if(运算符==或){
//循环遍历并评估每个子树,并确保至少有一个子树是可用的
//是,还是返回false
} 
}
}
类LeafNode实现条件树{
@凌驾
布尔求值(…){
//获取LHS、操作员和RHS,并对其进行评估
}
}

请注意,这是一个N元树,而不是二叉树。

谢谢您的解决方案。这是有道理的,但是我想知道如何将其存储在数据库中。整个过滤器应该存储在数据库中,在表单提交时,我们通过过滤器传递提交的数据。