【发布时间】:2015-04-07 06:58:12
【问题描述】:
这属于 stackoverflow.com/help/on-topic 中的“软件算法”,在这种情况下,是一种将项目添加到动态未排序数组的软件算法
这是我们在课堂上制作的关于不同数据结构的操作运行时间的图表
我的问题是关于将值插入(或添加)到动态未排序数组的运行时。 这是我们执行此操作的代码
public void insert(E value) {
ensureCapacity(size + 1);
elementData[size] = value;
size++;
}
private void ensureCapacity(int capacity) {
if (capacity > elementData.length) {
int newCapacity = elementData.length + 100;
if (capacity > newCapacity) {
newCapacity = capacity;
}
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
我理解这可以解释为 O(n)。 ensureCapacity 函数在技术上是由插入和运行时分析组成的操作的一部分,https://academics.tjhsst.edu/compsci/CS2C/U2/bigoh.html,你会说两个分支的最坏情况是原始数组的每个元素都被复制到新数组中,即O(n) 操作。所以整个函数的最坏情况或大哦是O(n)
是否也可以为摊销 O(1) 时间进行论证(What is amortized analysis of algorithms?),因为每次调整大小时,您都必须等待特定的时间才能进行下一次调整?
在那个图表中,那么 O(1) 是否也有意义?
【问题讨论】:
标签: java algorithm arraylist time-complexity amortized-analysis