繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM