강사: 주형준([email protected], 010-6317-0101) 전자계산기 일반 4장 자료구조와 알고리즘 자료구조 개요  자료구조란?  컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처 리하느냐와 관련된 방법론을 다루는 분야  선형.

Download Report

Transcript 강사: 주형준([email protected], 010-6317-0101) 전자계산기 일반 4장 자료구조와 알고리즘 자료구조 개요  자료구조란?  컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처 리하느냐와 관련된 방법론을 다루는 분야  선형.

Slide 1

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 2

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 3

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 4

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 5

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 6

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 7

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 8

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 9

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 10

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 11

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 12

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 13

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 14

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 15

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 16

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 17

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 18

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 19

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 20

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 21

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 22

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 23

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 24

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 25

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 26

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 27

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 28

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29


Slide 29

강사: 주형준([email protected], 010-6317-0101)

전자계산기 일반
4장 자료구조와 알고리즘

자료구조 개요
 자료구조란?
 컴퓨터 내에 자료를 어떻게 효율적으로 구성시켜 처
리하느냐와 관련된 방법론을 다루는 분야
 선형 구조
 배열, 리스트, 스택, 큐, …

 비선형 구조
 트리, 그래프

 알고리즘은?
 어떤 문제를 해결하는 방법을 다루는 분야

2

자료의 표현
 기본 개념
 Bit, Byte, Word
 진법: 2진법, 8진법, 16진법
 수의 표현
 고정소숫점 표현, 부동소숫점 표현
 문자의 표현
 ASCII , Unicode, EBCDIC, BCD

3

배열
 배열의 개념
 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수
로 묶어놓은 집합체
 메모리에 연속적인 기억공간이 필요하다.

 1차원 배열
A[l]

A[l+1]

A[l+2]

A[l+3]



A[u]

 A[l:u] - l:시작 첨자, u:마지막 첨자

4

 다차원 배열: 2차원, 3차원, …
 2차원 배열: [행,열]
A[l,m]

A[l,m+1]

A[l+1, m]

A[l+1, m+1]





 다차원 배열도 메모리에 1차원으로 기억

 행우선 순서 ① ② ③ ④ ⑤ …
 열우선 순서 ① ④ ⑦ ② ⑤ …


















5

희소 행렬
 희소행렬이란?
 행렬에서 0의 값이 상대적으로 많은 행렬
 기억공간을 절약해서 표현할 수 있다.
0

20 0

0

9

0

11

0

0

0

0

0

0

0

78 0

0

0

0

0

0

0

0

0

67 0

0

0

0

31

0

0

0

0

0

0

0

91 0

0

41 0

6

리스트
 선형 리스트(linear list) 또는 순서 리스트(ordered list)
 1개 이상의 원소들이 순서를 가지고 구성되는 것
 배열은 대표적인 선형구조이다.
 삽입, 삭제 시 전체 원소가 이동된다.

 연결 리스트
 각 항목(노드)은 인접하지 않아도 된다.
 노드는 데이터와 링크로 구성된다.
 링크에는 다음 노드의 포인터가 저장되어 있다.

 컴퓨터 내부의 저장공간을 효율적으로 사용할 수 있다.
 삽입, 삭제가 간단하다.

7

연결리스트 종류

8

스택과 큐, 데크
 스택(stack)
 LIFO(List-In First-Out, 후입선출)
 마지막에 입력된 자료가 가장 먼저 제거되는 자료구

 한쪽 끝(top)에서 삽입과 삭제가 이루어 지는 구조
 연산:
 pop: 스택에서 데이터를
제거하는 연산
 push: 스택에 데이터를
삽입하는 연산

9

스택
 스택의 응용 분야
 서브루틴 호출, 인터럽트, 수식 계산, 재귀호출

10


 큐(queue)
 FIFO(First-In Firtst-Out, 선입선출)
 가장 먼저 삽입된 자료가 가장 먼저 제거되는 구조
 Rear: 삽입되는 쪽
 Front: 삭제되는 쪽

 예)
 줄을 서서 택시를 기다리는 모습
 은행의 업무 처리
 운영체제의 작업 스케쥴링

11

데크
 데크(dequeue)
 스택과 큐를 혼합한 형태
 2중 큐(double ended queue)
 양쪽 끝 모두에서 삽입과 삭제이 이루어 지는 구조

12

트리
 트리
 데이터 사이의 관계가 트리 모양을 갖는 구조이다.
 비선형 구조에 속한다.
 다양한 분야에 활용된다: 삽입, 삭제, 검색(탐색), 정렬, 수









식 표현, …
노드(node)라 불리는 각 항목과 가지(branch)로 구성
최상위의 노드를 루트(root)노드라 부른다.
각 노드에 연결된 가지수를 차수(degree)라 한다.
트리의 차수란 각 노드의 차수중에서 최대 차수이다.
단말 노드(terminal node): 노드의 차수가 0인 노드
부모 노드(parent node), 자식 노드(child node)
조상(ancestor, 선조) 노드, 후손(descendant)
형제 노드(sibling node)

13

