Data structures 是否有数学方法来计算动态阵列的最佳生长因子?

Data structures 是否有数学方法来计算动态阵列的最佳生长因子?,data-structures,dynamic-arrays,space-complexity,Data Structures,Dynamic Arrays,Space Complexity,对于一个类项目,我们需要找到基于循环动态数组的优先级队列的最优增长因子。 我做了一些测试,但没有结果。我们被告知有一种数学方法来表示它,但我在任何地方都找不到 我查了一下,发现Java ArrayList使用了3/2,pyhton的列表也有一个c实现,它使用了9/8因子,基本上我认为不同的编程语言之间是不同的 那么,有什么数学方法可以找到动态阵列的“最佳”增长因子吗?简单的回答是“没有”。 对于大多数应用程序,最佳增长因子是在一个步骤中将阵列精确地增长到其最大所需大小。因此,事后判断很容易,但通

对于一个类项目,我们需要找到基于循环动态数组的优先级队列的最优增长因子。 我做了一些测试,但没有结果。我们被告知有一种数学方法来表示它,但我在任何地方都找不到

我查了一下,发现Java ArrayList使用了3/2,pyhton的列表也有一个c实现,它使用了9/8因子,基本上我认为不同的编程语言之间是不同的


那么,有什么数学方法可以找到动态阵列的“最佳”增长因子吗?

简单的回答是“没有”。

对于大多数应用程序,最佳增长因子是在一个步骤中将阵列精确地增长到其最大所需大小。因此,事后判断很容易,但通常很难预测

由于缺乏关于最大容量的信息,优化内存需求的策略是在每个步骤中分配一个额外单元。优化重新分配数量的方法是在一个步骤中分配尽可能多的内存。对于大多数实际应用,两种极端都不合理。通常需要在内存和重新分配之间进行权衡

你可以用数学术语表达你的偏好。例如,根据分配的数量或频率、总分配空间的数量和实际使用的百分比,制定一些成本。除此之外,如果您有一个典型使用模式的数学模型,那么您可以开始优化,即改变增长因子以最小化成本


在实践中,成本和使用都不是很清楚,因为两者都取决于许多外部因素。因此,这一切归结为直觉和经验。如果你注意到你的应用程序在浪费内存,你可能会降低增长系数,如果你注意到它在重新分配上花费了太多时间,你可能会提高增长系数。这两种更改都是非常临时的,不需要太多的数学建模。

我敢说,没有这样的数学方法,因为最佳值在很大程度上取决于使用模式,除了不同程序之间不同之外,它还可以在生命周期(甚至运行时)中更改我倾向于使用
g=g(env)
近似值,其中
g
是最佳增长因子,
env
是“环境的所有相关属性”变量,
g
是“高斯-戈雷蒂猜测估计值”。(然后我只使用了2。)在你说什么是最佳算法之前,你需要定义你想要优化的内容。优化最小内存与优化最小元素拷贝数不同。