我可以使用比树更快的数据结构吗?

Wil*_*ood 7 performance data-structures

我有一个二元决策树.它将输入作为一个浮点数组,每个分支节点在输入索引和值上分割,最终将我带到一个叶子.

我在这棵树上执行了大量的查找(根据性能分析,大约17%的执行时间(编辑:优化了其他区域,现在几乎达到40%)),我想知道我是否可以/应该使用不同的数据结构,以提高查找速度.

某些哈希表不能使用,因为输入不直接映射到叶节点,但我想知道是否有人建议我可以用来代替树的方法和数据结构(或者也是如此) as?)提高查找速度.

记忆是一个值得关注的问题,但不是速度问题.

代码目前用C#编写,但显然可以应用任何方法.

编辑:发布的代码太多了,但我会提供有关树的更多细节.

树是使用信息增益计算生成的,它并不总是50/50分割,分割值可以是任何浮点值.单个输入也可以多次拆分,从而提高该输入的分辨率.

我在这里发布了一个关于迭代器性能的问题:

在C#中迭代树的微优化

但我想我可能需要查看数据结构本身以进一步提高性能.

我的目标是尽可能多的表现.我正在研究一种新的机器学习方法,树使用反馈循环自我增长.对于我正在研究的过程,我估计它将运行几个月,所以在这里节省了几个百分点.最终目标是在不使用太多内存的情况下提高速度.

Wil*_*ill 1

假设决策有 50/50 的机会:

想象一下你有两个二元决定;可能的路径为 00、01、10、11

想象一下,你有一个包含四个结果的数组,而不是树;您可以将浮点数数组转换为二进制数,该二进制数将作为该数组的索引。