58
InfoLab 2016.3.2 김민수

2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

2016.3.2

김민수

Page 2: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

서론

컴퓨터에대한이해 데이터의 표현 및 저장 컴퓨터의 구조 운영체제

프로그래밍에대한이해 알고리즘 프로그래밍 언어 데이터 구조

데이터에대한이해 데이터베이스 시스템 검색 시스템

결론

목차

2

Page 3: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

컴퓨터의역사

컴퓨터공학기술의활용

컴퓨터공학의분야들

1. 서론

3

(a) IBM 마크 I 컴퓨터 (1944) (b) IBM 왓슨 슈퍼컴퓨터 (2011)

Page 4: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 5: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

2진수체계 101011 (2진수) = 47 (10진수)

16진수체계 1F (16진수) = 31(10진수)

비트 패턴을 이용한 정보 표현 (1)

5

1  0  1  0  1  11   x   1   =   11   x   2   =   20   x   4   =   4  1   x   8   =   80   x  16   =   01   x  32   =  32

비트값

자릿수의양

47 (합)

Page 6: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

2의보수(two’s complement) 표기법 음의 값은 비트 열의 가장 왼쪽 비트를 1로 설정 절대값의 크기가 같은 양의 값과 음의 값 사이에는 비트 패턴 상에서

보수 관계 성립 예: 00000110 (6) 예: 11111010 (-6)

문자 아스키 (ASCII) : 8비트로 255가지의 문자 표현 유니코드 (Unicode) : 16비트로 65,535가지의 문자 표현

비트 패턴을 이용한 정보 표현 (2)

6

01001000H

01100101e

01101100l

01101100l

01101111o

00101110.

“Hello.” 텍스트를 ASCII 코드로 나타낼 때의 비트 패턴

Page 7: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

DRAM(Dynamic Random Access Memory) 사용 빠른 응답 시간 휘발성(volatility)

주기억장치의단위 : 셀(cell) 8비트 ( = 1바이트, 1B) 각 셀은 고유의 주소를 가짐

데이터의크기 210B = 1KB(킬로바이트) 210KB = 1MB(메가바이트) 210MB = 1GB(기가바이트) 210GB = 1TB(테라바이트) 210TB = 1PB(페타바이트)

주기억장치

7

Page 8: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

디스크저장장치 특징: 비휘발성, 대용량 단위: 섹터(512B~수 KB) 접근시간(access time)

• 탐색시간(seek time)• 대기시간(latency time)

단점• 전자 회로에 비해 작동 속도가 매우 느림

플래시메모리(flash memory) 장점 : 바이트 단위의 소량 데이터 접근 가능, 빠른 속도 단점 : 쓰기 연산시 데이터 삭제 필요, 내구성 한계

보조기억장치

8

암 운동

헤드

플래터

디스크회전

트랙섹터

디스크 저장 장치

Page 9: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

무손실(lossless) 압축 압축 과정에서 정보를 잃지 않음 적용 예: 수, 텍스트 방법 예

• 런-길이 인코딩(Run-Length Encoding, RLE)• 허프만 코드(Huffman code)• 차등 인코딩(differential encoding)• 사전 인코딩(dictionary encoding)

손실(lossy) 압축 압축 과정에서 정보를 잃을 수도 있음 적용 예: 이미지, 비디오 방법 예

• JPEG• MP4

데이터 압축

9

Page 10: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

LZW(Lempel-Ziv-Welsh) 인코딩 사전 인코딩의 한 종류 인코딩 방법

• 데이터의 기본 구성 항목들을 포함하는 작은 사전을 가지고 시작• 사전의 항목이 데이터에서 나타날 때 해당 코드로 인코딩• 더 큰 단위의 항목들이 데이터에서 발견되면 이들을 사전에 추가

디코딩 방법• 인코딩을 시작할 때와 동일한 사전을 가지고 시작

예 시작할 때의 사전: x, y, <공백>의 코드가 각각 1, 2, 3

인코딩: 121343434• 인코딩 도중에 xyx 항목과 그 코드값 4가 사전에 추가됨

10

xyx xyx xyx xyx

Page 11: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 12: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

데이터읽기 버스를 통해 목적 메모리 셀의 주소와 읽기 신호를 보냄

