我的代码现在具有O(N)插入时间和O(1)移除时间。我需要对此进行更改。我正在尝试实现O(1)插入时间和O(N)删除时间。
传说:
nItems =项目/对象数。最初设置为0。
queArray是我的长整数数组。
这是我的两种方法。插入方法完成所有排序工作。Delete方法仅一行-删除数组中的第一个元素,由于我们的Insert方法,该元素恰巧是最小的数字。
如果我将插入时间更改为O(1),是否需要提供“排序任务”以删除方法?毕竟这是一个优先级队列,我们必须对其进行排序,否则它将只是一个具有随机顺序编号的常规队列。
请,任何帮助都很好!!!
public void insert(long item) {
int j;
if(nItems==0) // if no items,
queArray[nItems++] = item; // insert at 0
else {
for(j=nItems-1; j>=0; j--) { // start at the end
if( item > queArray[j] ) // if new item larger,
queArray[j+1] = queArray[j]; // shift upward
else // if smaller,
break; // done shifting
} // end for
queArray[j+1] = item; // insert it
nItems++;
} // end else (nItems > 0)
}
public long remove() // remove minimum item
{ return queArray[--nItems]; }
如果您需要O(1)插入时间和O(N)去除时间,只需将未排序的新元素添加到内部数组的末尾,然后在列表中进行O(N)线性搜索以去除,将其余的排列下来一个。
为了更好的实现,您可能需要考虑使用Fibonacci堆。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句