소프트웨어 & 프로그래밍 (2)
이민석
컴퓨터공학부, 국민대학교
http://scratchback.net/mis026/entry/
Naver ‘핫토픽 키워드’
2015년 5월 9일 오전 8시, 11시, 14시
세상의 많은 문제의 본질은...
• 데이터 사이의 관계를 이해하는 것
데이터의 순서
 정렬 (Sorting) : 어떤 기준이든.
데이터의 소속
 분류 (Categorizing) 및 인식 : 어떤 구분이든.
데이터의 연관성
 관계 (Relation)의 설정 : 어떤 이유이든.
데이터의 변화
 추세(Trend)의 확인 : 어떤 관점이든.
데이터의 소속
• 분류의 문제
Spam 메일 vs 중요 메일
• 인식의 문제
사과인가 배인가?
개인가 고양이인가?
이 자는 누구인가?
나이는 몇인가?
데이터의 연관성
• 두 데이터 사이의 관계
친구인가?
그렇고 그런 관계인가?
데이터의 변화
• 추세의 확인과 예측
지금까지는 어땠는데… 다음은 어떻게 될 것인가?
요약 (예, FinTech)
데이터
고객 은행
분류
관계
인식
변화
정렬
수집
신용도
• 고개에게 편리함을 제공
• 데이터를 수집
• 수집된 데이터를 열나게 처리
• 성향과 신용도를 파악
세상의 많은 문제의 본질은...
• 데이터 사이의 관계를 이해하는 것
데이터의 순서
 정렬 (Sorting) : 어떤 기준이든.
데이터의 소속
 분류 (Categorizing) 및 인식 : 어떤 구분이든.
데이터의 연관성
 관계 (Relation)의 설정 : 어떤 이유이든.
데이터의 변화
 추세(Trend)의 확인 : 어떤 관점이든.
데이터의 정렬 방식
• Simple sorts
 Insertion sort
 Selection sort
• Efficient sorts
 Merge sort
 Heap sort
 Quick sort
• Bubble sort and variants
 Bubble sort
 Shell sort
 Comb sort
• Distribution sort
 Counting sort
 Bucket sort
 Radix sort
