如何确定双端队列中的块大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确定双端队列中的块大小相关的知识,希望对你有一定的参考价值。

我试图通过链接列表在cpp中编写一个deque类,但是,我不知道在创建deque时如何确定块(缓冲区)的长度。

选择一个好的大小的块将有助于减少在双端队列随机访问的复杂性。

我应该编写一个函数,当一个新元素被推送时,它会动态调整块的大小,但我发现它会有很高的复杂性,因为它可能会移动大量数据。

我应该如何处理这个问题。

答案

查看_DEQUESIZ的代码(每块的元素数):

#define _DEQUESIZ   (sizeof (_Ty) <= 1 ? 16 
: sizeof (_Ty) <= 2 ? 8 
: sizeof (_Ty) <= 4 ? 4 
: sizeof (_Ty) <= 8 ? 2 : 1)    /* elements per block (a power of 2) */

元素越大,元素数量越少。只有大小超过8个字节的元素,随着元素大小的增加,才能获得预期的开销百分比减少。

看看原来的答案here

以上是关于如何确定双端队列中的块大小的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 中的块减少

constexpr 数组与双端队列,内存利用率

[程序员代码面试指南]栈和队列-生成窗口最大值数组(双端队列)

Python数据结构与算法---双端队列deque

Python数据结构与算法---双端队列deque

第十一节 双端队列的概念和python代码实现