ID3 Java Enum Tree

Я пытаюсь создать недвоичное дерево обучения, которое является упрощенной версией алгоритма ID3. Для этого я попытался использовать перечисления, потому что есть несколько ссылок, обучающих иерархии перечислений, но у меня возникают проблемы с передачей перечислений функциям, которые мне нужны для создания дерева. Я установил для дерева все, что мне нужно, как мог, но у меня возникли проблемы с первоначальным построением дерева.

Во-первых, я создал шесть перечислений, каждое со своим файлом, поэтому мне не нужно было писать «main.enumname». везде. Эти первые пять перечислений представляют диагностику автомобиля.

<code>public enum fuelstats {notempty, empty}
public enum lightstatus {Dim, Normal}
public enum scents {normal, gas}
public enum soundstatus {Normal, Howl, Screech, Click}
public enum turn {no, yes}
</code>

Затем я сделал еще два перечисления. Один для разных результатов диагностики и один для разных «тем» диагностику автомобиля.

<code>public enum problems {battery, starter, solenoid, outofgas, flooding}
public enum features {lightstatus, soundstatus, fuelstats, scents, turn, problems}
</code>

Затем я сделал пять примеров данных диагностики различных автомобилей для сортировки в дереве.

<code>Example example1 = new Example(lightstatus.Dim, soundstatus.Howl, turn.yes, fuelstats.notempty, scents.normal, problems.battery);
Example example2 = new Example(lightstatus.Normal, soundstatus.Screech, turn.no, fuelstats.notempty, scents.normal, problems.starter);
Example example3 = new Example(lightstatus.Normal, soundstatus.Click, turn.no, fuelstats.notempty, scents.normal, problems.solenoid);
Example example4 = new Example(lightstatus.Normal, soundstatus.Normal, turn.yes, fuelstats.empty, scents.normal, problems.outofgas);
Example example5 = new Example(lightstatus.Normal, soundstatus.Normal, turn.yes, fuelstats.notempty, scents.gas, problems.flooding);

//make an array list of Examples.
ArrayList<Example> Examples = new ArrayList<Example>();
Examples.add(example1);

Examples.add(example2);
Examples.add(example3);
Examples.add(example4);
Examples.add(example5);
</code>

Я поместил в ArrayList различные средства диагностики автомобилей, называемые «Возможности», для перемешивания, поскольку они будут случайным образом использоваться для построения дерева.

<code>//This ArrayList holds the Enums for shuffling purposes.
ArrayList<features> Features = new ArrayList<features>();

Features.add(features.soundstatus);
Features.add(features.lightstatus);
Features.add(features.turn);
Features.add(features.scents);
Features.add(features.fuelstats);

// Shuffle the elements in the list
Collections.shuffle(Features);

//The Features Array List is now a shuffled tree.
//We will do a single loop that will serve as our stack.

//First we take the top of the list and assign it to the root.
Tree id3 = new Tree(Features.get(0),Examples);
</code>

Но как мне написать дерево, которое: Принимает в качестве признака перечисление, которое делает субъект корня совпадающим с перечислением, и все различные состояния перечисления дочерние элементы? Например, если soundstatus является корнем, он должен иметь четырех дочерних элементов: Normal, Howl, Screech и Click. Таким образом, я могу сопоставить звуки Примера со звуками детей. Это мой узел до сих пор.

<code>public class Node 
{

    ArrayList<Node> children;


    /* Constructor*/
    public Node(ArrayList<Node> ExampleList) 
    { 
        this.ExampleList = ExampleList;
        this.parent = parent;
        this.children = children; 
    }

    public ArrayList<Node> getChildren() 
    { 
        return children; 
    }

    public void addChild(Node n) 
    { 
        children.add(n);
    }

    private ArrayList<Node> children;

    Enum phrase;

    private boolean isUsed;

    Node parent;

    public void setUsed(boolean isUsed) 
    {
        this.isUsed = isUsed;
    }

    public boolean isUsed() 
    {
        return isUsed;
    }
    //This method states if the node is a leaf 
    public boolean isLeaf()
    {
        if (this.getChildren() == null)
        return true;

        else
        return false;
    }

}
</code>

Ответы на вопрос(2)

Ваш ответ на вопрос