キュー03キューの時間複雑度比較

1308 ワード

ArrayQueue時間複雑度のボトルネック

  • ArrayQueueのdequeue操作の時間的複雑度はO(n)であるため、配列は最初の要素を削除し、すなわち、キューを出るたびにすべての要素を移動する.
  • import java.util.Random;
    
    public class Main {
    
        //  q opCount enqueueu dequeue , : 
        private static double testQueue(Queue q, int opCount){
            long startTime = System.nanoTime();
    
            Random random = new Random();
            for(int i = 0 ; i < opCount ; i ++)
                q.enqueue(random.nextInt(Integer.MAX_VALUE));
            for(int i = 0 ; i < opCount ; i ++)
                q.dequeue();
    
            long endTime = System.nanoTime();
            return (endTime - startTime) / 1000000000.0;
        }
    
        public static void main(String[] args) {
            int opCount = 100000;
    
            ArrayQueue arrayQueue = new ArrayQueue<>();
            double time1 = testQueue(arrayQueue, opCount);
            System.out.println("ArrayQueue, time: " + time1 + " s");
    
            LoopQueue loopQueue = new LoopQueue<>();
            double time2 = testQueue(loopQueue, opCount);
            System.out.println("LoopQueue, time: " + time2 + " s");
        }
    
    }
    

    しゅつりょく
    ArrayQueue, time: 4.7585816 s LoopQueue, time: 0.017241299 s

    結論


    O(n)の操作とO(1)の操作の差は極めて大きい.