• …
문제는 다 같다:
데이터를 순서대로 정렬하는 것
답은 다르다:
데이터의 모양에 따라서
http://en.wikipedia.org/wiki/Sorting_algorithm
Selection Shell Insertion
Merge Quick Heap
Bubble Comb Cocktail
https://www.youtube.com/watch?v=ZZuD6iUe3Pc
세상에 조건 없는 정답은 없다.
• 9가지 정렬 프로그램의 비교 (4 종류의 데이터)
Random (임의의 데이터)
Few Unique (몇 종류로 구분되는 데이터)
Reversed (완전히 순서가 거꾸로 된 데이터)
Almost Sorted (이미 거의 정렬이 된 데이터)
이 다섯 개를 정렬해보자
1
4
5
정답은 누가 봐도
2
3
1
3
2
4
5
정답은 누가 봐도
정답은 누가 봐도
컴퓨터는 그 누가가 아니다.
단계적인 접근이 필요
1
4
5
Bubble Sort: (1)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
http://en.wikipedia.org/wiki/Bubble_sort
1
4
5
Bubble Sort: (2)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (3)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (4)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (*)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
돌아가서 처음부터 다시 (두 번째 키 큰 놈 옮기기)
제일 키 큰 놈
옮기기 완료
1
4
5
Bubble Sort: (5)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (6)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (7)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (*)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
돌아가서 처음부터 다시 (세 번째 키 큰 놈 옮기기)
1
4
5
Bubble Sort: (8)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (9)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (*)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
돌아가서 처음부터 다시 (세 번째 키 큰 놈 옮기기)
1
4
5
Bubble Sort: (10)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
비교하여 왼쪽이 크면 자리 바꾸기
1
4
5
Bubble Sort: (*)
옆의 것과 비교하여 연속적으로 자리 바꾸기
2
3
Scratch로 구현한 Bubble Sort
https://scratch.mit.edu/projects/60531554/#editor
Bubble Sort: (*)
옆의 것과 비교하여 연속적으로 자리 바꾸기
N  정렬할 원소 개수
(값을 바꾼 적*이 있다면) 다음을 계속 반복 (= 최대 N-1번)
처음 원소부터 N-1 번째 원소까지 다음을 차례로 반복
만약 (현재 원소 값 > 오른쪽 원소 값) 이면
값을 맞바꿈*
한 칸 오른쪽으로 이동
N  N - 1
임의 순서의 데이터 (20개) 준비 과정
난수 얻어오기
이미 목록에 있는
숫자이면
다시 얻어오기
Order 목록에 추가하기
Bubble Sort: 정렬 알고리즘
값
맞바꾸기
비교 후
A와 B 값 바꾸기
X  A
A  B
B  X
* 이 알고리즘은 당연히 더 개선할 여지가 있습니다.
Bar 그리고 연주하기
Bar를 높이 만큼 그리기
이전에 그린 Bar 지우기
높이에 맞춰 연주하기
1
4
5
Insertion Sort: (1)
차례로 내 자리에 끼어 들어가기
2
3
http://en.wikipedia.org/wiki/Insertion_sort
앞에 것들과 비교하여 내 자리로 들어가기
*
3을 1의 앞에 넣기
1
4
5
Insertion Sort: (2)
차례로 내 자리에 끼어 들어가기
2
3
앞에 것들과 비교하여 내 자리로 들어가기
*
2를 1 앞에 넣기
1
4
5
Insertion Sort: (3)
차례로 내 자리에 끼어 들어가기
2
3
앞에 것들과 비교하여 내 자리로 들어가기
*
1, 2, 3을 한 칸씩 옮기고
4을 3 앞에 넣기
1
4
5
Insertion Sort: (4)
차례로 내 자리에 끼어 들어가기
2
3
앞에 것들과 비교하여 내 자리로 들어가기
*
1, 2, 3, 4를 한 칸씩 옮기고
5를 4 앞에 넣기
1
4
5
Insertion Sort: (*)
차례로 내 자리에 끼어 들어가기
2
3
Scratch로 구현한 Insertion Sort
https://scratch.mit.edu/projects/60531222/#editor
Insertion Sort:
차례로 내 자리에 끼어 들어가기
두 번째 원소부터 마지막 원소까지 다음을 반복
V  현재 위치의 원소 값
현재 위치 왼쪽 원소부터 첫 원소까지 차례로 다음을 반복
만약 (V < 해당 원소 값) 이면
끼워 넣을 위치로 새로 지정
해당 원소 값은 오른쪽으로 이동
아니면
반복 그만
왼쪽으로 한 칸 이동
끼워 넣을 위치의 원소 값  V
V
Insertion Sort: 정렬 알고리즘
자기보다
앞쪽의
키 큰놈들
한 칸씩
옮기기
자기 자리에 끼워 넣기
* 이 알고리즘은 당연히 더 개선할 여지가 있습니다.
끝

