SlideShare a Scribd company logo
1 of 42
Data Structures
amugona study 1회
20150717 jjw
amugona2015
Programs = Data Structures + Algorithms
program이 올바르고 효율적으로 작성되기 위해서는
data structures와 algorithms이 정확하고 효율적이어야 한다.
Programming
2
amugona2015
목차
Data
Algorithms
String
Array
Stack
Queue
List
Graph
3
amugona2015
Data
data
○컴퓨터로 처리하려는 대상
information
○어떤 문제를 해결하기 위해 컴퓨터로 처리되어 의미가 있는 data
? 컴퓨터는 다음 data를 어떻게 표현할까
○정수, 실수, 배정도 실수, 복소수
○문자, 논리, 포인터
4
amugona2015
Abstraction
정의
○많은 image에서 공통적이거나 중요한 것을 뽑아내어 그것
만을 단순하게 표현한 것
○복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는
기능을 간추려 내는 것
• abstraction의
목적은 인간에
게 편리성을
제공하기 위함
5
amugona2015
추상적 ↔ 구체적
Abstraction
추상화
6
상수 10은 여기서 이렇게 표시되며 변수 x는
저렇게 구현되며 치환연산은 요렇게 처리된다 int x = 10;
1)http://www.ipnomics.co.kr/wp-content/uploads/
2)http://techholic.co.kr/archives/11390
1 2
amugona2015
Abstraction
문제를 해결하는 과정에서의 abstraction의 예
문제의 해결 단계
• 세상 모든 문
제는 비슷비슷
• 추상은 인간지
향적, 기계독립
적 줄을 선다
• 은행에 저금하러 간 엄마
• 한정판 게임기를 사러 매장에 간 덕후
• 시분할처리환경의 프로그램 작업들
• 통신용 버퍼의 패킷
추상화
Queue
공통점
문제
what
처리대상
how
처리방법
data
algorithm
program 해결
abstraction 문제변환
7
amugona2015
Abstraction 종류
data abstraction
○data의 종류마다 그 처리방식을 달리 해주는 것
operation abstraction
○실제 data에 가해진 operation이 내부적으로는 어떻게 수행
되는지 알 필요가 없음
algorithm abstraction
○algorithm의 세세하고 지엽적인 특성은 무시하고 핵심만을
간추려 놓은 것
8
amugona2015
Data structures
data type
○정의
■ data object의 집합과 operation집합
○구분
■ scalar data type(=elementary data type)
□ int, float, char 등으로 선언
■ structured data type
□ data type들의 집합(필드)으로 구성된 영역
□ int arr[10]={1,2,3…}등으로 선언
9
amugona2015
Data structures
data structure
○정의
■ 일종의 structured data type으로, data의 개념적 형태
○종류
• data를
abstraction한
결과
simple
• string
• array
• record
linear
• stack
• queue
• list
non-linear
• graph
• tree
• binary tree
• special tree
10
amugona2015
Algorithm
algorithm의 정의
○어떤 특정 문제를 해결하기 위한 명령어들의 유한 집합
programs = data structures + algorithms
○algorithm의 작성은 data가 저장되는 방법과 구조에 의존
algorithms의 조건
○input
○output
○definiteness
○finiteness
○effectiveness
11
amugona2015
Algorithm의 표현
algorithm의 표현 방법
○flow chart
○pseudo code
12그림: http://www.csgcse.co.uk/programming/flowcharts-pseudocode/
amugona2015
Algorithm의 분석
판단 기준
○correctness
■ 올바른 input에 대해 유한 시간 내 옳은 답을 내는가
○amount of work done
■ algorithm에 의해 수행되는 일의 양
■ average behavior
■ worst-case
○amount of space used
■ algorithm 수행 시 필요한 기억 공간의 사용량
○simplicity/clarity
■ algorithm의 작성이 쉽고 간결하며 해독성이 높은가
○optimality
■ 실행시간의 평균=최악의 경우
13
amugona2015
Algorithm의 분석
correctness 판단
○실행에 필요한 input과 각 input에 대해 생성되는 output을
자세히 기술한 후 이것을 증명
○mathematical induction
■ algorithm 내의 loop가 정확히 수행되는가를 증명하는데 사용
14
amugona2015
Algorithm의 분석
sequential search의 correctness 증명
○input: L, n, x(L은 n개의 원소로 된 배열)
○output: index
증명) mathematical induction으로 다음을 증명하고자 한다.
• 이 알고리즘이
수행하고자 하
는 것
• 수학적 귀납법
으로 증명
• 프로그램의 정
확성을 엄격하
게 증명하고자
할 때
index=0;
while(index < n && L[index] != x)
index++;
if(index==n) then index=-1;
1
2
3
4
0≤k≤n의 범위를 갖는 k에 대해, 2라인의 k번째 도달했을 때에는
index=k-1이고, 0≤i<k에 대해 L[i]≠k이다.
15
amugona2015
Algorithm의 분석
amount of work done 측정하기
? 측정방법으로 적절한 것은
■ 알고리즘의 실제 실행 시간(X)
□ 컴퓨터에 따라 달라짐
■ 프로그램에 의해 실행되는 명령어들의 개수(X)
□ PL과 프로그래머에 따라 달라짐
■ 알고리즘의 중요 연산들(O)
□ 전체 연산 개수와 중요 연산 개수가 어느 정도 비례한다면 좋은 판단
기준이 될 수 있음
16
amugona2015
Algorithm의 분석
○입력 자료의 양과 형태에 따라 달라짐
■ average behavior
□ 𝐷 𝑛 : 어떤 문제 해결을 위한 크기 n인 입력들의 집합
□ 𝐼 : 𝐷 𝑛의 원소
□ 𝑝 𝐼 : 𝐼가 발생할 확률
□ 𝑡(𝐼) : 입력 𝐼에 대해 알고리즘 수행 시 중요 연산 개수
■ worst-case
𝐴 𝑛 =
𝐼∈𝐷 𝑛
𝑝 𝐼 𝑡(𝐼)
𝑊 𝑛 = max
𝐼∈𝐷 𝑛
𝑡(𝐼)
17
amugona2015
Algorithm의 분석
sequential search algorithm의 worst-case와 average
behavior 분석
○L은 n개의 원소가 들어가는 배열이다. 배열에서 x를 찾으면
그 위치를 찾고, x가 배열에 없으면 -1을 출력하라.
? 중요 연산
? 𝑊 𝑛
? 𝐴 𝑛
18
amugona2015
Algorithm의 분석
행렬의 곱의 worst-case와 average behavior 분석
○A=(𝑎𝑖𝑗), B=(𝑏𝑖𝑗)인 실수 원소의 𝑛 × 𝑛 행렬, C=AB는?
? 중요 연산
? 𝑊 𝑛
? 𝐴 𝑛
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=0;
for(k=0;k<n;k++){
c[i][j] += a[i][k]*b[k][j];
}
}
}
1
2
3
4
5
6
7
8
𝑐𝑖𝑗 =
𝑘=1
𝑛
𝑎𝑖𝑘 𝑏𝑖𝑘 (1 ≤ 𝑖, 𝑖 ≤ 𝑛)
행렬의 곱 정의
19
amugona2015
Algorithm의 복잡도
정의
○ 작성된 algorithm의 effectiveness 정도를 나타내는 기준
시간 복잡도
○ 주어진 문제 해결을 위한 algorithm 수행 시 사용되는 기본연산의
빈도수를 차수로 표현한 것
○ Ο표시법
■ 연산 차수가 가장 높은 것을 택하여 나타냄
○ Ω표시법
■ 연산차수가 가장 낮은 것을 택하여 나타냄
공간 복잡도
○ algorithm을 비교 시 기억장소를 특정단위로 나눈 후 어떤
algorithm이 몇 개의 기억장소영역을 차지하는가를 측정하여 나
타냄
20
amugona2015
String
정의
○일련의 문자
사용
○언어학적 분석/수행을 위해 컴퓨터에 전해지는 프로그램의
기본 매개체
○문서편집기, 문서처리시스템에 의해 조작되는 문서의 기본
매개체
○CPU와 주변 장치간 IO transaction에서 data 교환을 위한 주
요 매개체
○PL에서 label이나 identifier나 procedure의 이름으로 사용,
저장, 출력, 조작되는 데이터로 사용
○항목 명명, 저장된 값 나타내기 위해 테이블 내에 사용
• identifier
• keyword
21
amugona2015
String의 표현방법
순차 string
고정길이 string
○압축 string
○linked list
가변길이 string
22
amugona2015
String의 연산
concatenation
insertion
deletion
replacement
substring
pattern matching
indexing
23
amugona2015
Array
정의
○동일한 data 형태를 가지는 원소들이 2차원(index, value) 장
방형 구조에 놓여있는 집합체
특징
○같은 data의 집단을 취급하는 경우 유용한 data structure
연산
○검색
○저장
24
amugona2015
1차원 배열(vector)
크기가 n개인 배열 A
1차원 배열 표현 방법
○ 𝐴 𝐿: 𝑈 = 𝐴 𝑖 𝑖 = 𝐿, 𝐿 + 1, … , 𝑈 − 1, 𝑈}
○원소의 수 = 𝑈 − 𝐿 + 1
○인덱스가 𝑖인 원소 𝐴[𝑖]의 주소
■ 𝐵 + 𝑘 × (𝑖 − 𝐿)
■ 𝑘개의 기억장소 단위, 배열의 시작 주소 𝐵
• A(L:U)는 하한,
상한을 명시한
배열의 범위를
사용하여 표현
한 것
A(0) A(1) A(2) … … … A(n-2) A(n-1)
25
amugona2015
1차원 배열(vector)
예제
○배열 A(0:99)에서, 첫 원소의 주소가 200번지, 원소의 크기는
10bytes인 1차원 배열에서 50번째 원소의 주소는?
26
amugona2015
2차원 배열
m*n의 배열
2차원 배열 표현 방법
○ 𝐴 𝑝: 𝑚, 𝑞: 𝑛 = 𝐴 𝑖, 𝑗 𝑖 = 1, … , 𝑚 그리고 𝑗 = 1, … , 𝑛}
○원소의 수 = (𝑚 − 𝑝 + 1) × 𝑛 − 𝑞 + 1 개
q
p
q+1 n
p+1
m
…
…
벡터의 길이
벡
터
의
수
27
amugona2015
Stack
정의
○특별한 형태의 linear list로, memory에 data를 일시적으로
쌓아두었다 필요 시 꺼내 사용할 수 있도록 main memory나
register의 일부를 할당하여 사용하는 임시적 memory
특징
○list내의 data 삽입과 삭제가 한쪽 끝(top)에서만 일어남
○LIFO
응용분야
○수식 계산, subroutine call, 순환미로실험, push-down
automata, quick sort …
28
• linear list: 순
서가 정해진
data의 모임
• pushdown list,
LIFO list
amugona2015
Stack
stack을 특징짓는 것은?
○stack은 추상적이며 논리적인 구조
○기억장소에 물리적으로 표현되는 모습(X)
○stack이라는 논리적 구조의 동작(O)
29
c
b
a
보기에는 배열과
다를 게 없지만
움직이는걸 보니
stack이구나
amugona2015
Stack
연산
○push
○pop
표현
○stack 크기 알 때 1차원 array
○stack 크기 모를 때 linked list
? 동작
30
c
b
a
top c b a
amugona2015
Queue
정의
○한쪽 끝에서 data 삭제, 다른 한쪽 끝에서 data 삽입되는
linear list
특징
○삭제되는 한쪽 끝(front)와 삽입되는 한쪽 끝(rear)
○FIFO
연산
○front(Q)
○rear(Q)
○noel(Q)
31
amugona2015
Queue
표현
○1차원 array
○linked list
응용
○scheduling
○통신할 process 선택
○여러 system에서 simulation을 위한 modeling
? 동작
32
amugona2015
Circular queue
정의
○배열의 처음과 끝을 이어놓은 형태의 큐
특징
○큐의 단점 보완
■ overflow 시 queue 전체를 옮기는데 걸리는 시간 손실
? 동작
33
amugona2015
Double ended queue(deque)
정의
○삽입과 삭제가 양쪽 끝에서 모두 허용될 수 있는 linear list
queue의 일반화
특징
○stack과 queue를 하나의 linear list에 복합시킨 형태
표현
○stack
○1차원 array
○singly linked list
○doubly linked list
34
amugona2015
Double ended queue(deque)
종류
○입력 제한(scroll)
■ 삽입이 한쪽 끝에서만 일어나도록 함
○출력 제한(shelf)
■ 삭제가 한쪽 끝에서만 일어나도록 함
35
• 삽입, 삭제를
제한함에 따른
amugona2015
List
linear list
○ array와 같이 연속된 기억 장소에 저장되는 list
○ 특징
■ sequential mapping으로 pointer 불필요
■ 단순한 구조, memory density 높음
■ insert, delete 시 data이동 많음
linked list
○ 정의
■ list의 각 항목들은 다음 항목의 주소에 대한 포인터를 가짐
○ 특징
■ non-sequential mapping
■ node=data+link
○ 응용
■ 다항식의 덧셈
■ 희소 행렬
36
amugona2015
Circular linked list
정의
○마지막 node의 포인터를 NULL이 아닌 첫 번째 node의 주소
를 가리키도록 구성한 list
응용
○buffer 영역
○terminal service의 round robin
37
• linear list
• sequential
mapping
• linked list
• non-
sequential
mapping
• header
pointer
• linked list
의 시작 위
치를 알려
줌
• node
• list의 한 항
목
• data+link
a1 a2 a3 a4
header
amugona2015
Doubly linked list
정의
○다음 node와 이전 node를 알 수 있도록 하여 양방향 탐색이
가능한 list
특징
○연결 부분을 두 개로 하여 효율적인 list 운영
○각 node는 2개의 pointer를 포함
■ rlink: 오른쪽 방향 나타내는(after node를 가리키는) pointer
■ llink: 왼쪽 방향을 나타내는(before node를 가리키는) pointer
38
• circular linked
list의 단점
• list를 뒤로
순회할 수
없음
• 삭제하려는
node의 포
인터만으로
삭제 못함
a1 a2 a3 a4
header
amugona2015
Doubly linked circular list
정의
○doubly linked list의 왼쪽 끝 node의 llink는 오른쪽 끝 node
를 가리키고, 오른쪽 끝 node의 rlink는 왼쪽 끝 node를 가
리키며, 여기에 head node를 가짐
39
• 양방향 탐색가
능
a1 a2 a3 a4
header
a1 a2 a3 a4
head node
-
amugona2015
Graph
graph
vertex
edge
graph classification1
○ undirected graph
○ directed graph
○ mixed graph
graph classification2
○ simple graph
○ multi graph
weight
weighted graph
40
• network
• tree
• dag
• 무엇에 따른
구분인가
 null graph
