You are on page 1of 12

Computational Thinking

- 데이터를 어떻게 표현하느냐에 따라 문제의 해법 존재


- be creative

- 데이터에 2번의 오류 발생한 경우


ü 짝수개의 위치에서 변조 또는 오류 발생하면
패리티 비트로는 알아낼 수 없음
ü 두 군데에서 동시에 오류가 발생할 확률은 작다고 가정

3. 2차원 패리티 비트
- 송신자가 데이터를 수신자에게 전송
- 수신자가 데이터의 변조 또는 오류 확인 가능

- 이 데이터를 5비트씩 끊어 2차원으로 배치하면


<- 다음과 같이 됨.
Computational
문제 해결 과정 문제 해결 전략
Thinking

1. 문제를 이해한다.
2. 계획은 세운다. 알고리즘 설계 모델 사용
- 짝수 패리티를 가정하고 행 패리티와 열 패리티 추가하면 3. 계획을 실행한다. 데이터 분석 창조적 생각
<- 다음과 같이 됨. 4. 풀이과정 재점검

4. 바코드(bar code)
: 제품의 고유 번호를 가는 막대형 표시로 나타냄
- 빠르고 정확한 상품가격 인식이 필요
- 소개하는 바코드는 EAN코드의 바코드
원래 데이터
: 10001 01001 10110 11001 10010

패리티 추가된 데이터


: 10001 01001 10110 11001 10010 00110 00101
행 패리티 열 패리티
ü 패리티 오류가 겹치는 행, 열의 위치에 오류 발생
ü 오류 위치를 정확하게 알아낼 수 있음 - 체크디지트 계산하는 방법
바코드 =  …  /  : 체크디지트
         …    mod

- 1 -
6. 체크섬(Checksum)

국어 영어 수학
김 O O 100 90 85
이 O O 90 90 90
⋯ ⋯ ⋯ ⋯
한 O O 80 90 90

T : 원래의 데이터
[problem]
* 체크디지트를 이용해 오류 확인 가능
전송 중 데이터의 변조를 발생하거나, 저장 중 데이터의 변조
가 발생한 것을 어떻게 확인할 수 있는가?
5. ISBN(International Standard Book Number)
- 책의 고유 번호 국어 영어 수학 체크섬
- 바코드의 규정을 따름 김 O O 100 90 85 275
- ISBN 데이터의 완전성을 확인하기 위한 방법으로 이 O O 90 90 90 270
check digit 설정 ⋯ ⋯ ⋯ ⋯ ⋯
한 O O 80 90 90 260

T : 체크섬 열을 생성
- 체크섬 값 = 국어 + 영어 + 수학
(설명을 위한 단순한 방법. 다양한 방법 가능)
- 누군가가 과목의 성적을 바꾼다면 체크섬≠국어+영어+수학

T : 원래의 데이터
T' : 수신자가 받은 데이터 또는 1년후의 데이터상태
ü 변조되었다는 사실만 파악
ü 이 예에서는 변경된 데이터의 위치 확인 불가
Computational Thinking ü 과목의 성적과 체크섬을 동시에 변조하면
변조사실 확인 불가
- 패리티 비트의 개념에서 출발하여 쉽게 데이터의 [해결방안]
무결성을 확인할 수 있는 방법을 고안했다. 체크섬을 계산하는 방식을 예상하기 어렵게 만든다.
- 데이터의 변조 확인 방법을 컴퓨터에 접목하여 단순 합이 아닌 방법으로 설정
물건관리의 자동화를 할 수 있다. ex) 체크섬 = (35*국어 + 56*영어 + 2*수학*수학)/6
- be creative
- EAN bar code 무결성을 확인하는 알고리즘을
만들 수 있는가?
- 학번의 무결성을 확인하는 방법을 고안하라.

