Big O

2022. 6. 2. 22:38·알고리즘(Algorithm)
728x90
반응형

여러가지 코드를 일반적으로 서로 비교하고 성능을 평가하는 방법

시간복잡도,공간복잡도에 대한 높은 이해

하드웨어에 영향을 받지 않음

정확한걸 따지지 않고 전체적으로 따짐 (1000n이던 10n 이던 결국 n)

 

더 좋은 코드

  • 빠른가?
  • 메모리 사용이 적은가?
  • 코드가 읽기 쉬운가?

 

예시 2가지

Big O : O(n)
function exBigO(n){
    let total=0;
    for (const i=0;i<=n;i++){
    	total+=i;
    }
  return total;
}

Big O : O(1)
function exTwoBigO(n){
    return n*(n+1)/2
}

exBigO 와 exTwoBigO를 비교해봤을 때 exTwoBigO가 더 빠르다.

n의 값이 100000,10000000 ... 이런식으로 입력되게 된다면 exBigO는 n에 따라서 반복문의 횟수가 결정되고

그에 따라서 i값도 증가되면서 total에 더해지게 되는 구조를 가지고 있다. (10n+2 이런식)

 

Big O 정의

 

알고리즘은 O(f(n))이라는 표현을 사용하고 여기서 f는 function이다.

 

f(n) = n 선형적구조 -> n의 값이 커질수록 실행시간이 늘어남 O(n) 

[#] O(n) 식이 2개이상 있어도 O(n)으로 표현한다.  O(2n) or O(1000n+50) -> O(n)

ex) for 문이 2개 따로 있을 때

 

f(n) = n^2  제곱 O(n²)

[#] O(n)식이 중첩되어 있을때 O(13n²) -> O(n²)

ex) for 문이 중첩되어 있을 때 

 

f(n) =1 상수 -> n이 커져도 아무영향을 받지 않음 O(1)

[#] O(40000) -> O(1)

...등등 다른 f(n)은 차차 소개하겠다.

 

 

 

공간복잡도

위에서 다뤘던 시간 복잡도와 달리 공간 복잡도는 간단하게 변수의 공간에 영향을 받는다고 생각하면된다.

아래 예시를 보면 let i=0는 O(1)의 공간복잡도를 가지고 let co=[]는 O(n)의 공간복잡도를 가진다.

 

원시형 O(1)
function hi(n){
	for(let i=0;i<=n;i++){
    	console.log(i)
    }
}


String,참조형 O(n)
function hi(n){
	let co=[];
    ~~
}

 

 

객체의 Big O

let person={
 name='sty',
 age='12',
 number='+10'
}

입력 || 제거 || 접근 - O(1)

 

-탐색-

Object.keys  - O(N)

key값이 늘어남에 따라 n 값도 증가하는 구조

Object.values - O(N)

value값이 늘어남에 따라 n 값도 증가하는 구조

Object.entries - O(N)

key와 value의 쌍이 늘어남에 따라 n값도 증가

hasOwnProperty - O(1)

True or False로 확인만 함

 

배열의 Big O

탐색 - O(N)

접근 - O(1)

삽입과 정렬은 어떤 메소드를 사용하느냐에 따라 달려있다 ( push, shift, slice 등등)

 

[참고]

https://careerkarma.com/blog/big-o-notation-time/

 

Big O Notation - Time Complexity

Take a deep dive into time complexity with this article on Big O Notation to learn what Big O is and how to figure it out.

careerkarma.com

 

728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

단일 연결 리스트  (1) 2022.08.08
문제 해결 패턴  (1) 2022.06.22
백준 2869번 : 달팽이는 올라가고 싶다  (0) 2022.05.25
Tree - 트리  (0) 2022.05.16
백준 1259번 : 팰린드롬 수  (0) 2022.05.06
'알고리즘(Algorithm)' 카테고리의 다른 글
  • 단일 연결 리스트
  • 문제 해결 패턴
  • 백준 2869번 : 달팽이는 올라가고 싶다
  • Tree - 트리
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (128)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (42)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Javascript
      자바스크립트
      알고리즘
      JS #JavaScript #프로그래머스 #알고리즘
      알고리즘 #Algorithm
      Programmers
      JavaScript #Set #Collection
      리눅스
      리눅스 #입문
      JS #JavaScript #프로그래머스 #카카오
      자바스크립트 #연습문제
      JS #클래스
      JS #정규표현식
      JS #javascript #객체 #Object
      고득점 Kit
      프로그래머스 #자바스크립트 #JS
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      JS #프로그래머스 #숫자의표현 #알고리즘
      Python #알고리즘
      Vue #Vue.js #정리
      SQL
      LeetCode #JS #Javascript #Algorithm
      c++
      BaekJoon
      Algorithm
      파이썬 #입력 #python #input
      오블완
      티스토리챌린지
      async await #js #문법 #자바스크립트 #비동기
      프로그래머스
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    Big O
    상단으로

    티스토리툴바

    티스토리툴바