数据结构-在c++中存储表的最佳方式是什么?
data structures - What is the best way to store a table in C++
我正在使用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的讨论:单词查找树实现
相关文章:
- 在c代码之间共享数据的最佳方式
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 在reactor中存储eventHandlers的最佳方式是什么
- 在AVX通道中混洗的最佳方式
- 从 T 创建 std::future 的最佳方式<T>
- C++:使用 std::unique_ptr 访问重载运算符++的最佳方式?
- 对列表列表中的元素进行分组的最佳方式
- 利用 GPU 的最佳方式
- 使用 QT C++过滤大数据的最佳方式
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- 在C++中共享键值对的最佳方式
- 为Catch2中的外部文本文件指定路径的最佳方式
- 代表Quarto棋盘游戏棋子的最佳方式
- 等待线程的最佳方式是什么
- 将uint8_t*buffer和size_tbufferlen从C++传递到C中的API函数的最佳方式是什么
- 创建控制台菜单C++的最佳方式
- 只显示片段着色器的最佳方式是什么
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?