문제 해결 과정 Computational Thinking
- 각 과목 성적의 체크섬을 추가함
1. 문제를 이해한다. 알고리즘 설계
95점인 경우 각 자리수의 합으로 9+5=14 추가
2. 계획은 세운다. 데이터 표현
- 모든 과목 성적의 합 체크섬이 과목 성적과 일치하더라도
3. 계획을 실행한다. 데이터 분석
각 과목의 체크섬 확인으로 과목 성적 변조 확인 가능
4. 풀이과정 재점검 자동화

- 2 -
[해결방안] 정상 수신인 경우
Computational Thinking

- 체크섬을 계산하는 공식을 복잡하게 하여 유추할 수


없도록 한다.
- 데이터의 주기적인 체크섬 확인으로 해킹에 의한
변조를 확인할 수 있다.
- 데이터 표현을 어떻게 하느냐에 따라 변조 사실을
파악할 수 있다.
- 변조에 의해 A'가 수신된다면, h(A')≠b이므로 위변조 사실
- be creative
확인 가능

Computational [ 체크섬과 메시지 다이제스트 ]


문제 해결 과정 문제 해결 전략
Thinking

1. 문제를 이해한다.
2. 계획은 세운다. 알고리즘 설계 공식 사용
3. 계획을 실행한다. 데이터 분석 창조적 생각
4. 풀이과정 재점검

7. 메시지 다이제스트(Message Digest)


- 암호화 해시함수
- 체크섬보다 더 긴 데이터 길이의 메시지 다이제스트 생성
- 생성된 메시지 다이제스트를 이용해서 원래의 데이터를
재현하는 것이 거의 불가능
- 데이터가 바뀌면 다이제스트도 바뀜
- 문서의 위변조 유무 파악
- 이미지의 변조가 있는지 파악 가능

[problem]
그림파일 B는 그림파일 A와 동일한 것인지 확인할 방법이 있
는가?

- 이미지파일/텍스트파일이든 모든 데이터는 0/1로 구성됨


- 복잡한 해시함수(h)에 데이터(A)를 입력으로 주면 * 메시지 다이제스트의 변환함수(hash)가 가져야 할 성질
결과값(메시지 다이제스트, b)이 생성. 즉 h(A) = b (이상적)
- 그림파일(A)와 메시지다이제스트(b)를 송신 - 어떠한 데이터가 주어지더라도 해시값 쉽게 계산 가능
- 수신자는 데이터A를 미리 공유한 해시함수 h에 입력으로 - 해시값으로부터 원래의 메시지 생성 불가능
주고, 그 결과값이 b가 되는지를 확인 - 데이터가 일부 수정되면 원래 데이터의 메시지 다이제스트
- 수신자는 결과값의 동일 여부를 확인하여 위변조 여부 확인 와 동일한 메시지 다이제스트 생성 불가

- 3 -
- 특정 데이터를 찾기 위해서는 처음 데이터부터 확인하고
Computational Thinking 링크를 따라 이동하면서 확인해야함

- 패리티 비트의 개념에서 출발하여 서로 주고 받는 * best에서 e다음에 p를 삽입하는 방법


문서, 이미지 데이터의 무결성을 확인할 수 있는 방법을
고안했다.
- 데이터의 변조를 확인하여 전자상거래, 저작권 등에
활용한다.

Computational
문제 해결 과정 문제 해결 전략
Thinking

1. 문제를 이해한다. 알고리즘 설계


* 데이터 t의 검색
2. 계획은 세운다. 데이터 표현 공식 사용
3. 계획을 실행한다. 데이터 분석 창조적 생각
4. 풀이과정 재점검 자동화

---------------------------------------------

