2013-03-01 4 views
1

Я программирую дерево решений на 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 

Это намного меньше, чем наличие независимого матрицу данных для каждого узла.

+1

В C++, всегда думаю, что [ 'станд :: VECTOR'] (http://en.cppreference.com/w/cpp/container/ вектор) перед массивами. –

+0

@JoachimPileborg Да, я почти всегда делаю, но я никогда не использовал вектор векторов, поэтому я не был уверен, что это хорошая идея. – Topo

+0

Почему бы не алгоритм C5.0? –

ответ

0

Как насчет того, чтобы использовать в trie: http://en.wikipedia.org/wiki/Trie.

Существует также обсуждение вопроса о том, как реализовать: синтаксического дерева Trie implementation

+1

Можете ли вы рассказать о том, как использовать trie для представления таблицы данных? – Topo

Смежные вопросы