对列表中任意元素的恒定时间访问(C ++)

时间:2017-03-21 13:46:12

标签: c++ stdvector valarray constant-time

我正在研究一种算法的实现,我想表明它可以在恒定时间内工作,即使有很多元素也是如此。

不幸的是,我需要一个存储元素的数据结构。当元素的数量非常高,但对于我的算法而言并非不合理时,std :: vector和std :: valarray都不会在常量as you can see in this graph中访问任意元素。

是否有更好的数据结构来存储值?我是否可以采用任何技术来实现持续时间访问?

1 个答案:

答案 0 :(得分:5)

对于n的高值,很可能是:

您遇到了缓存问题。在某些时候,每次内存访问都会丢失缓存,从而导致更长的内存负载。

您正在使用内存分页来解决缓存问题。现代计算机存储器以树状结构组织。每个内存访问都通过该树,使每个内存访问O(log n),其中n是可寻址的内存空间。你通常不会注意到它,因为树的高度和良好的缓存。但是,对于非常高的n和随机内存访问,这可能会成为一个问题。

例如,我的一位朋友证明,由于随机存储器访问,计数排序算法具有O(n log n)时间复杂度。快速排序算法 - 用于比较 - 具有非常好的顺序访问内存,并且分页开销要低得多。

最重要的是,您很可能会遇到架构/操作系统内存访问开销 - 除非您使用一些非常极端的方法(例如实现您自己的操作系统),否则您将无法克服这些问题。