替代嵌套数组(6维),内存间隙保留O(1)访问权限

我正在阅读运行具有不同配置的程序的统计数据。 假设有6种配置( ab ,…, f )。 配置可能不会线性变化,因此如果您将测量结果视为表格,则表格中可能存在间隙。 问题是关于在内存中构造这些统计数据。

首先想到的是将这些配置读取到动态分配的6深度数组或数组:

 struct data ******measurements; 

现在这很好用。 您的内存开销很小(只有实际分配数据的配置),访问时间为O(1)

除了大多数人不喜欢******指针的事实之外,这还有一个缺点,即添加配置意味着向数组添加维度,除非将数组的读/写封装在函数中,否则可能会变得难看。 (写入已被封装以在必要时进行分配,因此实际上这并不是什么大问题)。

想到的另一个想法是使用struct config的映射来使用AVL树或其他东西(我已经拥有,因此没有实现开销)来struct data 。 这解决了扩展配置参数的问题,但减少了对O(log(n))访问时间。

对于O(log(n)) ,测试的数量可能会相当大,从而产生差异。

我的问题是:在这里使用6深度嵌套数组是否合理? 或者有更好的方法吗?

真正的性能瓶颈(除了浪费内存)不是计算,而是你将遇到的间接和缓存未命中的数量。 这些指数和类似东西的计算可以占据数百到数千的因数。 因此,您最好的选择是减少间接数量并投入一些计算。 据我所知,最好通过哈希你的6个指数来完成。 这会将你的间接减少到两个,首先查找存储在哈希表中的值(可能是一个指针),然后直接获取你感兴趣的数据。

请注意,您当前的设置不是O(1),它是O(k),其中k是维数。 使用平衡树,无论如何它都会转到O(log 2 ^ k)== O(k)(我假设每个维度都有两个选择;但这并不重要……这只是一个常数)。 您可能会或可能不会期望在平衡树的实现上有更大的开销。

你可以做的是尝试使用typedef和getter / setter函数(最好是内联函数)抽象接口,然后使用你想要的任何实现。 然后你不必处理那么多的指针,并且仍然使用里面的任何结构。

X树是高效存储和查找高维数据的常见选择。 链接的维基百科文章只是一个存根,但它指向一个更权威的来源。

它们基本上是R-Tree的改进版本,针对最小化重叠进行了优化。

我不知道手头的ac实现。