6. amugona2015
추상적 ↔ 구체적
Abstraction
추상화
6
상수 10은 여기서 이렇게 표시되며 변수 x는
저렇게 구현되며 치환연산은 요렇게 처리된다 int x = 10;
1)http://www.ipnomics.co.kr/wp-content/uploads/
2)http://techholic.co.kr/archives/11390
1 2
7. amugona2015
Abstraction
문제를 해결하는 과정에서의 abstraction의 예
문제의 해결 단계
• 세상 모든 문
제는 비슷비슷
• 추상은 인간지
향적, 기계독립
적 줄을 선다
• 은행에 저금하러 간 엄마
• 한정판 게임기를 사러 매장에 간 덕후
• 시분할처리환경의 프로그램 작업들
• 통신용 버퍼의 패킷
추상화
Queue
공통점
문제
what
처리대상
how
처리방법
data
algorithm
program 해결
abstraction 문제변환
7
8. amugona2015
Abstraction 종류
data abstraction
○data의 종류마다 그 처리방식을 달리 해주는 것
operation abstraction
○실제 data에 가해진 operation이 내부적으로는 어떻게 수행
되는지 알 필요가 없음
algorithm abstraction
○algorithm의 세세하고 지엽적인 특성은 무시하고 핵심만을
간추려 놓은 것
8
9. amugona2015
Data structures
data type
○정의
■ data object의 집합과 operation집합
○구분
■ scalar data type(=elementary data type)
□ int, float, char 등으로 선언
■ structured data type
□ data type들의 집합(필드)으로 구성된 영역
□ int arr[10]={1,2,3…}등으로 선언
9
10. amugona2015
Data structures
data structure
○정의
■ 일종의 structured data type으로, data의 개념적 형태
○종류
• data를
abstraction한
결과
simple
• string
• array
• record
linear
• stack
• queue
• list
non-linear
• graph
• tree
• binary tree
• special tree
10
11. amugona2015
Algorithm
algorithm의 정의
○어떤 특정 문제를 해결하기 위한 명령어들의 유한 집합
programs = data structures + algorithms
○algorithm의 작성은 data가 저장되는 방법과 구조에 의존
algorithms의 조건
○input
○output
○definiteness
○finiteness
○effectiveness
11
13. amugona2015
Algorithm의 분석
판단 기준
○correctness
■ 올바른 input에 대해 유한 시간 내 옳은 답을 내는가
○amount of work done
■ algorithm에 의해 수행되는 일의 양
■ average behavior
■ worst-case
○amount of space used
■ algorithm 수행 시 필요한 기억 공간의 사용량
○simplicity/clarity
■ algorithm의 작성이 쉽고 간결하며 해독성이 높은가
○optimality
■ 실행시간의 평균=최악의 경우
13
15. amugona2015
Algorithm의 분석
sequential search의 correctness 증명
○input: L, n, x(L은 n개의 원소로 된 배열)
○output: index
증명) mathematical induction으로 다음을 증명하고자 한다.
• 이 알고리즘이
수행하고자 하
는 것
• 수학적 귀납법
으로 증명
• 프로그램의 정
확성을 엄격하
게 증명하고자
할 때
index=0;
while(index < n && L[index] != x)
index++;
if(index==n) then index=-1;
1
2
3
4
0≤k≤n의 범위를 갖는 k에 대해, 2라인의 k번째 도달했을 때에는
index=k-1이고, 0≤i<k에 대해 L[i]≠k이다.
15
16. amugona2015
Algorithm의 분석
amount of work done 측정하기
? 측정방법으로 적절한 것은
■ 알고리즘의 실제 실행 시간(X)
□ 컴퓨터에 따라 달라짐
■ 프로그램에 의해 실행되는 명령어들의 개수(X)
□ PL과 프로그래머에 따라 달라짐
■ 알고리즘의 중요 연산들(O)
□ 전체 연산 개수와 중요 연산 개수가 어느 정도 비례한다면 좋은 판단
기준이 될 수 있음
16
17. amugona2015
Algorithm의 분석
○입력 자료의 양과 형태에 따라 달라짐
■ average behavior
□ 𝐷 𝑛 : 어떤 문제 해결을 위한 크기 n인 입력들의 집합
□ 𝐼 : 𝐷 𝑛의 원소
□ 𝑝 𝐼 : 𝐼가 발생할 확률
□ 𝑡(𝐼) : 입력 𝐼에 대해 알고리즘 수행 시 중요 연산 개수
■ worst-case
𝐴 𝑛 =
𝐼∈𝐷 𝑛
𝑝 𝐼 𝑡(𝐼)
𝑊 𝑛 = max
𝐼∈𝐷 𝑛
𝑡(𝐼)
17
18. amugona2015
Algorithm의 분석
sequential search algorithm의 worst-case와 average
behavior 분석
○L은 n개의 원소가 들어가는 배열이다. 배열에서 x를 찾으면
그 위치를 찾고, x가 배열에 없으면 -1을 출력하라.
? 중요 연산
? 𝑊 𝑛
? 𝐴 𝑛
18
19. amugona2015
Algorithm의 분석
행렬의 곱의 worst-case와 average behavior 분석
○A=(𝑎𝑖𝑗), B=(𝑏𝑖𝑗)인 실수 원소의 𝑛 × 𝑛 행렬, C=AB는?
? 중요 연산
? 𝑊 𝑛
? 𝐴 𝑛
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=0;
for(k=0;k<n;k++){
c[i][j] += a[i][k]*b[k][j];
}
}
}
1
2
3
4
5
6
7
8
𝑐𝑖𝑗 =
𝑘=1
𝑛
𝑎𝑖𝑘 𝑏𝑖𝑘 (1 ≤ 𝑖, 𝑖 ≤ 𝑛)
행렬의 곱 정의
19
20. amugona2015
Algorithm의 복잡도
정의
○ 작성된 algorithm의 effectiveness 정도를 나타내는 기준
시간 복잡도
○ 주어진 문제 해결을 위한 algorithm 수행 시 사용되는 기본연산의
빈도수를 차수로 표현한 것
○ Ο표시법
■ 연산 차수가 가장 높은 것을 택하여 나타냄
○ Ω표시법
■ 연산차수가 가장 낮은 것을 택하여 나타냄
공간 복잡도
○ algorithm을 비교 시 기억장소를 특정단위로 나눈 후 어떤
algorithm이 몇 개의 기억장소영역을 차지하는가를 측정하여 나
타냄
20
21. amugona2015
String
정의
○일련의 문자
사용
○언어학적 분석/수행을 위해 컴퓨터에 전해지는 프로그램의
기본 매개체
○문서편집기, 문서처리시스템에 의해 조작되는 문서의 기본
매개체
○CPU와 주변 장치간 IO transaction에서 data 교환을 위한 주
요 매개체
○PL에서 label이나 identifier나 procedure의 이름으로 사용,
저장, 출력, 조작되는 데이터로 사용
○항목 명명, 저장된 값 나타내기 위해 테이블 내에 사용
• identifier
• keyword
21
27. amugona2015
2차원 배열
m*n의 배열
2차원 배열 표현 방법
○ 𝐴 𝑝: 𝑚, 𝑞: 𝑛 = 𝐴 𝑖, 𝑗 𝑖 = 1, … , 𝑚 그리고 𝑗 = 1, … , 𝑛}
○원소의 수 = (𝑚 − 𝑝 + 1) × 𝑛 − 𝑞 + 1 개
q
p
q+1 n
p+1
m
…
…
벡터의 길이
벡
터
의
수
27
28. amugona2015
Stack
정의
○특별한 형태의 linear list로, memory에 data를 일시적으로
쌓아두었다 필요 시 꺼내 사용할 수 있도록 main memory나
register의 일부를 할당하여 사용하는 임시적 memory
특징
○list내의 data 삽입과 삭제가 한쪽 끝(top)에서만 일어남
○LIFO
응용분야
○수식 계산, subroutine call, 순환미로실험, push-down
automata, quick sort …
28
• linear list: 순
서가 정해진
data의 모임
• pushdown list,
LIFO list
31. amugona2015
Queue
정의
○한쪽 끝에서 data 삭제, 다른 한쪽 끝에서 data 삽입되는
linear list
특징
○삭제되는 한쪽 끝(front)와 삽입되는 한쪽 끝(rear)
○FIFO
연산
○front(Q)
○rear(Q)
○noel(Q)
31
34. amugona2015
Double ended queue(deque)
정의
○삽입과 삭제가 양쪽 끝에서 모두 허용될 수 있는 linear list
queue의 일반화
특징
○stack과 queue를 하나의 linear list에 복합시킨 형태
표현
○stack
○1차원 array
○singly linked list
○doubly linked list
34
36. amugona2015
List
linear list
○ array와 같이 연속된 기억 장소에 저장되는 list
○ 특징
■ sequential mapping으로 pointer 불필요
■ 단순한 구조, memory density 높음
■ insert, delete 시 data이동 많음
linked list
○ 정의
■ list의 각 항목들은 다음 항목의 주소에 대한 포인터를 가짐
○ 특징
■ non-sequential mapping
■ node=data+link
○ 응용
■ 다항식의 덧셈
■ 희소 행렬
36
37. amugona2015
Circular linked list
정의
○마지막 node의 포인터를 NULL이 아닌 첫 번째 node의 주소
를 가리키도록 구성한 list
응용
○buffer 영역
○terminal service의 round robin
37
• linear list
• sequential
mapping
• linked list
• non-
sequential
mapping
• header
pointer
• linked list
의 시작 위
치를 알려
줌
• node
• list의 한 항
목
• data+link
a1 a2 a3 a4
header
38. amugona2015
Doubly linked list
정의
○다음 node와 이전 node를 알 수 있도록 하여 양방향 탐색이
가능한 list
특징
○연결 부분을 두 개로 하여 효율적인 list 운영
○각 node는 2개의 pointer를 포함
■ rlink: 오른쪽 방향 나타내는(after node를 가리키는) pointer
■ llink: 왼쪽 방향을 나타내는(before node를 가리키는) pointer
38
• circular linked
list의 단점
• list를 뒤로
순회할 수
없음
• 삭제하려는
node의 포
인터만으로
삭제 못함
a1 a2 a3 a4
header
39. amugona2015
Doubly linked circular list
정의
○doubly linked list의 왼쪽 끝 node의 llink는 오른쪽 끝 node
를 가리키고, 오른쪽 끝 node의 rlink는 왼쪽 끝 node를 가
리키며, 여기에 head node를 가짐
39
• 양방향 탐색가
능
a1 a2 a3 a4
header
a1 a2 a3 a4
head node
-
사람이 쉽게 이해하고 이용할 수 있는 data structure와, 이를 대상으로 구현될 프로그램의 논리인 algorithm이 정확하고 효율적이어야 한다.
algorithm과 data structure는 밀접한 관계를 가지며, 서로 어느 한쪽이 없이는 이해할 수 없다.
abstraction의 목적은? 인간에게 편리성을 제공하기 위함이다
현실세계에서 문제를 도출하여 무엇을 어떻게 해결할 것인가를 알아야함
처리대상을 data로 규정하고, 처리방법을 알고리즘으로 규정하여 프로그램을 작성하면
컴퓨터는 프로그램을 실행하고 문제를 해결하게 된다
문제를 정확하게, 그리고 효율적으로 해결하기 위해서는, 처리대상인 data와 처리방법인 알고리즘을 정확하고 효율적으로 규정해야 한다
abstraction를 통하여 어떤 문제에 대한 개념적인 해결방법을 모색하고 그것을 다양한 구체적인 예에 적용할 수 있다
자연어로 알고리즘을 표현하면 모호성으로 명확성definiteness이 유지되기 어려움
flow chart는 인간 이해 용이, pseudo code는 코딩 용이
알고리즘 분석의 중점은 실행시간, 기억장소
head node의 llink는 오른끝노드, rlink는 왼끝노드를 가리키도록 구성된다
header pointer는 linked list의 첫노드를 가리킴
head node의 llink는 dlcl를 왼->오의 방향으로 고려할때의 header pointe가 되고, rlink는 dlcl의 오->왼의 방향으로 고려할때의 header pointer가 됨
왼끝노드의 llink와 오끝노드의 rlink가 head node를 가리키도록 함으로써 어느 방향으로 list를 고려하든 끝노드 확인 가능
그래프 이론을 사용하는 가장 큰 이유는 그래프 구조가 복잡한 실세계에 대한 추상적 모델을 제공함
추상적 모델은 실세계의 문제에 대한 구조를 상세하게 구현할 필요 없이 쉽게 데이터 구조를 논할 수 있게 함