○ isolated vertex
 complete graph
 path
 length
 cyclic graph
 acyclic graph
 directed acyclic graph
 total degree
○ indegree
○ outdegree
 subgraph
 connected graph
amugona2015
Graph
응용
○PREP/CPM
○topological sort
○minimum cost spanning tree
○maximum flow
? graph 왜 쓸까
41
amugona2015
Topological sort
정의
○directed acyclic graph에 대해 가능한 정렬 방법
42

More Related Content

What's hot

2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar
[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar
[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar강 민우
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스noerror
 
동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programmingssuser889640
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Treehyun soomyung
 
Part4 search trees
Part4 search treesPart4 search trees
Part4 search treesOh-Heum Kwon
 
자료구조 프로젝트
자료구조 프로젝트자료구조 프로젝트
자료구조 프로젝트hyungoh kim
 
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)HYUNJEONG KIM
 
이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬Jung-Ho Kim
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석jaypi Ko
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램중선 곽
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기Yong Joon Moon
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형Kimjeongmoo
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 ISungbin Lim
 

What's hot (20)

이산수학 Ch.5
이산수학 Ch.5이산수학 Ch.5
이산수학 Ch.5
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar
[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar
[IGC 2017] 경일직업능력개발원 이재환 - 시작하는 게임 프로그래머를 위한 알고리즘, 그리고 첫걸음 AStar
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
 
동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Tree
 
Part4 search trees
Part4 search treesPart4 search trees
Part4 search trees
 
자료구조 프로젝트
자료구조 프로젝트자료구조 프로젝트
자료구조 프로젝트
 
Ch07
Ch07Ch07
Ch07
 
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
 
Linear algebra
Linear algebraLinear algebra
Linear algebra
 
Ch05
Ch05Ch05
Ch05
 
자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 I
 

Similar to Amugona study 1회 jjw

1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)fmbvbfhs
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regressionHaesun Park
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트S.O.P.T - Shout Our Passion Together
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)Jeonghun Yoon
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기라한사 아
 