Data and Sorting Algoritm

  • 1.
    소프트웨어 & 프로그래밍(2) 이민석 컴퓨터공학부, 국민대학교
  • 3.
  • 6.
    Naver ‘핫토픽 키워드’ 2015년5월 9일 오전 8시, 11시, 14시
  • 7.
    세상의 많은 문제의본질은... • 데이터 사이의 관계를 이해하는 것 데이터의 순서  정렬 (Sorting) : 어떤 기준이든. 데이터의 소속  분류 (Categorizing) 및 인식 : 어떤 구분이든. 데이터의 연관성  관계 (Relation)의 설정 : 어떤 이유이든. 데이터의 변화  추세(Trend)의 확인 : 어떤 관점이든.
  • 8.
    데이터의 소속 • 분류의문제 Spam 메일 vs 중요 메일 • 인식의 문제 사과인가 배인가? 개인가 고양이인가? 이 자는 누구인가? 나이는 몇인가?
  • 9.
    데이터의 연관성 • 두데이터 사이의 관계 친구인가? 그렇고 그런 관계인가?
  • 10.
    데이터의 변화 • 추세의확인과 예측 지금까지는 어땠는데… 다음은 어떻게 될 것인가?
  • 11.
    요약 (예, FinTech) 데이터 고객은행 분류 관계 인식 변화 정렬 수집 신용도 • 고개에게 편리함을 제공 • 데이터를 수집 • 수집된 데이터를 열나게 처리 • 성향과 신용도를 파악
  • 12.
    세상의 많은 문제의본질은... • 데이터 사이의 관계를 이해하는 것 데이터의 순서  정렬 (Sorting) : 어떤 기준이든. 데이터의 소속  분류 (Categorizing) 및 인식 : 어떤 구분이든. 데이터의 연관성  관계 (Relation)의 설정 : 어떤 이유이든. 데이터의 변화  추세(Trend)의 확인 : 어떤 관점이든.
  • 13.
    데이터의 정렬 방식 •Simple sorts  Insertion sort  Selection sort • Efficient sorts  Merge sort  Heap sort  Quick sort • Bubble sort and variants  Bubble sort  Shell sort  Comb sort • Distribution sort  Counting sort  Bucket sort  Radix sort • … 문제는 다 같다: 데이터를 순서대로 정렬하는 것 답은 다르다: 데이터의 모양에 따라서 http://en.wikipedia.org/wiki/Sorting_algorithm
  • 14.
    Selection Shell Insertion MergeQuick Heap Bubble Comb Cocktail https://www.youtube.com/watch?v=ZZuD6iUe3Pc
  • 15.
    세상에 조건 없는정답은 없다. • 9가지 정렬 프로그램의 비교 (4 종류의 데이터) Random (임의의 데이터) Few Unique (몇 종류로 구분되는 데이터) Reversed (완전히 순서가 거꾸로 된 데이터) Almost Sorted (이미 거의 정렬이 된 데이터)
  • 16.
    이 다섯 개를정렬해보자
  • 17.
  • 18.
  • 19.
    정답은 누가 봐도 컴퓨터는그 누가가 아니다. 단계적인 접근이 필요
  • 20.
    1 4 5 Bubble Sort: (1) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기 http://en.wikipedia.org/wiki/Bubble_sort
  • 21.
    1 4 5 Bubble Sort: (2) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 22.
    1 4 5 Bubble Sort: (3) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 23.
    1 4 5 Bubble Sort: (4) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 24.
    1 4 5 Bubble Sort: (*) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 돌아가서 처음부터 다시 (두 번째 키 큰 놈 옮기기) 제일 키 큰 놈 옮기기 완료
  • 25.
    1 4 5 Bubble Sort: (5) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 26.
    1 4 5 Bubble Sort: (6) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 27.
    1 4 5 Bubble Sort: (7) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 28.
    1 4 5 Bubble Sort: (*) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 돌아가서 처음부터 다시 (세 번째 키 큰 놈 옮기기)
  • 29.
    1 4 5 Bubble Sort: (8) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 30.
    1 4 5 Bubble Sort: (9) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 31.
    1 4 5 Bubble Sort: (*) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 돌아가서 처음부터 다시 (세 번째 키 큰 놈 옮기기)
  • 32.
    1 4 5 Bubble Sort: (10) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3 비교하여 왼쪽이 크면 자리 바꾸기
  • 33.
    1 4 5 Bubble Sort: (*) 옆의것과 비교하여 연속적으로 자리 바꾸기 2 3
  • 34.
    Scratch로 구현한 BubbleSort https://scratch.mit.edu/projects/60531554/#editor
  • 35.
    Bubble Sort: (*) 옆의것과 비교하여 연속적으로 자리 바꾸기 N  정렬할 원소 개수 (값을 바꾼 적*이 있다면) 다음을 계속 반복 (= 최대 N-1번) 처음 원소부터 N-1 번째 원소까지 다음을 차례로 반복 만약 (현재 원소 값 > 오른쪽 원소 값) 이면 값을 맞바꿈* 한 칸 오른쪽으로 이동 N  N - 1
  • 36.
    임의 순서의 데이터(20개) 준비 과정 난수 얻어오기 이미 목록에 있는 숫자이면 다시 얻어오기 Order 목록에 추가하기
  • 37.
    Bubble Sort: 정렬알고리즘 값 맞바꾸기 비교 후 A와 B 값 바꾸기 X  A A  B B  X * 이 알고리즘은 당연히 더 개선할 여지가 있습니다.
  • 38.
    Bar 그리고 연주하기 Bar를높이 만큼 그리기 이전에 그린 Bar 지우기 높이에 맞춰 연주하기
  • 39.
    1 4 5 Insertion Sort: (1) 차례로내 자리에 끼어 들어가기 2 3 http://en.wikipedia.org/wiki/Insertion_sort 앞에 것들과 비교하여 내 자리로 들어가기 * 3을 1의 앞에 넣기
  • 40.
    1 4 5 Insertion Sort: (2) 차례로내 자리에 끼어 들어가기 2 3 앞에 것들과 비교하여 내 자리로 들어가기 * 2를 1 앞에 넣기
  • 41.
    1 4 5 Insertion Sort: (3) 차례로내 자리에 끼어 들어가기 2 3 앞에 것들과 비교하여 내 자리로 들어가기 * 1, 2, 3을 한 칸씩 옮기고 4을 3 앞에 넣기
  • 42.
    1 4 5 Insertion Sort: (4) 차례로내 자리에 끼어 들어가기 2 3 앞에 것들과 비교하여 내 자리로 들어가기 * 1, 2, 3, 4를 한 칸씩 옮기고 5를 4 앞에 넣기
  • 43.
    1 4 5 Insertion Sort: (*) 차례로내 자리에 끼어 들어가기 2 3
  • 44.
    Scratch로 구현한 InsertionSort https://scratch.mit.edu/projects/60531222/#editor
  • 45.
    Insertion Sort: 차례로 내자리에 끼어 들어가기 두 번째 원소부터 마지막 원소까지 다음을 반복 V  현재 위치의 원소 값 현재 위치 왼쪽 원소부터 첫 원소까지 차례로 다음을 반복 만약 (V < 해당 원소 값) 이면 끼워 넣을 위치로 새로 지정 해당 원소 값은 오른쪽으로 이동 아니면 반복 그만 왼쪽으로 한 칸 이동 끼워 넣을 위치의 원소 값  V V
  • 46.
    Insertion Sort: 정렬알고리즘 자기보다 앞쪽의 키 큰놈들 한 칸씩 옮기기 자기 자리에 끼워 넣기 * 이 알고리즘은 당연히 더 개선할 여지가 있습니다.
  • 47.