데이터쓰기 버스를 통해 쓰려고 하는 메모리 셀의 주소와 저장할 데이터, 그리고

쓰기 신호를 보냄

중앙처리장치

12

A0 15A1 6CA2 16A3 6DA4 50A5 56A6 30A7 6EA8 C0A9 00

주소 셀

버스

CPU 주기억장치

01234567

레지스터프로그램카운트

명령레지스터

A0

레지스터 장치

연산장치

제어장치

6C 036D 046E 00

……

Page 13: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

기계어(machine language) : 인코딩체계와명령집합 데이터 전송(data transfer) 그룹 연산(arithmetic/logic) 그룹 제어(control) 그룹

CPU 설계방식 RISC(Reduced Instruction Set Computer)

• 명령 집합을 설계할 때 명령의 종류를 최소한으로 줄이고자 하는 방식• 예: ARM(Advanced RISC Machine) 사의 Cortex CPU

CISC(Complex Instruction Set Computer)• 명령 집합을 설계할 때 명령의 종류를 많이 갖추고자 하는 방식• 예: Intel과 AMD 사의 CPU

기계어

13

Page 14: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

기계명령 명령 코드(operation code) 피연산자(operand)예 3: 명령코드 (STORE) 5 : STORE할 레지스터의 주소 A7 : 레지스터의 내용을 복사할 주기억장치의 주소

14

0011 0011 0011 0011

명령코드 피연산자

비트 패턴 (총 16비트)

16진법 패턴 (총 4자리)3 5 A 7

CPU 5번 레지스터 안의 비트 패턴을 주기억장치 A7 주소의 메모리 셀에 STORE하라

Page 15: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

특별레지스터 명령 레지스터: 실행될 기계 명령을 보관하기 위해 사용 프로그램 카운터: 다음에 실행될 명령의 메모리 상의 주소를 가지고

있음

CPU의기계주기(machine cycle) 인출(fetch)

• 프로그램 카운터가 가리키는 주소에 저장된 명령을 주기억장치에 요청• 요청 후 프로그램 카운터를 증가

해석(decode)• 명령 레지스터의 비트 패턴을 명령코드와 피연산자로 나눔• 명령코드의 종류에 따라 피연산자를 다시 여러 부분으로 나눔

실행(execute)• 명령의 종류에 따라 적절한 회로를 작동시킴으로써 명령을 실행

프로그램의 실행

15

Page 16: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

CPU 및 주기억장치와 다른 장치들 사이의 통신은 보통 제어기(controller)라고 불리는 중개 장치를 통해 처리오늘날의 컴퓨터는 범용직렬버스(Unversal Serial Bus; USB)와 같은 표준 방식을 사용

다른 장치와의 통신

16

Page 17: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

예제 명령 코드 1: LOAD 명령 코드 5: ADD 명령 코드 3: STORE 명령 코드 C: HALT

17

Page 18: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 19: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

커널 컴퓨터가 필요로 하는 가장 기본적인 기능들을 수행하는 소프트웨어 요소들

을 포함

파일관리자 디스크 장치에 저장된 파일들의 이용을 관리

장치관리자 컴퓨터에 연결된 주변장치를 동작시키기 위해 제어기와 통신하거나 또는 주

변장치와 직접 통신

메모리관리자 페이징

• 가정: 실제 주기억장치 4GB, 필요한 주기억장치 8GB• 주기억장치와 보조기억장치 사이를 오가며 페이지(page)라 불리는 수 KB 단위의

크기로 프로그램과 데이터를 옮김• 마치 실제로 8GB 크기의 주기억장치를 가지고 있는 것처럼 관리

가상 메모리 : 페이징 기법에 의해 확장된 가상의 커다란 메모리 공간

운영체제의 구성요소

19

Page 20: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

부팅 OS는 시동시켜줄 다른 프로그램이 없으므로, 그 자체적으로 시동이

되어야 함 보조기억장치에 저장되어 있는 OS 커널을 주기억장치로 옮기는 작업

부트로더 ROM(Read-Only Memory)이라 불리는 비휘발성의 메모리에 저장 OS를 적재한 후에 OS의 시작 주소로 JUMP 명령을 실행하도록 지시