람다, 스트림 Api
람다, 스트림 Api람다, 스트림 Api
람다, 스트림 ApiChi Hwan Choi
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디대영 노
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션재원 최
 
Deep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learningDeep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learningJinSooKim80
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)HYUNJEONG KIM
 
3.neural networks
3.neural networks3.neural networks
3.neural networksHaesun Park
 
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptxDonghwan Lee
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks ISang Jun Lee
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 

Similar to Amugona study 1회 jjw (20)

1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regression
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기
 
람다, 스트림 Api
람다, 스트림 Api람다, 스트림 Api
람다, 스트림 Api
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션
 
Deep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learningDeep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learning
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
 
3.neural networks
3.neural networks3.neural networks
3.neural networks
 
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks I
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 

More from 정완 전

MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제정완 전
 
Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회정완 전
 
Amugona 알고리즘 스터디4회
Amugona 알고리즘 스터디4회Amugona 알고리즘 스터디4회
Amugona 알고리즘 스터디4회정완 전
 
amugona 스터디4회 세미나결과
amugona 스터디4회 세미나결과amugona 스터디4회 세미나결과
amugona 스터디4회 세미나결과정완 전
 
스터디3회 연결리스트, 삽입정렬 구현하기
스터디3회 연결리스트, 삽입정렬 구현하기스터디3회 연결리스트, 삽입정렬 구현하기
스터디3회 연결리스트, 삽입정렬 구현하기정완 전
 