Editor's Notes

  • #8 순서는 : 어떤 식이든 Sorting 소속은 : Categorize 분류, 인식 : 사진을 보고 개or고양이, 사과or배 연관성은 : 관계의 정의 : 친구, 부모, 학교-학생 변화는 : 미래 예측 : 어떤 관점이든
  • #9 사진으로 성별과 나이를 잘 맞출 수 있다면… -- 예, 백화점 엘리베이터에서
  • #10 사람 사이의 관계를 잘 알 수 있다면..
  • #11 문제의 이해.. 뭘 (변화를 주도하는) 의미 있는 데이터로 볼 것인가? 유용하지만 가장 어려운 것 신용도를 조사한다면 의미있는 것과 아닌 거.
  • #12 데이터의 순서 정렬 (Sorting) : 어떤 기준이든. 데이터의 소속 분류 (Categorizing) 및 인식 : 어떤 구분이든. 데이터의 연관성 관계 (Relation)의 설정 : 어떤 이유이든. 데이터의 변화 추세(Trend)의 확인 : 어떤 관점이든.
  • #13 순서는 : 어떤 식이든 Sorting 소속은 : Categorize 분류, 인식 : 사진을 보고 개or고양이, 사과or배 연관성은 : 관계의 정의 : 친구, 부모, 학교-학생 변화는 : 미래 예측 : 어떤 관점이든