试图做出决策树

时间:2014-09-30 00:58:40

标签: java decision-tree

Name    Hair    Eyes    Shirt   Glasses Smiling Hat
Alice   BROWN   BLUE    GREEN     YES   YES     NO
Bob     BROWN   BROWN   GREEN     YES   NO     YES
Dave    BROWN   BROWN   GREEN     NO    YES    YES
Emily   BROWN   HAZEL   RED       YES   YES    YES
Frank   BROWN   GREEN   GREEN     YES   YES     NO
Isabelle BROWN  HAZEL   GREEN     YES   YES     NO
Mallie  BROWN   BLUE    RED       YES   YES     NO
Nick    BROWN   BLUE    RED       NO    YES     NO
Philip  BROWN   GREEN   RED       NO    YES     NO
Quinn   BROWN   BROWN   RED       NO    YES     NO
Robert  BROWN   BROWN   RED       NO    YES     YES
Tucker  BROWN   BLUE    BLUE      NO    YES     NO
Wendy   BROWN   BLUE    RED       YES   NO     NO
Zander  BROWN   BROWN   BLUE      NO    YES    NO

我有这些角色,我正在尝试制作像

这样的决策树
 if (g.hairIsColor(Color.BROWN)) 
  {
   if(g.isWearingGlasses())
   {
     if(g.shirtIsColor(Color.GREEN))
     {
         k = "Bob";
       if(g.eyeIsColor(Color.GREEN))
       {
       k = "Frank";
       }
       if(g.eyeIsColor(Color.BLUE))
       {
       k = "Alice";
       break outerloop;
       }
       if(g.eyeIsColor(Color.HAZEL))
       {
       k = "Isabelle";
       }
     }
    if(g.eyeIsColor(Color.HAZEL))
    k = "Emily";
    if (g.isSmiling())
    k = "Mallie";
   }
    else if(g.eyeIsColor(Color.BROWN))
    {
     if (g.shirtIsColor(Color.RED))
     {
       if(g.isWearingHat())
       k = "Robert";
       else 
       k = "Quinn";
     }
     else if(g.shirtIsColor(Color.GREEN))
     k = "Dave";
     else
     k = "Zander";
    }
   else if(g.shirtIsColor(Color.RED))
   { 
    if(g.eyeIsColor(Color.BLUE))
    k = "Nick";
    if(g.eyeIsColor(Color.GREEN))
    k = "Philip";
   }
  else if(g.eyeIsColor(Color.BLUE) && g.shirtIsColor(Color.BLUE))
  k = "Tucker";
}

不幸的是,每个角色花了太多次尝试,并且想知道是否有人可以帮助我? 我试图让每个角色达到10次或者不足,但我似乎无法用if语句获得50% 有帮助吗? 我已经对其他头发颜色进行了分类,但棕色给我带来了麻烦

3 个答案:

答案 0 :(得分:1)

不要用if-then-else来做。

  1. 创建一个名为Key的新类来保存属性
  2. 确保课程具有有效的hashCode()equals()方法
  3. 创建Map<Key,String>并使用帖子中的表格内容对其进行初始化
  4. 当您需要查找某人时,请创建一个新的Key并设置属性的值,并将其用作地图中的查找键。如:

    Key k = new Key(name, hair, eyes, shirt, glasses, hat, smiling, ...whatever);
    String name = map.get(key);
    

答案 1 :(得分:0)

条件运算符if提供0到1位信息:

  • if hair color is brown提供零位,因为头发颜色是恒定的。

  • if glasses提供一位,因为它将搜索空间分成两半。

使用提供完整位的测试可以理论识别每个人进行四次测试。根据实际数据选择好的测试应该可以解决这个问题。但它可能要求测试的每个分支都具有独特的逻辑。例如,glasses = yes可能会测试衬衫颜色,glasses = no可能会在帽子上测试,以便将搜索空间的各个分支分成两半。

答案 2 :(得分:0)

修正我的问题结果我从错误的第一个决定开始,因此最终做错了。我从一个不同的眼睛颜色开始,然后从那里开始解决我的问题