Amugona study 2회 세미나 결과
Amugona study 2회 세미나 결과Amugona study 2회 세미나 결과
Amugona study 2회 세미나 결과정완 전
 
Amugona stdudy 2nd JJW
Amugona stdudy 2nd JJWAmugona stdudy 2nd JJW
Amugona stdudy 2nd JJW정완 전
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw정완 전
 
Amugona study 1회 - 결과
Amugona study 1회 - 결과Amugona study 1회 - 결과
Amugona study 1회 - 결과정완 전
 

More from 정완 전 (9)

MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회
 
Amugona 알고리즘 스터디4회
Amugona 알고리즘 스터디4회Amugona 알고리즘 스터디4회
Amugona 알고리즘 스터디4회
 
amugona 스터디4회 세미나결과
amugona 스터디4회 세미나결과amugona 스터디4회 세미나결과
amugona 스터디4회 세미나결과
 
스터디3회 연결리스트, 삽입정렬 구현하기
스터디3회 연결리스트, 삽입정렬 구현하기스터디3회 연결리스트, 삽입정렬 구현하기
스터디3회 연결리스트, 삽입정렬 구현하기
 
Amugona study 2회 세미나 결과
Amugona study 2회 세미나 결과Amugona study 2회 세미나 결과
Amugona study 2회 세미나 결과
 
