对于一个类项目,我们需要根据循环动态数组找到优先级队列的最佳增长因子。 我已经进行了一些测试但是没有结果。我们被告知有一种数学方式来显示它,但我无法在任何地方找到它。
我查了一下,发现Java ArrayList使用3/2,而且还使用了9/8因子的pyhton列表的ac实现,基本上我认为它在不同的编程之间有所不同语言。
是否有任何数学方法可以找到最佳的'动态阵列的增长因子?
答案 0 :(得分:3)
简短回答是“否”。
对于大多数应用程序,最佳增长因子是在一个步骤中将阵列精确地增长到其最大所需大小的因子。因此事后很容易确定,但通常难以预测。
因此缺乏有关该最大大小的信息,优化内存需求的策略是在每个步骤中分配单个附加单元的策略。优化重新分配数量的那个是在一个步骤中分配尽可能多的内存的那个。对于大多数实际应用,两种极端都不合理。通常需要在内存和重新分配之间进行权衡。
您可以用数学术语来表达您对此权衡的偏好。例如。通过制定一些成本作为分配数量或频率,总分配空间量和实际使用百分比的函数。如果除此之外你有一个典型使用模式的数学模型,那么你可以开始优化,即改变增长因子以最小化成本。
在实践中,成本和使用都不是很清楚,因为两者都取决于很多外部因素。因此,这一切归结为直觉和经验。如果您发现应用程序浪费内存,则可能会降低增长因素,如果您发现它在重新分配上花费了太多时间,则可能会增加该因素。如果没有太多的数学建模,这两种变化都会非常特别。