시간복잡도, 공간복잡도, 점근표기법, 알고리즘 처음 풀 때 중요한 것

박다영·2022년 11월 9일
0

매일의 개발기록

목록 보기
7/28

[시간복잡도, 공간복잡도, 점근표기법]

시간복잡도가 공간복잡도보다 훨~씬 중요하다.
for문의 중첩(제곱)이 많을수록 계산 시간이 길어진다.
알고리즘의 효율성은 최악의 경우인 빅오 표기법으로 판단한다.

.
.

[시간복잡도 vs 공간복잡도]

'시간복잡도'는 연산에 걸리는 시간,
'공간복잡도'는 코드가 차지하는 공간 이라고 생각하면 되는데
계산량에 영향을 미치는 것은 '시간 복잡도'로, 훨씬 중요하다.

일단 입력 값 (변동 가능성이 있는 값) N 을 기준으로 모든게 계산된다.

for문 은 ( x N )
if 비교 연산은 ( +1 )
나머지 대입연산은 ( +1 ) 으로 계산되됨.

for num in array:
    for compare_num in array
    	if num < compare_num:
                break

상수는 입력 값 N 증가에 따른 영향이 거의 없기 때문에
'제곱'이 얼마나 들어가는지가 중요하며,
따라서 for문의 중첩이 많을수록 시간복잡도가 올라간다.

N = 10000 일때,
3N = 30000
N의 3승 = 1000000000000
제곱이 있으면, N의 값이 늘어날수록 계산시간이 기하급수적으로 늘어남

시간복잡도의 값이 상수 X N 의 경우
상수는 무시하고 시간복잡도가 N 만큼인 함수라고 분석한다.
(ex. O(10N) = O(N) )

.
.

[점근표기법 : 빅 오 vs 빅 오메가]

점근 표기법은 알고리즘의 효율성을 표기하는 방법으로
최선의 성능이 나올때의 연산량인 빅오메가 Ω(n),
최악의 성능이 나올때의 연산량인 빅오 O(N)로 나뉜다.

N의 값에 따라, 원하는 결과값이 일찍 나오면 한번만에도 계산이 끝나지만,
그렇지 않으면 모든 계산식을 돌리고 마지막에 가서야 결과값이 나올 수도 있다.
때문에 최악의 경우를 대비하기 위해 빅오 O(N) 로 알고리즘을 분석한다.

input = [3, 5, 6, 1, 2, 4]
.
def is_number_exist(number, array):
    for num in array:
        if num == number:
            return True
    return False
.
result = is_number_exist(a, input)
print(result)

위의 계산식은 a가 3일 경우 1번만에 계산이 끝나지만,
a가 4일 경우 6번째에 계산이 끝난다.

.
.


[오늘의 배움]

알고리즘 처음 공부 중..
내 생각에 알고리즘에서 가장 중요한 건 정확한 변수 설정이다.
내가 원하는 최종 값을 얻기 위해 필요한 중간 값들을 잘 뽑아내고
그것을 변수로 만드는 것만 잘해도 반은 먹고 들어간다.

profile
개발과 디자인 두마리 토끼를!

1개의 댓글

comment-user-thumbnail
2022년 11월 10일

알고리즘은 정말 꾸준함이 답인것같아요 ㅎㅎ 화이팅!

답글 달기