Amugona stdudy 2nd JJW
Amugona stdudy 2nd JJWAmugona stdudy 2nd JJW
Amugona stdudy 2nd JJW
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
Amugona study 1회 - 결과
Amugona study 1회 - 결과Amugona study 1회 - 결과
Amugona study 1회 - 결과
 

Amugona study 1회 jjw

  • 1. Data Structures amugona study 1회 20150717 jjw
  • 2. amugona2015 Programs = Data Structures + Algorithms program이 올바르고 효율적으로 작성되기 위해서는 data structures와 algorithms이 정확하고 효율적이어야 한다. Programming 2
  • 4. amugona2015 Data data ○컴퓨터로 처리하려는 대상 information ○어떤 문제를 해결하기 위해 컴퓨터로 처리되어 의미가 있는 data ? 컴퓨터는 다음 data를 어떻게 표현할까 ○정수, 실수, 배정도 실수, 복소수 ○문자, 논리, 포인터 4
  • 5. amugona2015 Abstraction 정의 ○많은 image에서 공통적이거나 중요한 것을 뽑아내어 그것 만을 단순하게 표현한 것 ○복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것 • abstraction의 목적은 인간에 게 편리성을 제공하기 위함 5
  • 6. amugona2015 추상적 ↔ 구체적 Abstraction 추상화 6 상수 10은 여기서 이렇게 표시되며 변수 x는 저렇게 구현되며 치환연산은 요렇게 처리된다 int x = 10; 1)http://www.ipnomics.co.kr/wp-content/uploads/ 2)http://techholic.co.kr/archives/11390 1 2
  • 7. amugona2015 Abstraction 문제를 해결하는 과정에서의 abstraction의 예 문제의 해결 단계 • 세상 모든 문 제는 비슷비슷 • 추상은 인간지 향적, 기계독립 적 줄을 선다 • 은행에 저금하러 간 엄마 • 한정판 게임기를 사러 매장에 간 덕후 • 시분할처리환경의 프로그램 작업들 • 통신용 버퍼의 패킷 추상화 Queue 공통점 문제 what 처리대상 how 처리방법 data algorithm program 해결 abstraction 문제변환 7
  • 8. amugona2015 Abstraction 종류 data abstraction ○data의 종류마다 그 처리방식을 달리 해주는 것 operation abstraction ○실제 data에 가해진 operation이 내부적으로는 어떻게 수행 되는지 알 필요가 없음 algorithm abstraction ○algorithm의 세세하고 지엽적인 특성은 무시하고 핵심만을 간추려 놓은 것 8
  • 9. amugona2015 Data structures data type ○정의 ■ data object의 집합과 operation집합 ○구분 ■ scalar data type(=elementary data type) □ int, float, char 등으로 선언 ■ structured data type □ data type들의 집합(필드)으로 구성된 영역 □ int arr[10]={1,2,3…}등으로 선언 9
  • 10. amugona2015 Data structures data structure ○정의 ■ 일종의 structured data type으로, data의 개념적 형태 ○종류 • data를 abstraction한 결과 simple • string • array • record linear • stack • queue • list non-linear • graph • tree • binary tree • special tree 10
  • 11. amugona2015 Algorithm algorithm의 정의 ○어떤 특정 문제를 해결하기 위한 명령어들의 유한 집합 programs = data structures + algorithms ○algorithm의 작성은 data가 저장되는 방법과 구조에 의존 algorithms의 조건 ○input ○output ○definiteness ○finiteness ○effectiveness 11
  • 12. amugona2015 Algorithm의 표현 algorithm의 표현 방법 ○flow chart ○pseudo code 12그림: http://www.csgcse.co.uk/programming/flowcharts-pseudocode/
  • 13. amugona2015 Algorithm의 분석 판단 기준 ○correctness ■ 올바른 input에 대해 유한 시간 내 옳은 답을 내는가 ○amount of work done ■ algorithm에 의해 수행되는 일의 양 ■ average behavior ■ worst-case ○amount of space used ■ algorithm 수행 시 필요한 기억 공간의 사용량 ○simplicity/clarity ■ algorithm의 작성이 쉽고 간결하며 해독성이 높은가 ○optimality ■ 실행시간의 평균=최악의 경우 13
  • 14. amugona2015 Algorithm의 분석 correctness 판단 ○실행에 필요한 input과 각 input에 대해 생성되는 output을 자세히 기술한 후 이것을 증명 ○mathematical induction ■ algorithm 내의 loop가 정확히 수행되는가를 증명하는데 사용 14
  • 15. amugona2015 Algorithm의 분석 sequential search의 correctness 증명 ○input: L, n, x(L은 n개의 원소로 된 배열) ○output: index 증명) mathematical induction으로 다음을 증명하고자 한다. • 이 알고리즘이 수행하고자 하 는 것 • 수학적 귀납법 으로 증명 • 프로그램의 정 확성을 엄격하 게 증명하고자 할 때 index=0; while(index < n && L[index] != x) index++; if(index==n) then index=-1; 1 2 3 4 0≤k≤n의 범위를 갖는 k에 대해, 2라인의 k번째 도달했을 때에는 index=k-1이고, 0≤i<k에 대해 L[i]≠k이다. 15
  • 16. amugona2015 Algorithm의 분석 amount of work done 측정하기 ? 측정방법으로 적절한 것은 ■ 알고리즘의 실제 실행 시간(X) □ 컴퓨터에 따라 달라짐 ■ 프로그램에 의해 실행되는 명령어들의 개수(X) □ PL과 프로그래머에 따라 달라짐 ■ 알고리즘의 중요 연산들(O) □ 전체 연산 개수와 중요 연산 개수가 어느 정도 비례한다면 좋은 판단 기준이 될 수 있음 16
  • 17. amugona2015 Algorithm의 분석 ○입력 자료의 양과 형태에 따라 달라짐 ■ average behavior □ 𝐷 𝑛 : 어떤 문제 해결을 위한 크기 n인 입력들의 집합 □ 𝐼 : 𝐷 𝑛의 원소 □ 𝑝 𝐼 : 𝐼가 발생할 확률 □ 𝑡(𝐼) : 입력 𝐼에 대해 알고리즘 수행 시 중요 연산 개수 ■ worst-case 𝐴 𝑛 = 𝐼∈𝐷 𝑛 𝑝 𝐼 𝑡(𝐼) 𝑊 𝑛 = max 𝐼∈𝐷 𝑛 𝑡(𝐼) 17
  • 18. amugona2015 Algorithm의 분석 sequential search algorithm의 worst-case와 average behavior 분석 ○L은 n개의 원소가 들어가는 배열이다. 배열에서 x를 찾으면 그 위치를 찾고, x가 배열에 없으면 -1을 출력하라. ? 중요 연산 ? 𝑊 𝑛 ? 𝐴 𝑛 18
  • 19. amugona2015 Algorithm의 분석 행렬의 곱의 worst-case와 average behavior 분석 ○A=(𝑎𝑖𝑗), B=(𝑏𝑖𝑗)인 실수 원소의 𝑛 × 𝑛 행렬, C=AB는? ? 중요 연산 ? 𝑊 𝑛 ? 𝐴 𝑛 for(i=0;i<n;i++){ for(j=0;j<n;j++){ c[i][j]=0; for(k=0;k<n;k++){ c[i][j] += a[i][k]*b[k][j]; } } } 1 2 3 4 5 6 7 8 𝑐𝑖𝑗 = 𝑘=1 𝑛 𝑎𝑖𝑘 𝑏𝑖𝑘 (1 ≤ 𝑖, 𝑖 ≤ 𝑛) 행렬의 곱 정의 19
  • 20. amugona2015 Algorithm의 복잡도 정의 ○ 작성된 algorithm의 effectiveness 정도를 나타내는 기준 시간 복잡도 ○ 주어진 문제 해결을 위한 algorithm 수행 시 사용되는 기본연산의 빈도수를 차수로 표현한 것 ○ Ο표시법 ■ 연산 차수가 가장 높은 것을 택하여 나타냄 ○ Ω표시법 ■ 연산차수가 가장 낮은 것을 택하여 나타냄 공간 복잡도 ○ algorithm을 비교 시 기억장소를 특정단위로 나눈 후 어떤 algorithm이 몇 개의 기억장소영역을 차지하는가를 측정하여 나 타냄 20
  • 21. amugona2015 String 정의 ○일련의 문자 사용 ○언어학적 분석/수행을 위해 컴퓨터에 전해지는 프로그램의 기본 매개체 ○문서편집기, 문서처리시스템에 의해 조작되는 문서의 기본 매개체 ○CPU와 주변 장치간 IO transaction에서 data 교환을 위한 주 요 매개체 ○PL에서 label이나 identifier나 procedure의 이름으로 사용, 저장, 출력, 조작되는 데이터로 사용 ○항목 명명, 저장된 값 나타내기 위해 테이블 내에 사용 • identifier • keyword 21
  • 22. amugona2015 String의 표현방법 순차 string 고정길이 string ○압축 string ○linked list 가변길이 string 22
  • 24. amugona2015 Array 정의 ○동일한 data 형태를 가지는 원소들이 2차원(index, value) 장 방형 구조에 놓여있는 집합체 특징 ○같은 data의 집단을 취급하는 경우 유용한 data structure 연산 ○검색 ○저장 24
  • 25. amugona2015 1차원 배열(vector) 크기가 n개인 배열 A 1차원 배열 표현 방법 ○ 𝐴 𝐿: 𝑈 = 𝐴 𝑖 𝑖 = 𝐿, 𝐿 + 1, … , 𝑈 − 1, 𝑈} ○원소의 수 = 𝑈 − 𝐿 + 1 ○인덱스가 𝑖인 원소 𝐴[𝑖]의 주소 ■ 𝐵 + 𝑘 × (𝑖 − 𝐿) ■ 𝑘개의 기억장소 단위, 배열의 시작 주소 𝐵 • A(L:U)는 하한, 상한을 명시한 배열의 범위를 사용하여 표현 한 것 A(0) A(1) A(2) … … … A(n-2) A(n-1) 25
  • 26. amugona2015 1차원 배열(vector) 예제 ○배열 A(0:99)에서, 첫 원소의 주소가 200번지, 원소의 크기는 10bytes인 1차원 배열에서 50번째 원소의 주소는? 26
  • 27. amugona2015 2차원 배열 m*n의 배열 2차원 배열 표현 방법 ○ 𝐴 𝑝: 𝑚, 𝑞: 𝑛 = 𝐴 𝑖, 𝑗 𝑖 = 1, … , 𝑚 그리고 𝑗 = 1, … , 𝑛} ○원소의 수 = (𝑚 − 𝑝 + 1) × 𝑛 − 𝑞 + 1 개 q p q+1 n p+1 m … … 벡터의 길이 벡 터 의 수 27
  • 28. amugona2015 Stack 정의 ○특별한 형태의 linear list로, memory에 data를 일시적으로 쌓아두었다 필요 시 꺼내 사용할 수 있도록 main memory나 register의 일부를 할당하여 사용하는 임시적 memory 특징 ○list내의 data 삽입과 삭제가 한쪽 끝(top)에서만 일어남 ○LIFO 응용분야 ○수식 계산, subroutine call, 순환미로실험, push-down automata, quick sort … 28 • linear list: 순 서가 정해진 data의 모임 • pushdown list, LIFO list
  • 29. amugona2015 Stack stack을 특징짓는 것은? ○stack은 추상적이며 논리적인 구조 ○기억장소에 물리적으로 표현되는 모습(X) ○stack이라는 논리적 구조의 동작(O) 29 c b a 보기에는 배열과 다를 게 없지만 움직이는걸 보니 stack이구나
  • 30. amugona2015 Stack 연산 ○push ○pop 표현 ○stack 크기 알 때 1차원 array ○stack 크기 모를 때 linked list ? 동작 30 c b a top c b a
  • 31. amugona2015 Queue 정의 ○한쪽 끝에서 data 삭제, 다른 한쪽 끝에서 data 삽입되는 linear list 특징 ○삭제되는 한쪽 끝(front)와 삽입되는 한쪽 끝(rear) ○FIFO 연산 ○front(Q) ○rear(Q) ○noel(Q) 31
  • 32. amugona2015 Queue 표현 ○1차원 array ○linked list 응용 ○scheduling ○통신할 process 선택 ○여러 system에서 simulation을 위한 modeling ? 동작 32
  • 33. amugona2015 Circular queue 정의 ○배열의 처음과 끝을 이어놓은 형태의 큐 특징 ○큐의 단점 보완 ■ overflow 시 queue 전체를 옮기는데 걸리는 시간 손실 ? 동작 33
  • 34. amugona2015 Double ended queue(deque) 정의 ○삽입과 삭제가 양쪽 끝에서 모두 허용될 수 있는 linear list queue의 일반화 특징 ○stack과 queue를 하나의 linear list에 복합시킨 형태 표현 ○stack ○1차원 array ○singly linked list ○doubly linked list 34
  • 35. amugona2015 Double ended queue(deque) 종류 ○입력 제한(scroll) ■ 삽입이 한쪽 끝에서만 일어나도록 함 ○출력 제한(shelf) ■ 삭제가 한쪽 끝에서만 일어나도록 함 35 • 삽입, 삭제를 제한함에 따른
  • 36. amugona2015 List linear list ○ array와 같이 연속된 기억 장소에 저장되는 list ○ 특징 ■ sequential mapping으로 pointer 불필요 ■ 단순한 구조, memory density 높음 ■ insert, delete 시 data이동 많음 linked list ○ 정의 ■ list의 각 항목들은 다음 항목의 주소에 대한 포인터를 가짐 ○ 특징 ■ non-sequential mapping ■ node=data+link ○ 응용 ■ 다항식의 덧셈 ■ 희소 행렬 36
  • 37. amugona2015 Circular linked list 정의 ○마지막 node의 포인터를 NULL이 아닌 첫 번째 node의 주소 를 가리키도록 구성한 list 응용 ○buffer 영역 ○terminal service의 round robin 37 • linear list • sequential mapping • linked list • non- sequential mapping • header pointer • linked list 의 시작 위 치를 알려 줌 • node • list의 한 항 목 • data+link a1 a2 a3 a4 header
  • 38. amugona2015 Doubly linked list 정의 ○다음 node와 이전 node를 알 수 있도록 하여 양방향 탐색이 가능한 list 특징 ○연결 부분을 두 개로 하여 효율적인 list 운영 ○각 node는 2개의 pointer를 포함 ■ rlink: 오른쪽 방향 나타내는(after node를 가리키는) pointer ■ llink: 왼쪽 방향을 나타내는(before node를 가리키는) pointer 38 • circular linked list의 단점 • list를 뒤로 순회할 수 없음 • 삭제하려는 node의 포 인터만으로 삭제 못함 a1 a2 a3 a4 header
  • 39. amugona2015 Doubly linked circular list 정의 ○doubly linked list의 왼쪽 끝 node의 llink는 오른쪽 끝 node 를 가리키고, 오른쪽 끝 node의 rlink는 왼쪽 끝 node를 가 리키며, 여기에 head node를 가짐 39 • 양방향 탐색가 능 a1 a2 a3 a4 header a1 a2 a3 a4 head node -
  • 40. amugona2015 Graph graph vertex edge graph classification1 ○ undirected graph ○ directed graph ○ mixed graph graph classification2 ○ simple graph ○ multi graph weight weighted graph 40 • network • tree • dag • 무엇에 따른 구분인가  null graph ○ isolated vertex  complete graph  path  length  cyclic graph  acyclic graph  directed acyclic graph  total degree ○ indegree ○ outdegree  subgraph  connected graph
  • 41. amugona2015 Graph 응용 ○PREP/CPM ○topological sort ○minimum cost spanning tree ○maximum flow ? graph 왜 쓸까 41
  • 42. amugona2015 Topological sort 정의 ○directed acyclic graph에 대해 가능한 정렬 방법 42