트리
 레벨(level): 루트노드로부터의 거리

 루트의 레벨은 0이다.
 트리의 깊이(depth)(또는 높이(height))
 가장 긴 경로의 레벨에 1을 더한 값

 서브 트리(subtree)
 루트노드 아래에 있는 연결된 구조
 숲(forest):
 루트 노드를 제거해서 얻을 수 있는 트리의 집합

14

트리

15

이진 트리
 이진 트리(binary tree)
 트리의 차수가 2 이하인 트리

 포화 이진 트리(perfect binary tree)
 깊이 k인 이진 트리의 최대 노드수가 2k-1을 만족하는 트리

 완전 이진 트리(complete binary tree)
 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는

왼쪽부터 오른쪽으로 빈자리 없이 채워진 형태의 트리

16

트리의 운행(순회)
 전위 순회(preorder)
 루트 왼쪽 서브트리 오른쪽 서브트리
 중위 순회(inorder)
 왼쪽 서브트리 루트오른쪽 서브트리

 후위 순회(postorder)
 왼쪽 서브트리 오른쪽 서브트리루트

17

 18.다음 트리에 대한 INORDER 운행 결과는?
[2011.6.12]
가. A B D C E F 나. D B A E C F
다. D B E C F A 라. A B C D E F
Preorder: ABDCEF
Inorder: DBAECF
Postorder: DBEFCA

18

 히프 트리(heap tree)
 완전 이진트리이다.
 최대값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 크거나 같다.
 최소값 히프 트리
 각 노드의 값은 그 자식의 노드의 값보다 작거나 같다.

19

그래프
 그래프(graph)
 그래프 G는 정점(vertex)과 유한집합 V와 쌍을 연결하는 간

선들의 유한집합 E로 구성되며, G=(V,E)
 방향 그래프/무방향 그래프

 E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
 E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

20

 그래프의 순회
 모든 정점을 체계적으로 방문하는 것
 깊이 우선 탐색
 시작 정점을 방문한다.
 정점1과 인접한 방문하지 않은 정점을 방문한다.
 인접한 정점이 없으면, 마지막 정점으로 돌아가서 방문
하지 않는 정점부터 다시 탐색을 수행한다.
 스택 이용해서 구현
 너비 우선 탐색
 방문하지 않은 정점 중에서 가장 오래된 것부터 방문
 큐를 이용해서 구현
21

 그래프의 순회
 깊이 우선 탐색
 시작정점 1을 방문 1과 연결된 2,3중 1개를 방문
 연결된 정점을 차례로 방문,
 인접한 정점이 없으면, 이전에 마지막으로 방문했던
정점으로 돌아가서, 방문하지 않는 정점을 방문,
(stack 사용)
  1,2,4,5,7,6,3
 너비 우선 탐색
 방문하지 않는 정점중에서 가장 오래된 것부터 방문(큐
사용)

 1,2,3,4,5,6,7
22

정렬
 정렬(sort)
 데이터를 일정한 기준에 따라 재배열하는 것
 내부 정렬(internal sort)
 주기억장치를 이용하는 방법
 선택정렬(selection sort), 버블정렬,삽입정렬,퀵정렬,…
 외부 정렬(external sort)
 보조기억장치를 이용해서 정렬하는 방법

23

선택 정렬
 선택 정렬(selection sort)
 n-1회 반복(n은 자료 개수)
초기상태

54

34

41

89

67

16

52

23

1회전

16

34

41

89

67

54

52

23

2회전

16

23

41

89

67

54

52

34

3회전

16

23

34

89

67

54

52

41

4회전

16

23

34

41

67

54

52

89

5회전

16

23

34

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

24

 버블 정렬(bubble sort)
 왼쪽부터 서로 이웃한 두 값을 비교하고, 교환하면서
정렬하는 방식
 n-1회전
초기상태

54

34

41

89

67

16

52

23

1회전

34

41

54

67

16

52

23

89

2회전

34

41

54

16

52

23

67

89

3회전

34

41

16

52

23

54

67

89

4회전

34

16

41

23

52

54

67

89

5회전

16

34

23

41

52

54

67

89

6회전

16

23

34

41

52

54

67

89

7회전

16

23

34

41

52

54

67

89

25

탐색
 탐색(search, 검색)
 주어진 데이터 집합에서 원하는 값을 찾는 작업
 순차 검색
 처음 데이터부터 순차적으로 검색
 최악의 경우, n번 비교
 데이터가 많으면 비효율적, 정렬되지 않은 데이터도
검색이 가능

26

탐색(search)
 순차검색(sequential search)
 맨 처음 데이터부터 하나씩 차례로 비교하면서 검색하다.

 이진 검색(binary search)
 검색할 데이터가 반드시 크기 순으로 정렬되어 있어야 한

다.
 먼저 n/2 위치의 키와 비교, 같지 않으면 이 값과 비교해서
작으면 전반부, 크면 후반부를 같은 방법으로 검색한다.
 한 번 검색을 수행할 때마다, 검색할 개수가 ½씩 줄어든다.

27

탐색
 (이진 검색의 예) 98을 찾는 경우
5

7

9

15

30

55

98

127

255




28

 해싱(hashing)
 키값을 이용해서 데이터의 저장소를 계산해서 탐색하
는 방법
 키를 이용해서 데이터 저장주소를 변환하는 함수가
필요 – 해시함수(hash function)

29