数据结构-在c++中存储表的最佳方式是什么?

data structures - What is the best way to store a table in C++

本文关键字:最佳 方式 是什么 存储 c++ 数据结构      更新时间:2023-10-16

我正在使用C4.5算法的稍微修改版本在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]
节点3:

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

这样在最坏的情况下我只需要浪费

size_of(int) * (number_of_columns + number_of_rows) * node

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

使用at trie: http://en.wikipedia.org/wiki/Trie.

还有一个关于如何实现trie的讨论:单词查找树实现