final int num_lists = 3;
ArrayList<String> list_as[] = new ArrayList<String>[3];
for (int i = 0; i < num_lists; ++i)
list_as[i] = new ArrayList<String>();
if (choice_needed)
{
best_attribute = choose_Attribute(examples, attributes);
node.
setData(Integer.
toString(best_attribute
)); //not hm.get(best_attribute) //create the children
Node<String> childs[] = new Node<String>[num_lists];
for (int i = 0; i < num_lists; ++i)
childs[i] = new Node<String>(null);
for (int i = 0; i < num_lists; ++i)
node.setChild(childs[i]);
//remove the best attribute
for (int i=0; i<attributes.size(); i++)
{ if (attributes.get(i)==best_attribute)
{ attributes.remove(i);
}
}
//for each attribute type
for (int i=0; i<num_lists; i++)
{ //create separate lists for each example type
for (int j=0; j<num_examples; j++)
{ example = examples.get(j).split(",");
int k
= Integer.
parseInt(example
[best_attribute
]); if (k < 0 || num_lists <= k)
System.
out.
println("Something went wrong."); list_as[k].add(examples.get(j));
}
DT_Learning(list_as[i], attributes, majority, childs[i]);
}
return node;
}
ASAgICBmaW5hbCBpbnQgbnVtX2xpc3RzID0gMzsKICAgIEFycmF5TGlzdDxTdHJpbmc+IGxpc3RfYXNbXSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPlszXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2xpc3RzOyArK2kpCiAgICAgICAgbGlzdF9hc1tpXSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwoKICAgIGlmIChjaG9pY2VfbmVlZGVkKQogICAgewogICAgICAgIGJlc3RfYXR0cmlidXRlID0gY2hvb3NlX0F0dHJpYnV0ZShleGFtcGxlcywgYXR0cmlidXRlcyk7CiAgICAgICAgbm9kZS5zZXREYXRhKEludGVnZXIudG9TdHJpbmcoYmVzdF9hdHRyaWJ1dGUpKTsgLy9ub3QgaG0uZ2V0KGJlc3RfYXR0cmlidXRlKQogICAgICAgIC8vY3JlYXRlIHRoZSBjaGlsZHJlbgoKICAgICAgICBOb2RlPFN0cmluZz4gY2hpbGRzW10gPSBuZXcgTm9kZTxTdHJpbmc+W251bV9saXN0c107CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fbGlzdHM7ICsraSkKICAgICAgICAgICAgY2hpbGRzW2ldID0gbmV3IE5vZGU8U3RyaW5nPihudWxsKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9saXN0czsgKytpKQogICAgICAgICAgICBub2RlLnNldENoaWxkKGNoaWxkc1tpXSk7CgogICAgICAgIC8vcmVtb3ZlIHRoZSBiZXN0IGF0dHJpYnV0ZQogICAgICAgIGZvciAoaW50IGk9MDsgaTxhdHRyaWJ1dGVzLnNpemUoKTsgaSsrKQogICAgICAgIHsgICBpZiAoYXR0cmlidXRlcy5nZXQoaSk9PWJlc3RfYXR0cmlidXRlKQogICAgICAgICAgICB7ICAgYXR0cmlidXRlcy5yZW1vdmUoaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vZm9yIGVhY2ggYXR0cmlidXRlIHR5cGUKICAgICAgICBmb3IgKGludCBpPTA7IGk8bnVtX2xpc3RzOyBpKyspCiAgICAgICAgeyAgIC8vY3JlYXRlIHNlcGFyYXRlIGxpc3RzIGZvciBlYWNoIGV4YW1wbGUgdHlwZQogICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8bnVtX2V4YW1wbGVzOyBqKyspCiAgICAgICAgICAgIHsgICBleGFtcGxlID0gZXhhbXBsZXMuZ2V0KGopLnNwbGl0KCIsIik7CiAgICAgICAgICAgICAgICBpbnQgayA9IEludGVnZXIucGFyc2VJbnQoZXhhbXBsZVtiZXN0X2F0dHJpYnV0ZV0pOwogICAgICAgICAgICAgICAgaWYgKGsgPCAwIHx8IG51bV9saXN0cyA8PSBrKQogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU29tZXRoaW5nIHdlbnQgd3JvbmcuIik7CiAgICAgICAgICAgICAgICBsaXN0X2FzW2tdLmFkZChleGFtcGxlcy5nZXQoaikpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBEVF9MZWFybmluZyhsaXN0X2FzW2ldLCBhdHRyaWJ1dGVzLCBtYWpvcml0eSwgY2hpbGRzW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9Cg==