在C ++中存储表的最佳方法是什么?

时间:2013-03-01 06:56:33

标签: c++ data-structures decision-tree

我正在使用C4.5 algorithm的略微修改版本在C ++中编写决策树。每个节点代表数据集的一个属性或一列,并且每个属性的可能值都有一个子节点。

我的问题是如何存储训练数据集,因为我必须为每个节点使用一个子集,所以我需要一种快速的方法来只选择行和列的子集。

主要目标是以最大的内存和时间效率(按优先级顺序)进行。

我想到的最好的方法是拥有一个数组(或std :: vector)或类似的数组,并为每个节点都有一个列表(数组,向量等)或{{1}的东西(可能是一个元组)对该节点有效的对。

我现在应该有更好的方法来做这个,有什么建议吗?

更新:我需要的是这样的:

一开始我有这些数据:

column,line

但对于第二个节点,我只需要这些数据:

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

节点2:

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

节点3:

columns = [0,1,2]
rows = [0,1,3]

这种方式在最糟糕的情况下我只需要浪费

columns = [0,1,2]
rows = [2,4]

这比每个节点都有一个独立的数据矩阵要少得多。

1 个答案:

答案 0 :(得分:0)

如何在特里使用:http://en.wikipedia.org/wiki/Trie

还讨论了如何实现trie: Trie implementation