[ 중심 내용 ]
- 배열 및 연결리스트
- 선형검색
- 이분검색
- 색인순차검색
< 선형검색(Linear Search) >
- 해싱
[problem]
무작위로 문자가 표시되어 있는 카드 16장을 뒤집어 놓는다.
< 데이터의 저장과 검색 > 이 중 특정카드가 표시된 카드를 찾는다. ex) K
- 데이터의 추후 활용을 위해 데이터 저장
- 저장할 때 가능한 한 저장 공간 줄임
- 활용 시, 데이터 찾기 쉽게 저장
- 데이터를 찾는 방법과 저장 방법에는 직접적인 관계 있음
- 대규모의 데이터를 저장, 검색하므로
저장, 검색 방법의 중요성 증대 Computational
문제 해결 과정 문제 해결 전략
Thinking
< 배열 >
1. 문제를 이해한다.
- 사용할 공간을 초기에 설정한 후, 변경 불가능
2. 계획은 세운다. 알고리즘 설계 순서 리스트 작성
- 초기에 설정한 데이터의 개수보다 더 많은 데이터가
3. 계획을 실행한다. 데이터 모음 그림을 그린다
입력될 경우, 저장 불가능
4. 풀이과정 재점검
- 크기가 고정된 데이터 저장에 사용 ex) 월별 판매액
- 데이터가 저장된 위치를 아는 경우 데이터 값 쉽게 확인 알고 있는 데이터나 정보는 무엇인가?
- 배열에 저장되어있는 특정 데이터의 저장 위치 → 카드의 장수, 찾으려는 카드
(첨자, 인덱스)를 모르는 상태에서 특정 데이터를 찾기 모르는 것은 무엇인가?
위해서는 배열의 제일 처음부터 위치는 변경하면서 하나씩 → 찾으려고 하는 카드의 위치
찾아 나가야함 조건들은 무엇인가?
- 데이터의 개수가 가변적일 때 사용 → 한 번에 한 장의 카드의 문자가 보이게 하여 찾는 카드가
- 메모리 크기의 한도에 도달하지 않는 한, 데이터 추가 가능 맞는지 확인
(어느 위치에도 추가 가능) → 찾는 카드가 전체 카드 내에 반드시 있는지 불분명
- 데이터의 삭제 쉬움 있을 경우와 없을 경우로 나누어서 생각해야 함

- 4 -
[해결방법]
- 카드의 가장 왼쪽(처음)부터 시작하여 한 장씩 뒤집으면서
찾는 카드가 맞는지 확인
- 찾는 카드가 맞으면 종료/아니면 오른쪽으로 이동

의사코드

흐름도

- 한 장의 카드를 뒤집어서 찾는 카드인지 확인 작업 필요


- K를 찾기 위해 몇 번의 확인 작업이 필요했나? 8회
- 데이터가 선형적으로 정리되어 있을 때 사용 가능
- 알고리즘이 단순하고 구현 쉬움
Computational Thinking

- 데이터가 일직선으로 저장되어 있는 것처럼 생각 가능


- 데이터가 배열/연결리스트에 저장되어 있을 경우,
사용 가능
- 이 방법을 사용하기 위해서는 데이터가 정렬(sort)되어
있어야 하나?
- 문자를 선택할 확률이 서로 다르다면 어떻게 될까?
- 데이터의 개수가 n개 일 때, 결과는 어떻게 표시가능?
- 이 방법은 데이터의 개수가 많을 경우 비효율적,
왜 그런가?

- 5 -
의사코드
컴퓨터 과학

- 이 문제에서 데이터는 선형적으로 저장되었다고 함


- 데이터를 찾는 방법은 선형 검색(linear search)

[찾는 데이터 존재할 경우]


비교횟수 : 최소 1회 / 최대n 회.
  
평균 :  (n : 홀수) /  or    (n : 짝수)
  

[찾는 데이터 존재하지 않을 경우]


데이터의 끝까지 가야 없는 것을 확인가능
n번의 데이터 비교 필요함 흐름도

+ 정렬(sort)
데이터는 숫자, 문자로 구성됨
각 구성요소는 값의 대소 순서가 미리 정해져있음
데이터 값이 증가/감소 순서로 데이터 정리하는 작업

< 이분검색(Binary Search) >


[problem]
문자가 표시되어있는 카드 16장을 뒤집어 놓는다.
이 중 특정 카드가 표시된 카드를 찾는다. ex) G
이때 카드는 오름차순 정렬

- 매 단계에서 남는 카드열의 장수가 이전의 반으로 줄어듬


