Я программирую дерево решений на C++, используя слегка измененную версию C4.5 algorithm. Каждый узел представляет собой атрибут или столбец вашего набора данных, и у него есть дети на возможное значение атрибута.Каков наилучший способ хранения таблицы в C++
Моя проблема заключается в том, как сохранить набор данных обучения, имея в виду, что я должен использовать подмножество для каждого узла, поэтому мне нужен быстрый способ выбрать только подмножество строк и столбцов.
Основная цель - сделать это в максимально возможной памяти и времени (в этом порядке приоритета).
Лучший способ, по-моему, состоит в том, чтобы иметь массив массивов (или std :: vector) или что-то в этом роде, и для каждого узла есть список (массив, вектор и т. Д.) Или что-то с column,line
(возможно кортежей), которые действительны для этого узла.
Я теперь должен быть лучший способ сделать это, любые предложения?
UPDATE: Что мне нужно что-то вроде этого:
В начале у меня есть эти данные:
Paris 4 5.0 True
New York 7 1.3 True
Tokio 2 9.1 False
Paris 9 6.8 True
Tokio 0 8.4 False
Но для второго узла мне просто нужно эти данные:
Paris 4 5.0
New York 7 1.3
Paris 9 6.8
И для третьего узла:
Tokio 2 9.1
Tokio 0 8.4
Но с таблицей миллионов записей с сотнями столбцов.
Что я имею в виду, это сохранить все данные в матрице, а затем для каждого узла сохранить информацию о текущих столбцах и строках. Что-то вроде этого:
Paris 4 5.0 True
New York 7 1.3 True
Tokio 2 9.1 False
Paris 9 6.8 True
Tokio 0 8.4 False
Узел 2:
columns = [0,1,2]
rows = [0,1,3]
Node 3:
columns = [0,1,2]
rows = [2,4]
Таким образом, на самом худшем случае я просто должны тратить
size_of(int) * (number_of_columns + number_of_rows) * node
Это намного меньше, чем наличие независимого матрицу данных для каждого узла.
В C++, всегда думаю, что [ 'станд :: VECTOR'] (http://en.cppreference.com/w/cpp/container/ вектор) перед массивами. –
@JoachimPileborg Да, я почти всегда делаю, но я никогда не использовал вектор векторов, поэтому я не был уверен, что это хорошая идея. – Topo
Почему бы не алгоритм C5.0? –