728x90
2.2 알고리즘 분석
알고리즘을 실행 시, 필요한 자원 예측
- 메모리
- 통신대역
- 하드웨어
- 계산시간
RAM 모델
- 단일 프로세서 + RAM
- 캐시나 가상메모리는 고려하지 않는다.
- 명령어는 동시에 수행되지 않고 차례로 하나씩 실행된다.
명령어 한 행당 상수시간 소요
- 산술연산(덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 내림, 올림)
- 데이터이동 연산(읽기, 저장하기, 복사하기)
- 제어 연산(조건 분기, 무조건 분기, 함수 호출과 리턴)
입력크기는 수행시간에 비례한다.
- 최악의 경우 : 크기가 n인 입력 중 가장 오래걸리는 수행 시간
- 평균적인 경우 : n개의 숫자 무작위
하지만 무엇이 평균적인 입력인지 불확실한 경우, 랜덤화된 알고리즘을 사용한다.
연습문제
2.2-1
θ(n³)
2.2-2
for s = 1 to A.length
key = A[s]
min_value = n + 1 // 범위를 벗어난 최댓값
for i = s to A.length
if A[i] < min_value
min_value = A[i]
min_value_index = i
A[s] = min_value
A[min_value_index] = key
최선 = 최악 모두, θ(n²)
마지막 n번째 도달했을 경우, for문을 돌아도 A[n] 와 A[n] 교체하는 로직이고 if문에 걸리지도 않아 사실상 아무런 교체가 이루러지지 않는다. 그래서 탐색 범위를 n-1개까지만 해도 무관하다.
2.2-3
2.1-3 나의 풀이
A = <a1, a2, ..., an>
def Search(v)
for i = 1 to A.length:
if A[i] == v
break
return i
return NIL
최악의 경우 θ(n), 최선의 경우 θ(1), 평균적인 경우 θ(n)
2.2-4
최선의 경우 좋은 알고리즘 수행시간을 갖게 하려면?
- if-break문을 이용해 원하는 해답을 찾았을 경우 불필요한 탐색을 줄인다.
- 탐색범위를 좁혀 탐색시간을 줄인다.
'알고리즘 > CLRS' 카테고리의 다른 글
3.1 점근적 표기 (0) | 2023.09.01 |
---|---|
2.3 알고리즘의 설계 (0) | 2023.08.23 |
2.1 삽입 정렬 (0) | 2023.08.07 |
1.2 기술로서의 알고리즘 (0) | 2023.07.27 |
1.1 알고리즘 (0) | 2023.07.20 |