- 어느 경우에 카드 비교 횟수가 제일 작았나?
- 어느 경우에 카드 비교 횟수가 제일 컸나?
- 찾으려는 카드가 주어진 카드 열에 없을 때는?

Computational Thinking 문제 해결 전략 Computational Thinking

- 찾는 데이터가 있을 영역을 확인하고


분해 가능성 없는 영역 제외
가능성들을 제거
알고리즘 설계 - 같은 방식을 작은 문제에 동일하게 적용
대체 성질을 이용
데이터 모음 - 이런 방식을 분할정복 알고리즘
- 데이터가 정렬되어 있지 않아도 적용가능한가? no

컴퓨터 과학

- n개의 데이터가 존재하는 자료에서 이분 검색을


사용하여 하나의 데이터를 찾는데 필요한 데이터
비교 횟수 : 최소 1회 / 최대 log  
- log   : 마루함수(floor function)

 
* 카드열의 중앙 :  (짝수) /  (홀수)
 

- 6 -
< 색인순차검색(Indexed Sequential Search) >
색인(인덱스) : 사전, 전화번호부에서 특정 알파벳이 시작하는 Computational Thinking
위치를 쉽게 찾을 수 있도록 표시해둔 것.
[풀이과정 재점검]
- 특정 데이터 검색 시, 먼저 색인 확인하고 해당 위치로 - 데이터를 어떻게 표현하고 변환했는가?
이동한 후 순차적으로 검색하는 방법 - 데이터의 변환 공식을 어떻게 작성했는가?
- 컴퓨터에 저장된 데이터도 색인순차검색으로 찾을 수 있음 - 5명의 학생이 있을 때, 미리 10개의 새로운 번호를
* 데이터가 정렬되지 않아도 무방 준비해서 5명의 학생에게 새로운 해시함수를 이용해서
부여하면 어떻게 될까? 설계해보시오.
< 해싱(Hashing) > - 10명의 사람이 있다. 이 사람들에게 0-9까지의 새로운
[problem] 번호를 부여할 수 있는 해시함수를 설계하시오.
5명의 학생에게 4자리의 수를 이용해서 학번을 부여했다. - 설계한 해시함수가 적절한 지 10개의 데이터를
학생을 4자리 학번으로 구분하려니 매번 4자리 수를 표시해 이용해서 검증하시오.
야 하므로 단순화하기로 한다. 5명의 학생들을 0,1,2,3,4 숫자
를 이용하여 나타낼 수 있는 방법을 설계하시오. ---------------------------------------------
→ 학생들에게 새로운 번호를 부여하는 것은
특정 공간에 정보를 저장하는 것과 동일 [ 중심 내용 ]
- 이진검색트리
- 최대값 및 최소값 검색

< 이진검색트리(Binary Search Tree) >


[problem]
트리를 이용하여 데이터를 쉽게 저장하고 검색할 수 있는 방
법을 고안하시오.
Computational
[단순한 방법] 문제 해결 과정 문제 해결 전략
Thinking
현재의 순서대로 학생들을 배정(저장에 규칙 없음)
☞ 어떤 학생이 어느 장소에 저장되었는지 확인 어려움 1. 문제를 이해한다.
알고리즘 설계
2. 계획은 세운다. 그림을 그린다
Computational 문제 해결 데이터 모음
문제 해결 과정 3. 계획을 실행한다. 모델 사용
Thinking 전략 데이터 표현
4. 풀이과정 재점검
1. 문제를 이해한다. 알고리즘 설계
2. 계획은 세운다. 데이터 모음 공식 사용 * 하위트리
3. 계획을 실행한다. 데이터 표현 창조적 생각
4. 풀이과정 재점검 데이터 분석

[해결방안]
각 학생의 학번의 각 자릿수를 합친 후 5로 나눈다.
이 때, 나머지를 학생의 새로운 구분번호로 한다.
ex) 1507 → 1+5+0+7 = 13, 13/5 = 2, 나머지 3
* 체크섬의 일종

- 자릿수합/5의 나머지를 구하는 연산 : 해시함수