운영체제의 시동방법

20

Page 21: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

멀티프로그래밍 시간을 작은 구간들로 나누고, 한 구간 동안에는 오직 한 가지의 작업만 실행 각 구간이 끝날 때마다 현재의 작업이 아닌 다른 작업을 실행시킴 c.f. 멀티태스킹

• 단일 사용자 시스템에서의 멀티프로그래밍 기법을 지칭

프로세스 프로그램 실행의 현재 상태 정보 예: 프로그램 카운터 값, 레지스터들의 값들, 관련된 주기억장치 메모리 셀들

의 값들

일정관리자 현재 컴퓨터 상에 존재하는 프로세스들에 대한 기록을 프로세스 테이블이라

불리는 주기억장치 상의 데이터 구조를 이용하여 관리

실행관리자 일정이 잡혀있는 프로세스들의 실행을 감독 각 프로세스가 한 할당 시간(time slice)을 초과할 경우 CPU를 다른 프로세

스로 전환 (컨텍스트 스위치)

프로세스의 관리

21

Page 22: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 23: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

알고리즘의정의 종료 과정을 기술하되, 순서가 있고, 모호하지 않으며, 실행 가능한 단계들의 집합

예: 완두콩껍질을까는일을알고리즘

알고리즘의 개념

23

1. 껍질 안 깐 완두콩 바구니와 빈 접시 하나를 준비한다.

2. 바구니에 껍질 안 깐 완두콩이 남아있는 동안 다음 단계들을 계속 수행한다.

A. 바구니에서 완두콩을 하나 꺼낸다.

B. 완두콩 껍질을 연다.

C. 껍질 안의 완두콩을 접시에 담는다.

D. 껍질을 버린다.

Page 24: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

의사코드(pseudo code) 실제 프로그래밍 언어의 규칙들을 완화한 형태 형식면에서 훨씬 자유로워서 훨씬 짧은 분량으로 작업 기술 가능 특정 프로그래밍 언어에 종속되어 있지 않음

• 의사코드 알고리즘은 거의 대부분의 프로그래밍 언어로 구현 가능

구성요소 문장(statement) 배정문(assignment statement) If-then-else 구조 While-do 구조 Procedure 구조

알고리즘의 표현

24

if (비가 오지 않음) then (

if (기온이 높음) then

(수영하러 간다;)

else

(골프를 한다;)

)

else

(TV를 본다;)

Page 25: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

명령집합의실행이끝내면이를다시반복하는형태예: 순차검색알고리즘

반복 구조(iterative structure)

25

procedure 순차검색 (리스트, 목표값)

if (리스트가 비어있음) then

(검색 실패를 반환한다;)

else (

리스트상의 첫 번째 항목을 테스트항목으로 선택한다;

while (목표값 > 테스트항목이고 비교할 항목이 더 남아있음) do

(리스트상의 다음 항목을 테스트항목으로 선택한다;)

if (목표값 = 테스트항목) then

(검색 성공을 반환한다;)

else

(검색 실패를 반환한다;)

)

Page 26: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

명령집합을원래작업의부분작업으로써반복하는형태예: 이진검색알고리즘

재귀 구조 (recursive structure)

26

procedure 이진검색 (리스트, 목표값)if (리스트가 비어있음) then

(검색 실패를 반환한다;)else (

리스트의 가운데 항목을 테스트항목으로 선택한다;if (목표값 = 테스트항목) then

(검색 성공을 반환한다;)else (

if (목표값 < 테스트항목) then(이진검색(리스트 전반부, 목표값)을 호출한다;)

else

(이진검색(리스트 후반부, 목표값)을 호출한다;))

)

Page 27: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 28: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

프로그래밍언어 분류: 명령형, 선언형, 객체지향형, 함수형 예: C(명령형), C++/Java (객체지향형)

프로그램 : 문장들의집합

문장의종류 선언문: 사용할 데이터 항목의 이름과 타입을 지정

• 예: int height;

명령문: 배정문, 제어문• 예: height = height + 10;

주석(comment)• 예: /* 학생의 키를 나타내는 정수 변수 */

프로그래밍 개념

28

Page 29: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

