Мне нужно создать дерево решений в C ++, которое может работать с различными наборами данных в зависимости от входных данных из файла. Функции, которые мне нужно реализовать, - это чтение из файла, печать списка переменных, печать (структурированного) дерева, вставка / удаление / изменение узлов, «сделать прогноз на основе входных данных из файла» и «сделать предсказание, вставляющее значения одно за другим '.
Прямо сейчас я пытаюсь повторно использовать некоторый код, который я уже написал, для создания дерева с указателями на первого потомка следующего ребенка, и мне понадобится некоторая помощь с функциями чтения и печати.
Вот формат ввода:
root
root nodo1 cond1 nodo2 cond2 nodo3 cond3
nodo1 nodo4 cond4 nodo5 cond5 nodo6 cond6 .......
nodo2 nodo7 cond7 nodo8 cond8 nodo9 cond9 .......
А вот код для функции чтения, которую я реализовал:
Tree readFromStream(istream& str)
{
Tree t = createEmpty();
string line;
Label rootLabel, fatherLabel, childLabel;
getline(str, line);
istringstream instream;
instream.clear();
instream.str(line);
instream >> rootLabel; // the first element in the file is the root
addElem(emptyLabel, rootLabel, t); // the tree in initially empty so it has no father
getline(str, line); // start reading the other lines
instream.clear();
instream.str(line);
while (!str.eof())
{
instream >> fatherLabel; // on each line, the first element is the fatherLabel and the others are the children's labels
removeBlanksAndLower(fatherLabel); // function to normalize the fatherLabel
while (!instream.eof()) // as long as the line isn't finished
{
instream >> childLabel; // read the next label
removeBlanksAndLower(childLabel); // normalize it
addElem(fatherLabel, childLabel, t); // attach it to the father
}
getline(str, line);
instream.clear();
instream.str(line);
}
str.clear();
return t;
}
Моя проблема заключается в том, что условия cond1, cond2, cond3...
- это не дочерние метки, а метки, представляющие переменные: они могут быть целыми числами (условия «возраста») или строками (то есть «типом автомобиля»).
Все условия должны быть представлены одним из этих символов: =, <, <=, >, >=, !=
.
Вот возможный входной файл, на котором мне нужно будет построить дерево решений:
Age_1
Age_1 Risk_1 <=23 TypeOfVehicle_1 >23
Risk_1 END_1 =A
TypeOfVehicle_1 Risk_2 =Sportscar Risk_3 =Autocarro Risk_4 =Citycar
Risk_2 END_2 =A
Risk_3 END_3 =B
Risk_4 END_4 =B
И функция printDecisionTree выдаст:
Age_1
--(TypeOfVehicle_1, >23)
----(rischio_5, =CityCar)
------(end_5, =B)
----(rischio_4, =Autocarro)
------(end_4, =B)
----(rischio_3, =SportsCar)
------(end_3, =A)
--(rischio_2, <23)
----(end_2, =A)
--(rischio_1, =23)
----(end_1, =A)
Как я могу изменить свою функцию, чтобы правильно прочитать метку переменных, представляющих условия?