java - Is this method O(log N) or constant time? -
i have method inserts elements priority queue. want know performance time has.
i believe can o(1) if element being inserted can place @ bottom of queue. however, runs on o(log n) time, if element inserted new minimum , percolated way root. is reasoning correct?
here method insertion method:
/** * insert priority queue, maintaining heap order. * duplicates allowed. * @param x item insert. */ public void insert( anytype x ) { if( currentsize == array.length - 1 ) enlargearray( array.length * 2 + 1 ); // percolate int hole = ++currentsize; for( array[ 0 ] = x; x.compareto( array[ hole / 2 ] ) < 0; hole /= 2 ) array[ hole ] = array[ hole / 2 ]; array[ hole ] = x; }
i "no" in answer question "is reasoning correct?" typically o()
notation taken indication of worst-case complexity of algorithm. can used average-case complexity, best-case complexity. (see here example when might use it.) have argued algorithm o(1)
in best-case circumstances, not o(1)
in average or worst-case circumstances.
leaving aside concern complexity of enlargearray()
function (which may make more o(log n)
although amortized time not, on other hand not part of "algorithm proper" anyway because pre-allocate array "big enough"), insertion algorithm o(log n)
because both average , worst case complexity.
Comments
Post a Comment