프로시저 어떤 작업을 수행하는 명령들의 모임 큰 규모의 프로그램을 작성할 때 추상적 도구로 사용됨 c.f., 함수: 작업 결과를 “함수 값”으로 반환할 때 사용하는 개념

프로시저호출

프로시저 및 함수

29

Page 30: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

매개변수(parameter) 프로시저를 호출할 때 프로시저에 전달되는 데이터 항목(들)

전달방식 값에 의한 전달(call by value) 참조에 의한 전달(call by reference)

30

Page 31: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

번역(translation) 프로그램을 한 언어에서 다른 언어로 변환하는 과정 예: 사용자가 작성한 C++ 프로그램을 기계어로 변환하는 것

어휘분석 소스 프로그램에서 토큰(token)이라 불리는 기본 단위들을 인식하고

추출 예: 소스 프로그램에서 167을 1, 6, 7 세 개의 숫자로 인식하는 것 대

신 167이라는 하나의 정수 토큰으로 인식

언어의 구현

31

Page 32: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

구문분석 문법(grammar) : 언어의 구문을 정의하는 규칙들의 집합

• 표현방식 예: 구문 다이어그램(syntax diagram) 프로그램의 토큰들을 문법에 맞는지 확인하면서 문장으로 묶는 과정

32

Page 33: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

구문트리(syntax tree) 어휘 분석기의 결과로 구해지는 토큰들의 문자열을 구문 다이어그램

에 맞게 트리 형태로 표현한 것

예: x + y z

코드생성 구문 트리의 내용을 바탕으로 기계어 명령들을 생성 보다 효율적인 기계어 명령들의 집합을 생성하기 위해 코드 최적화

(code optimization) 기법들을 사용 예: x = y + z;

w = x + z;

33

Page 34: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 35: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

데이터를효율적, 추상적으로다룰수있도록해주는도구

프로그램을작성할때주기억장치에데이터를효율적으로배치하거나표현하는것필요

알고리즘을주기억장치의셀단위관점에서작성하기보다추상화된관점에서작성하는것필요

데이터 구조

35

Page 36: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

같은타입의변수들이주기억장치에연속적으로할당되어있는데이터구조 예: int array[10];

• 정수 타입의 길이가 10이고 이름이 array인 배열

예: array[4]= 7;

배열

36

array의 주소

7

array[4]array[0] array[9]… …

Page 37: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

2차원배열은개념적으로는 2차원구조이지만주기억장치상에서 1차원의공간으로할당 주기억장치의 메모리 셀들은 순차적인 주소 값을 가지고 있을 뿐임

예: int matrix[3][5];• 정수 타입의 3개의 행과 5개의 열을 가진 2차원 배열(행렬)

예: matrix[1][2]= 9;

다차원 배열

37

matrix의 주소

matrix[0]

9

matrix[0][1]

matrix[1] matrix[2]

matrix[1][4]

Page 38: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

주소값을저장할수있는주기억장치내의메모리영역 예: int* pointer = &number;

• 주기억 장치의 number 변수의 주소 : 9D• 주기억 장치의 pointer 변수의 주소 : 7C • pointer 변수의 크기: 8바이트 (64비트 CPU의 경우)

인다이렉션(indirection) 저장된 주소 값을 이용하여 간접적으로 데이터 항목을 접근할 수 있

도록 하는 기법 예: (*pointer) = 8;

포인터

38

number의 주소: 9D

9D 4

pointer의 주소: 7C

… ……

인다이렉션(indirection)

Page 39: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

특징 인다이렉션(포인터)을 이용하여 데이터 항목의 삭제/삽입이 자유로움 특정 데이터 항목에 대한 접근은 배열에 비해 상대적으로 느림

구조 노드(node): 리스트의 데이터 항목 헤드(head) 포인터부터 시작하여 노드들을 포인터로 연결

• 각 노드는 다음 번 노드를 가리키기 위한 포인터를 가지고 있어야 함• 맨 마지막 노드는 끝을 표시하기 위해 NIL(또는 NULL) 값 저장함

연결 리스트

39

Page 40: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

노드의삭제 노드가 차지하던 메모리 공간을 OS 메모리 관리자에 반환

