danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • Database
  • Thymeleaf
  • Java
  • DDD
  • Security
  • connection
  • docker
  • Saving Plans
  • S3
  • 자바 최적화
  • 마이크로서비스패턴
  • gitlab
  • JPA
  • nuribank
  • PostgreSQL
  • Kotlin
  • Bitmask
  • 도메인 주도 설계
  • SWAGGER
  • Jackson
  • 트랜잭션
  • AWS
  • 등가속도 운동
  • reactive
  • RDS
  • ChatGPT
  • CICD
  • Spring
  • POSTGIS
  • mockito

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

algorithm/theory

복잡도

2021. 1. 4. 20:59

복잡도는 알고리즘의 성능을 나타내는 척도이다. 복잡도는 시간 복잡도와 공간 복잡도로 나눌 수 있다.

 

시간 복잡도

특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지를 의미한다.

일반적으로 코딩테스트 환경에서 O(n3)을 넘어가면 문제 풀이에서 사용하기 어렵다

(c 기준 n의 크기가 5000이 넘어가면 10초 이상의 시간 소요)

 

다음은 모두 시간 제한이 1초인 문제에 대한 예시이다.

N의 범위가 500인 경우 : O(n3)인 알고리즘을 설계하면 문제를 풀 수 있다.

N의 범위가 5,000인 경우 : O(n2)인 알고리즘을 설계하면 문제를 풀 수 있다.

N의 범위가 1,000,000인 경우 : O(nlogn)인 알고리즘을 설계하면 문제를 풀 수 있다.

N의 범위가 10,000,000인 경우 : O(n)인 알고리즘을 설계하면 문제를 풀 수 있다.


-> N의 범위와 시간제한을 확인하고 문제를 설계하자. 대략 2천만번에 1초가 소요된다고 가정

 

공간 복잡도

특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미한다.

코딩 테스트에서는 보통 메모리 사용량을 128~512MB 정도로 제한한다. 다시 말해 일반적인 경우 데이터의 개수가 1,000만 단위가 넘어가지 않도록 알고리즘을 설계한다.

파이썬의 경우 역시 대략 100만개 이상의 데이터가 들어갈 수 있는 크기의 리스트를 선언하는 경우는 적다.

 

시간 측정

파이썬에서 메모리 측정은 다음과 같다.

```

import time

start_time=time.time() # 측정 시작

 

# 프로그램 소스코드

end_tiime=time.time() # 측정 종료

print("time : ", end_time - start_time) # 수행 시간 출력

```

tip : 파이썬의 기본 정렬 라이브러리(array.sort())는 최악의 경우 O(nlogn)을 보장하여 선택정렬(O(n2))에 비해 상대적으로 빠르다.

'algorithm > theory' 카테고리의 다른 글

이진 탐색  (0) 2021.01.21
정렬  (0) 2021.01.20
DFS/BFS  (0) 2021.01.11
구현  (0) 2021.01.05
그리디  (0) 2021.01.04
    'algorithm/theory' 카테고리의 다른 글
    • 정렬
    • DFS/BFS
    • 구현
    • 그리디
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바