자료구조

빅오 표기법

syppjava 2020. 3. 27. 21:46

빅오 : 알고리즘의 성능을 수학적으로 표현하는 표기법

 

알고리즘의

시간 복잡도

공간복잡도 표현가능

 

end point

알고리즘의 데이터나 사용자의 증가율에 따른 알고리즘의 성능을 예측

 

O(1) :오원

입력데이터의 크기에 상관없이 일정한 시간이 걸리는 알고리즘 표현

    public boolean oOne(int[] n) {
        if(n[0== 0) {
            return true;
        }else {
            return false;
        }
    }

 

O(n) : 오엔

입력 데이터의 크기에 비례해서 처리시간이 늘어나는 알고리즘 표현

    public void oN(int[] n) {
        for(int i = 0; i < n.length; i++) {
            System.out.println( n[i] );
        }
    }
 

O(n2): 오엔스퀘어

public void oN2(int[] n) {
        for(int i = 0; i < n.length; i++) {
            
            for(int j = 0; j < n.length; j++) {
                System.out.println(i + j);
            }
            
        }
    }
 

 

O(nM) : 오엔엠

public void oNM(int[] n, int[] m) {
        for(int i = 0; i < n.length; i++) {
            
            for(int j = 0; j < m.length; j++) {
                System.out.println(i + j);
            }
            
        }
    }
 

 

O(n3) :

    public void oN3(int[] n) {
        for(int i = 0; i < n.length; i++) {
            
            for(int j = 0; j < n.length; j++) {
                
                for(int k = 0; k < n.length; k++) {
                    System.out.println(i + j + k);
                }
            }
            
        }
    }
 

 

O(2n)

피보나치

    public int o2N(int n, int[] r) {
        
        if(n <= 0return 0;
        
        else if(n==1return r[n] = 1;
        
        else return r[n] = o2N(n-1,r) + o2N(n-2,r);
        
    }
 

 

O(log n) : 오로그엔(이진검색)

한번 처리가 진행될때마다 검색해야하는 데이터량이 절반씩 줄어드는 알고리즘

    public int oLogN(int k, int[] arr, int s, int e) {
        
        if( s > e ) return -1;
        
        int m = (s+e) /2;
        
        if(arr[m] == k) return m;
        
        else if (arr[m] > k) return oLogN(k,arr,s,m-1);
        
        else return oLogN(k,arr,s,m+1);
        
    }