노드의삽입 새 노드를 위한 메모리 공간의 할당을 OS 메모리 관리자에 요청

40

Page 41: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

나무를거꾸로뒤집은형태 루트(root) 노드 : 최상단에 위치한 노드 단말(leaf) 노드: 트리의 최하단에 위치한 노드들 루트 노드를 포함하여 각 노드는 자식 노드들을 가짐 루트 노드를 제외한 각 노드는 하나의 부모 노드를 가짐

이진트리: 각노드가두개이하의자식노드들을갖는트리서브트리: 어떤노드를루트노드로가지는부분트리

트리

41

D

B E

A C F

Page 42: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

트리순회(traversal) 전위(preorder) 순회, 중위(inorder) 순회, 후위(postorder) 순회

42

procedure 중위순회출력 (pointer)

if (pointer ≠ NIL) then (

중위순회출력(pointer→left)을 호출한다;

pointer→value를 출력한다;

중위순회출력(pointer→right)을 호출한다;

)

D

B E

A C F

ABCDEF 출력

Page 43: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 44: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

데이터베이스 서로 관련있는 데이터들의 조직적인(organized) 집합

관계형(relational) 데이터베이스 릴레이션(relation)이라 불리는 테이블들을 집합 예: 다국적 유통기업에서 상품의 판매 기록의 데이터베이스

• Item 테이블 : 상품의 정보• Location 테이블 : 판매 장소 정보• Time 테이블 : 판매 시간 정보• Sales 테이블 : 판매 정보

관계형 데이터베이스 관리 시스템

44

Page 45: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

릴레이션 열 : 속성(attribute)

• 해당 릴레이션의 속성을 기술• 데이터의 표현을 위한 적절한 데이터 타입을 가지고 있음

행: 레코드(record), 투플(tuple)

키(key) 각 투플을 유일하게 구분할 수 있는 하나 이상의 속성들의 집합 예: Student 릴레이션에의 ‘학번’ 속성

데이터베이스관리시스템(DBMS) 데이터베이스의 생성, 관리, 사용을 제어하는 컴퓨터 프로그램들의

집합 예: 오라클(Oralce), IBM DB2, 마이크로소프트 SQL Server, MySQL

45

Page 46: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

selection 연산 () 주어진 릴레이션에 대해 주어진 조건에 맞는 투플 집합을 반환

projection 연산 () 주어진 릴레이션에 대해 주어진 속성들에 해당하는 데이터를 반환

관계형 연산

46

Page 47: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

join 연산 ( ) 주어진 두 개의 릴레이션들을 주어진 join 조건을 만족하도록 합쳐서

하나의 릴레이션으로 만들어 반환

47

Page 48: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

질의(query) 데이터베이스로부터 구하기를 원하는 데이터(정보)를 찾는 행위 관계형 데이터베이스에서 질의는 SQL이라는 언어를 이용하여 작성

SQL(Structured Query Language; 구조적질의언어) 관계형 데이터베이스에 대해 수행하려는 작업을 표현할 수 있는 표

준 언어

SQL 질의 언어

48

select <속성 리스트>

from <릴레이션 리스트>

where <조건 리스트>

select brand, product, numsold

from Item, Sales

where Item.i_key = Sales.i_fkey and

brand = “Apple”

SQL 문법 SQL 예

Page 49: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

Page 50: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

색인(index) 방대한 데이터베이스에서 원하는 데이터(혹은 정보)를 빠르게 찾을

수 있도록 해주는 데이터 구조 구축하는데 별도의 추가적인 시간이 소요되지만, 한 번 구축한 다음

에는 이후의 모든 검색 요청들을 매우 빠르게 처리

검색시스템 (예: 구글) 데이터베이스: 인터넷 상의 웹페이지들의 집합 질의: 주어진 키워드들을 포함하는 웹 페이지들을 찾는 것 색인: 역색인

검색 시스템

50

Page 51: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

키워드추출방식 단어(word) 기반 그램(gram) 기반

• n-그램 : 길이가 n인 문자열

역색인 추출된 각 색인 키워드에 대해 어떤 문서의 어디 위치에 나타났는지에 대한

포스팅(posting) 정보를 리스트 형태로 저장하는 색인

