2023학년 1학기, 자료구조 수업을 수강하면서 배운 내용을 노트 정리 후 간략(?)하게 velog에 올리고자 해당 POST를 작성합니다.
( 교재: C언어로 쉽게 풀어쓴 자료구조 )
프로그램 = 자료구조 + 알고리즘
알고리즘: 컴퓨터로 문제를 풀기 위한 단계적인 절차
ArrayMax(list, N)
1. 배열 list의 첫번째 요소를 변수 tmp에 복사
2. 배열 list의 다음 요소들을 차례대로 tmp와 비교하여
더 크면 tmp로 복사
3. 배열 list의 모든 요소 비교 후 tmp 반환
ArrayMax(list, N):
largest = list[0]
for i=1 to N-1 do
if list[i]>largest
then largest = list[i]
return largest
프로그래밍 언어
알고리즘의 가장 정확한 기술 가능
실제 구현 시, 구체적인 사항들이 알고리즘의 핵심 내용에 대한 이해를 방해할 수 있음
#define MAX_ELEMENTS 100
int score[MAX_ELEMENTS];
int find_max_score(int n){
int i, tmp;
tmp = score[0];
for(int i=1;i<n;i++){
if(score[i]>tmp)
tmp=score[i];
}
return tmp;
}
자료형 : 데이터의 종류
ex) 정수, 실수, 문자열 등
a) 기초 자료형: char, int, double 등
b) 파생 자료형: 배열, 포인터 등
c) 사용자 정의 자료형: 구조체, 공용체, 열거형 등
수행시간 측정
i) 두 알고리즘의 실제 수행시간 분석
ii) 실제로 구현 필요
iii) 동일한 하드웨어를 사용해야 함
복잡도 분석
i) 직접 구현하지 않고 수행시간 분석
ii) 연산횟수 측정 및 비교
iii) 일반적으로 연산 횟수는 n의 함수이다
n의 함수?
수행 횟수는 고정된 상수가 아닌 입력 개수인 n의 비례하여 유동적이므로 n의 함수!
🕜 시간 복잡도 (Time Complexity) : 알고리즘의 수행시간 분석
📚 공간 복잡도 (Space Complexity) : 알고리즘의 기억공간 분석
공간복잡도보다 시간복잡도가 우선시 되어왔지만,
최근 공간 복잡도를 고려하는 것도 중요해 지고 있다.
왜냐면 웨어러블 기기(애플 워치 등)이 널리 사용되면서 공간을 생각해야 함
일반적으로 n과 시간복잡도 T(n)의 관계는 상당히 복잡하다.
하지만 n이 커질 수록 차수가 가장 큰 항이 시간복잡도에 가장 많은 영향을 주므로 보통 T(n)에서 차수가 가장 큰 항만을 고려하면 충분하다.
//예제
f(n) = 3n² +100
3n² +100 <= 5n² (n>9)
=> O(n²)
🚫 주의!
상수항이나 계수가 굉장히 큰 경우, 수행시간에 영향을 끼친다.//예시 //A가 더 효율적인 경우: n>100일 때 A: 3n + 100, O(n) B: 5n², O(n²)
빅오 표기법 그래프: https://iq.opengenus.org/time-complexity-analysis/