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