역색인 (inverted index)

51

Page 52: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

관찰 데이터베이스 시스템이나 검색 시스템에서 질의를 처리할 때 소요되는 시간의 대부분

은 디스크를 읽거나 쓰는데 소요 CPU의 계산 시간이나 주기억장치에 접근하는 시간은 극소

문제: 사용자가 “키워드1 키워드2”의질의를수행할때, 역색인을사용할때와사용하지않을때의수행시간비교

가정 데이터베이스: 10억개의 웹페이지들 문서의 평균 크기: 100KB 디스크의 탐색시간 = 메모리 접근 시간 = CPU의 계산 시간 = 0 디스크 전송속도 : 10MB / 초 “키워드1 키워드2”는 전체 웹페이지들 중 1%에 나타남 포스팅의 크기: 10B 1000B = 1KB, 1000KB = 1MB, 1000MB = 1TB

결과: 역색인사용하지않을때 2,778시간, 역색인사용할때 20초

예제 8

52

Page 53: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

역색인에의해속도문제해결남은문제 결과로 구해진 웹페이지들이 매우 많은 경우에는 어떤 순서에 의해

사용자에게 결과 페이지들을 보여줄 것인가? 구글의 해법: 중요도가 높은 웹페이지들을 먼저 보여주자!

그래프 노드(node)들과 에지(edge)들로 구성 웹페이지들은 하이퍼링크라는

링크를 통해 서로 연결되어 있으므로그래프 구조를 따름

그래프

53

Page 54: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

개념 어떤 노드가 페이지랭크 값이 높은 다른

노드들로부터 가리킴을 많이 받을수록그 노드의 페이지랭크 값이 높아짐

예: 포털 사이트 첫 웹페이지

계산방법 어떤 노드의 페이지랭크 값을 계산하기 위해서는 그 노드를 가리키는 다른

노드들의 페이지랭크 값을 미리 알아야만 함 한 번에 계산하는 것이 아니라 한 번 계산한 결과 값을 바탕으로 좀 더 정확

한 페이지랭크를 다시 계산함 모든 노드들의 페이지랭크가 수렴할 때까지 반복해서 계산함

페이지랭크(PageRank)

54

Page 55: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

페이지랭크계산예

각노드의초기페이지랭크값 .

전체노드들의개수

공식: · ∑ ∈ . | |

노드0의 계산: 0.85 ∗ . . . . . 0.199

55

Page 56: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

데이터마이닝(data mining) 대량의 데이터로부터 작고 유용한 정보를 추출하는 기술과 관련된

분야 실제 데이터를 기반으로 수학적인 기법들을 이용하여 정보를 추출하

는 객관적인 알고리즘을 개발하기 때문에 상당히 실용적인 분야

빅데이터(big data) 거의 모든 컴퓨터 공학 분야들과 연관이 있으므로 일종의 융합 분야 대규모의 데이터를 잘 분석함으로써 이전에 인간으로서는 미처 알기

어려운 통찰(insight)을 획득했던 사례들로부터 시작된 분야 기술적으로 초기에는 대규모 컴퓨터 클러스터 상에서 맵리듀스

(MapReduce) 프레임워크 기반의 알고리즘을 수행하는 것에 초점 지금은 기존의 DBMS를 대체할 수 있는 확장가능한 분산 빅데이터

플랫폼 기술로 발전 중

5. 그 밖의 분야

56

Page 57: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab

머신러닝 (Machine Learning) / 인공지능(Artificial Intelligence; AI) 사람의 개입 없이 복잡한 작업을 수행할 수 있는 자율 컴퓨터의 구축

을 목표로 하는 컴퓨터 과학 분야 컴퓨터에게는 매우 어려운 문제임이 밝혀져 있음 최근 딥 러닝(Deep Learning)이라 불리는 기술의 출현으로 빠르게

발전하고 있음 예: 이세돌과 알파고(AlphaGo)의 바둑 대결

57

Page 58: 2016.3.2 김민수 - infolab.dgist.ac.krmskim/SE361/slides/cs.pdf · 알고리즘 프로그래밍언어 데이터구조 ... • 예: /* 학생의 키를 나타내는 정수 변수

InfoLab