我正在研究一种算法的实现,我想表明它可以在恒定时间内工作,即使有很多元素也是如此。
不幸的是,我需要一个存储元素的数据结构。当元素的数量非常高,但对于我的算法而言并非不合理时,std :: vector和std :: valarray都不会在常量as you can see in this graph中访问任意元素。
是否有更好的数据结构来存储值?我是否可以采用任何技术来实现持续时间访问?
答案 0 :(得分:5)
对于n
的高值,很可能是:
您遇到了缓存问题。在某些时候,每次内存访问都会丢失缓存,从而导致更长的内存负载。
您正在使用内存分页来解决缓存问题。现代计算机存储器以树状结构组织。每个内存访问都通过该树,使每个内存访问O(log n)
,其中n
是可寻址的内存空间。你通常不会注意到它,因为树的高度和良好的缓存。但是,对于非常高的n
和随机内存访问,这可能会成为一个问题。
例如,我的一位朋友证明,由于随机存储器访问,计数排序算法具有O(n log n)
时间复杂度。快速排序算法 - 用于比较 - 具有非常好的顺序访问内存,并且分页开销要低得多。
最重要的是,您很可能会遇到架构/操作系统内存访问开销 - 除非您使用一些非常极端的方法(例如实现您自己的操作系统),否则您将无法克服这些问题。