티스토리 뷰
공간복잡도와 시간복잡도
- 공간자원
공간 자원이란 컴퓨터 시스템에서 데이터를 저장하고 처리하기 위해 사용되는 메모리 및 저장 공간을 의미한다 컴퓨터에서 프로그램을 실행하거나 데이터를 처리할 때는 다양한 종류의 메모리와 저장 장치가 필요하며 이러한 요소들이 공간 자원에 해당된다 공간 자원의 효율적인 관리는 프로그램의 성능과 실행 가능성에 중대한 영향을 미친다
공간 자원의 종류
주 메모리(Main Memory)
RAM(Random Access Memory)으로도 알려져 있으며, CPU가 직접 접근할 수 있는 메모리다 실행 중인 프로그램과 현재 처리 중인 데이터가 저장된다 주 메모리는 빠른 접근 속도를 가지지만 전원이 꺼지면 저장된 정보가 사라지는 휘발성 특성이 있다
보조 저장 장치(Secondary Storage)
하드 드라이브(HDD) 솔리드 스테이트 드라이브(SSD) 외장 메모리 등이 여기에 해당된다 이들은 주 메모리보다 느린 접근 속도를 가지지만 전원이 꺼져도 데이터가 유지되는 비휘발성 특성을 가진다
캐시 메모리(Cache Memory)
CPU와 주 메모리 사이에 위치하며 자주 사용되는 데이터와 명령어를 빠르게 접근할 수 있도록 저장한다 캐시 메모리를 사용함으로써 시스템의 전반적인 성능을 향상시킬 수 있다
레지스터(Register)
CPU 내부에 위치하며 명령어의 실행에 필요한 데이터나 주소를 임시로 저장한다 레지스터는 매우 제한된 용량을 가지지만 메모리 중에서 가장 빠른 접근 속도를 자랑한다
- 공간 복잡도
공간 복잡도는 알고리즘이나 프로그램을 실행하기 위해 필요한 총 공간 자원의 양을 나타내는 척도이다 이는 알고리즘이 사용하는 변수, 자료구조, 스택 공간 등 모든 메모리 사용량을 포함하여 평가된다 공간 복잡도를 분석함으로써 프로그램이나 알고리즘이 실행될 때 요구되는 최대 메모리 양을 예측할 수 있으며 특히 메모리 리소스가 제한적인 환경에서 중요한 고려 사항이 있다
프로그램이나 알고리즘을 설계할 때는 공간 자원의 제약을 고려하여 가능한 한 적은 메모리를 사용하면서도 요구 사항을 만족시키는 방향으로 최적화하는 것이 중요하다 이를 위해 공간 복잡도를 낮추는 기법들 예를 들어 데이터 압축, 메모리 재사용, 효율적인 자료구조 선택 등을 적극적으로 활용하는 것이 좋다
- 시간복잡도
시간복잡도는 알고리즘이 문제를 해결하는 데 소요되는 시간의 양을 측정하는 척도이다 이는 알고리즘의 효율성을 평가하는 중요한 기준 중 하나로 알고리즘이 처리해야 할 데이터의 크기에 따라 실행 시간이 어떻게 변화하는지를 나타낸다 시간복잡도는 대개 빅 오 표기법(Big O notation)을 사용하여 표현되며, 이는 최악의 경우(worst-case scenario)에서의 성능을 나타내는 경우가 일반적이다
빅 오 표기법(Big O Notation)
빅 오 표기법은 알고리즘의 시간복잡도를 나타내는 데 사용되는 수학적 표기법이다 이는 입력 데이터의 크기(n)가 무한히 커질 때, 알고리즘의 실행 시간이 어떻게 증가하는지를 설명한다 예를 들어 O(n)은 알고리즘의 실행 시간이 입력 데이터의 크기에 직접 비례하여 증가함을 의미하며, O(log n)은 실행 시간이 데이터 크기의 로그에 비례하여 증가함을 나타낸다
시간복잡도의 분류
- 상수 시간(Constant Time): O(1). 알고리즘의 실행 시간이 입력 데이터의 크기와 무관하게 일정
- 로그 시간(Logarithmic Time): O(log n). 이진 검색이 대표적인 예시
- 선형 시간(Linear Time): O(n). 데이터의 크기에 비례하여 시간이 증가한다 예를 들어, 배열을 순차적으로 검색하는 경우
- 선형 로그 시간(Linear Logarithmic Time): O(n log n). 많은 효율적인 정렬 알고리즘이 이 범주에 속한다
- 이차 시간(Quadratic Time): O(n^2). 데이터의 크기에 따라 시간이 제곱으로 증가한다 버블 정렬이 이에 해당
- 지수 시간(Exponential Time): O(2^n). 알고리즘의 실행 시간이 데이터 크기에 따라 지수적으로 증가한다
- 계승 시간(Factorial Time): O(n!). 계승적으로 시간이 증가한다 일부 문제를 해결하는 브루트 포스(brute force) 알고리즘에서 발생할 수 있다
시간복잡도의 중요성
- 성능 예측: 시간복잡도를 통해 알고리즘의 실행 시간을 예측할 수 있으며, 이를 바탕으로 가장 효율적인 알고리즘을 선택할 수 있다
- 리소스 관리: 시스템의 리소스가 한정되어 있을 때 시간복잡도 분석을 통해 리소스 사용을 최적화할 수 있다
- 알고리즘 비교: 서로 다른 알고리즘을 비교하고 분석할 때 시간복잡도는 중요한 비교 기준이 된다
'내일배움캠프 개발자과정 > TIL' 카테고리의 다른 글
내일배움캠프 41일차 TIL (0) | 2024.04.11 |
---|---|
내일배움캠프 40일차 TIL (0) | 2024.04.09 |
내일배움캠프 38일차 TIL (0) | 2024.04.05 |
내일배움캠프 37일차 TIL (0) | 2024.04.05 |
내일배움캠프 36일차 TIL (0) | 2024.04.03 |