7. 세상의 많은 문제의 본질은...
• 데이터 사이의 관계를 이해하는 것
데이터의 순서
정렬 (Sorting) : 어떤 기준이든.
데이터의 소속
분류 (Categorizing) 및 인식 : 어떤 구분이든.
데이터의 연관성
관계 (Relation)의 설정 : 어떤 이유이든.
데이터의 변화
추세(Trend)의 확인 : 어떤 관점이든.
8. 데이터의 소속
• 분류의 문제
Spam 메일 vs 중요 메일
• 인식의 문제
사과인가 배인가?
개인가 고양이인가?
이 자는 누구인가?
나이는 몇인가?
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
15. 세상에 조건 없는 정답은 없다.
• 9가지 정렬 프로그램의 비교 (4 종류의 데이터)
Random (임의의 데이터)
Few Unique (몇 종류로 구분되는 데이터)
Reversed (완전히 순서가 거꾸로 된 데이터)
Almost Sorted (이미 거의 정렬이 된 데이터)
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
* 이 알고리즘은 당연히 더 개선할 여지가 있습니다.
45. Insertion Sort:
차례로 내 자리에 끼어 들어가기
두 번째 원소부터 마지막 원소까지 다음을 반복
V 현재 위치의 원소 값
현재 위치 왼쪽 원소부터 첫 원소까지 차례로 다음을 반복
만약 (V < 해당 원소 값) 이면
끼워 넣을 위치로 새로 지정
해당 원소 값은 오른쪽으로 이동
아니면
반복 그만
왼쪽으로 한 칸 이동
끼워 넣을 위치의 원소 값 V
V
46. Insertion Sort: 정렬 알고리즘
자기보다
앞쪽의
키 큰놈들
한 칸씩
옮기기
자기 자리에 끼워 넣기
* 이 알고리즘은 당연히 더 개선할 여지가 있습니다.