![](/img/trans.png)
[英]fewer constant-time iterations take more time - c++ compiler dependence?
[英]Constant-time access to an arbitrary element in a list (C++)
我目前正在研究一种算法的实现,我想证明该算法即使有很多元素也可以恒定时间工作。
不幸的是,我需要一个存储元素的数据结构。 当元素的数量非常高,但对于我的算法而言并非不合理时,std :: vector和std :: valarray都不会在恒定时间内访问任意元素, 如该图所示 。
是否有更好的数据结构来存储值? 有什么我可以实现恒定时间访问的技术?
对于高n
值,很可能是:
您遇到了缓存问题。 在某些时候,每个内存访问都会丢失高速缓存,从而导致更长的内存负载。
您遇到内存分页的缓存问题。 现代计算机内存以树状结构组织。 每个内存访问都通过该树,从而使每个内存访问为O(log n)
,其中n
是可寻址内存空间。 您通常不会注意到它,因为该树的高度友好性和良好的缓存。 但是,对于非常高的n
和随机存储器访问,这可能会成为问题。
例如,我的一个朋友证明了由于随机存储器访问,计数排序算法的时间复杂度为O(n log n)
。 为了进行比较,快速排序算法具有很好的顺序访问内存,而分页开销要低得多。
最重要的是,您很可能会遇到架构/ OS内存访问开销的问题,除非您使用某些极端的方法(例如实现自己的OS),否则您将无法克服这些开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.