- 해시함수를 이용해 새로운 값 부여 : 해싱(Hashing)
[problem]
- 다양한 해시함수 가능
안내판을 보고 특정 번지수를 찾아간다.
- 데이터의 검색 쉽게 이루어짐 - 갈림길과 막다른 길에는 안내판이 있다.
- 그림에 있는 안내판들의 위치와 숫자의 관계를 알 수 있나?

- 7 -
* 데이터가 트리 내부에 없을 수도 있을 경우
의사코드

- 우리가 보는 방향에서 안내판의 왼쪽으로 가게 되면


안내판보다 작은 번지수들이 위치. 오른쪽으로 가게 되면
안내판보다 큰 번지수들이 위치
- 갈림길마다 동일한 성질이 적용

흐름도

- 트리구조를 이용해서 데이터의 성질을 고려한 저장구조


- 노드 A의 왼쪽 하위트리에는 A보다 작은 데이터 저장
- 노드 A의 오른쪽 하위트리에는 A보다 큰 데이터 저장
- 각 노드마다 재귀적으로 적용한 트리

* 검색은 항상 뿌리(root)에서 출발함

의사코드

* 이진검색트리에 데이터 추가할 때


(이미 있는 데이터는 추가안함.)
ex) 79추가

흐름도
- 80에서 왼쪽 노드가 없다는 것을 확인한 후,
79를 80의 왼쪽자식노드로 추가

- 8 -
* 새로운 데이터 추가(이미 있는 데이터는 추가 안할 경우) [연습문제]
의사코드 데이터가 1 10 2 9 3 8 4의 순서로 입력될 경우의 이진검색
트리를 작성하시오.

* 이진검색트리에서 하나의 데이터를 삭제하는 방법


1. 두 개의 자식노드가 있는 노드가 삭제될 경우

흐름도

2. 한 개의 자식노드가 있는 노드가 삭제될 경우


* 이진검색트리 만드는 과정
[연습문제]
데이터가 한 개씩 50 40 70 20 30 25 15 90 85 60 64 53
의 순서로 발생한다고 가정.
이진검색츠리에 저장하는 과정을 그려보시오.

+ 이진검색트리를 inorder로 방문하면 정렬된 데이터의 순서


를 얻을 수 있음.

[연습문제]
데이터 5 1 3 9 7 2 4 6 8을 이용하여 이진검색트리를 완성
하시오.

- 9 -
< 최적 이진검색트리 >
[problem] 컴퓨터 과학
다음의 단어를 이진검색트리에 저장한다.
- 이진검색트리는 데이터베이스에서 자료를 저장하는
the, be, and, of, a
기본 구조로 사용됨
어떻게 저장할 때 단어의 평균검색시간을 최소로 할 것인가?
- 데이터의 생성 순서에 따라 이진검색트리 달라짐
- 어떤 경우에는 이진검색트리가 단순히 연결리스트의
구조가지게 됨
- n개의 데이터가 저장된 이진검색트리에서 하나의
데이터를 찾는 평균 시간은  log 우수한 성능 보임

< 최대값(최소값)찾기 >


[problem]
다음 자료에서 최대값 또는 최소값을 찾는 방법을 고안하시오

Computational
문제 해결 과정 문제 해결 전략
Thinking

* 각 단어를 검색할 확률이 동일하다면 1. 문제를 이해한다.


가능성들을 제거
두 종류의 이진검색트리는 동일한 평균검색시간 소요 2. 계획은 세운다. 알고리즘 설계
직접 추론 사용
3. 계획을 실행한다. 데이터 모음
잔꾀를 사용
4. 풀이과정 재점검

- 데이터는 선형적으로 저장되어있다고 가정


