프로그램 = 자료구조 + 알고리즘
알고리즘
: 컴퓨터로 문제를 풀기 위한 단계적인 절차
- 인간이 읽기 쉽다.
- 자연어의 단어들을 정확하게 정의하지 않으면 의미전달이 모호해질 우려가 있다.
- 직관적, 이해하기 쉬움
- 복잡한 알고리즘의 경우 상당히 복잡해짐
- 알고리즘 기술에 가장 많이 사용
- 프로그램을 구현할 때의 여러 가지 문제들을 감출 수 있다.
- 즉 알고리즘의 핵심적인 내용에만 집중할 수 있다.
- 가장 정확한 기술이 가능
- 실제 구현 시, 많은 구체적인 사항들이 알고리즘의 핵심적인 내용에 대한 이해를 방해할 수 있다.
자료형
데이터의 종류
데이터의 집합과 연산의 집합 (각 자료형마다 연산이 정의되어있다.)
기능(function)들만 기술해놓고, 그것의 내부적 표현이나 구현은 안해놓은 것을 의미
데이터나 연산이 무엇(what)인가는 정의되지만 데이터나 연산을 어떻게(how) 컴퓨터 상에서 구현할 것인지는 정의되지 않는다.
'이 데이터 타입은 이러이러한 객체들(objects)과 이러이러한 함수들(functions)로 구성되어있다'
라는 것을 명시해 놓은것이고
'사용설명서' 같은것이기 때문에 외부에 공개적(public) 입니다.
그렇지만 구현 부분을 나타내지 않기 때문에 내부는 비공개적(private)입니다. (-> 정보 은닉)
이말인 즉슨, 사용자는 사용법만 알면, 내부는 몰라도 그 데이터 타입을 쉽게 쓸 수 있다는 말이 됩니다.
[출처] [자료구조 3강] 추상 데이터 타입(Abstract Data Type)|작성자 서천마을4단지
추상화(abstraction)-> 정보은닉기법(information hiding)-> 추상 자료형(ADT)
추상화란 사용자에게 중요한 정보는 강조되고 반면 중요하지 않은 구현 세부 사항은 제거하는 것
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
clock_t start, stop;
double duration;
start = clock(); // 측정 시작
for (int i = 0; i < 1000000; i++) // 의미 없는 반복 루프
;
stop = clock(); // 측정 종료
duration = (double)(stop - start) / CLOCKS_PER_SEC;
printf("수행시간은 %f초입니다.\n", duration);
return 0;
}![](https://velog.velcdn.com/images/from-minju/post/e8eecbbb-e7c4-487e-846b-eb0d2c5c452f/image.png)
시간 복잡도는 알고리즘을 이루고 있는 연산들이 몇 번이나 수행되는지를 숫자로 표시
알고리즘A의 연산 횟수가 가장 적음.
연산의 횟수를 대략적(점근적)으로 표기한 것
함수의 상한을 표시한다.(최악의 경우)
함수의 하한을 표시한다.(최선의 경우)
함수의 하한인 동시에 상한을 표시한다. (평균적인 경우)
참고)