Editor's Notes

  1. 사람이 쉽게 이해하고 이용할 수 있는 data structure와, 이를 대상으로 구현될 프로그램의 논리인 algorithm이 정확하고 효율적이어야 한다. algorithm과 data structure는 밀접한 관계를 가지며, 서로 어느 한쪽이 없이는 이해할 수 없다.
  2. abstraction의 목적은? 인간에게 편리성을 제공하기 위함이다
  3. 현실세계에서 문제를 도출하여 무엇을 어떻게 해결할 것인가를 알아야함 처리대상을 data로 규정하고, 처리방법을 알고리즘으로 규정하여 프로그램을 작성하면 컴퓨터는 프로그램을 실행하고 문제를 해결하게 된다 문제를 정확하게, 그리고 효율적으로 해결하기 위해서는, 처리대상인 data와 처리방법인 알고리즘을 정확하고 효율적으로 규정해야 한다 abstraction를 통하여 어떤 문제에 대한 개념적인 해결방법을 모색하고 그것을 다양한 구체적인 예에 적용할 수 있다
  4. 자연어로 알고리즘을 표현하면 모호성으로 명확성definiteness이 유지되기 어려움 flow chart는 인간 이해 용이, pseudo code는 코딩 용이 알고리즘 분석의 중점은 실행시간, 기억장소
  5. head node의 llink는 오른끝노드, rlink는 왼끝노드를 가리키도록 구성된다 header pointer는 linked list의 첫노드를 가리킴 head node의 llink는 dlcl를 왼->오의 방향으로 고려할때의 header pointe가 되고, rlink는 dlcl의 오->왼의 방향으로 고려할때의 header pointer가 됨 왼끝노드의 llink와 오끝노드의 rlink가 head node를 가리키도록 함으로써 어느 방향으로 list를 고려하든 끝노드 확인 가능
  6. 그래프 이론을 사용하는 가장 큰 이유는 그래프 구조가 복잡한 실세계에 대한 추상적 모델을 제공함 추상적 모델은 실세계의 문제에 대한 구조를 상세하게 구현할 필요 없이 쉽게 데이터 구조를 논할 수 있게 함