ü 배열 / 연결리스트의 형태 가정
ü 데이터 내에 같은 값 갖는 데이터 없다고 가정
- 최소값 찾기 문제는 최대값 찾기 문제와 유사하게 풀이가능
ü 데이터의 비교 시, 반대로 수행
- 단어의 검색확률이 다르면, 이진검색트리의 종류마다 - 제일 처음 데이터가 최대이더라고 나머지 데이터 확인 없이
평균검색시간이 달라짐 최대인지 확신 불가
- 실제로 단어의 검색활률 서로 다름
- 최소의 평균검색시간을 제공하는 트리 * 최대값을 찾는 알고리즘
☞ 최적의 이진검색트리 의사코드
- 해결 아이디어 : 자주 검색하는 단어는 뿌리노드에 가깝게
어쩌다 검색하는 단어는 멀리
- 최적 이진검색트리 찾는 문제는 매우 풀기 어려운 문제임

Computational Thinking

- 데이터는 선형적이지 않은 어떤 구조에 저장되었는가?


- 선형구조보다 데이터를 빨리 찾을 수 있는 요인은?
- 일상 생활에서 이진검색츠리의 전략이 포함된 사례는?
- 특정 데이터가 더 이상 필요 없을 때는?
- 데이터를 이진검색트리에 저장하였더니,
자료가 정렬되었다. 무슨 이유에서 될 수 있을까?

- 10 -
흐름도
컴퓨터 과학

- 최대값(최소값)을 구하는 방법은 가장 기본적인 방법


- 다른 방법으로도 구할 수 있으나 이 방법보다 데이터의
비교횟수가 작은 방법은 존재하지 않음
- n개의 데이터가 있을 때, n-1의 데이터 비교가 있어야
최대값(최소값) 찾을 수 있음
- n이 큰 경우, 시간이 많이 소요되므로 다른 자료구조를
이용해서 데이터를 저장 ; 트리구조 사용

< 최대값과 최소값 모두 찾기 >


[problem]
데이터에 있는 최대값, 최소값을 모두 찾을 수 있는 효과적인
* 최소값을 찾는 알고리즘 방법을 고안하시오.
의사코드 Computational
문제 해결 과정 문제 해결 전략
Thinking

1. 문제를 이해한다.
가능성들을 제거
2. 계획은 세운다. 알고리즘 설계
직접 추론 사용
3. 계획을 실행한다. 데이터 모음
잔꾀를 사용
4. 풀이과정 재점검

[방법1]
최소값을 먼저 찾고, 나머지 데이터에서 최대값 찾는다.

[연습문제]
다음 자료에 대해 최소값을 구하는 방법을 적용해보시오.

[방법2]
단계1 : 모든 데이터에 대해 인접한 두 개의 데이터를
비교하여 둘 중 작은 값, 큰 값을 구분한다.
단계2 : 작은 값들의 집단S, 큰 값들의 집단L을 구성한다.
단계3 : S에서 최소값을, L에서 최대값을 찾는다.

Computational Thinking

- 실생활에서 이런 방법을 쓰는 경우를 생각해보시오.


- 데이터가 선형이 아닌 구조에 저장되어있을 때 어떻게
최대값(최소값) 데이터를 찾을 수 있을까?
- 데이터의 개수가 n일 때, 최대값(최소값)을 찾으려면 전체에서 묶음에 대해 비교하는데 4회
몇 번의 데이터 비교가 필요할까? S에서 최소값 찾는데 3회 → 총 10회
- 데이터가 선형적으로 저장되어 있을 때, 설명한 방법 L에서 최대값 찾는데 3회
보다 더 빨리 찾는 방법이 있을까?

- 11 -
[연습문제]
4 3 7 8 10 2 5 1 6 9에서 최대값, 최소값을 찾으시오.

Computational Thinking

- 두 방법 간의 효율성 차이는 어디서 기인했는지 생각


- 알고리즘의 초기 단계에서 작은 값들의 집단, 큰 값들
의 집단으로 나누어서 불필요한 비교를 없앤다. - why?
- 이 경우 복합문제는 단위문제의 합이 아니었다.

컴퓨터 과학

- n개의 데이터가 있는 자료에서


[방법1]
  회의 데이터 비교 필요
[방법2]
  
    (짝수) /     (홀수) 의 데이터 비교 필요
  

- 12 -

You might also like