Slides for a small Presentation of a simple Demo written Qt and C++ in 2001. Later i ported it to Java. I did not use C++ Template Library or Java Collection but coded my dynamic Data Structure for myself and sorted it with the ancient Treesort Algorithm I had learned at University i an Lecture for funtional Programming with ML.
Slides for a small Presentation of a simple Demo written Qt and C++ in 2001. Later i ported it to Java. I did not use C++ Template Library or Java Collection but coded my dynamic Data Structure for myself and sorted it with the ancient Treesort Algorithm I had learned at University i an Lecture for funtional Programming with ML.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 서브스크립트 관련된 내용을 정리했습니다.
어려운 내용은 아닌것 같습니다. 간편하게 보세요.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
애플 스위프트 언어 개발 가이드를 기반으로 서브스크립트 관련된 내용을 정리했습니다.
어려운 내용은 아닌것 같습니다. 간편하게 보세요.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
1. 데이터 구조와 알
고리즘
퀵 정렬, 트리 정렬
Arnold Moon (arnold.spring@gmail.com)
2. 퀵 정렬은 최악의 경우에는 O(n^2)의 복잡도를 가지지만,
평균적으로 O(nlogn)의 복잡도를 가진다.
퀵정렬은 메모리 참조가 지역화 되어 있으므로 CPU 캐시
히트율이 높아서 대부분의 아키텍쳐에서 효율적으로 동작한
다. 그래서 일반적으로 다른 O(nlogn)보다 훨씬 빠르게 동작
한다.
퀵 정렬
3. 1. 입력에서 하나의 원소를 골라서 Pivot으로 지정한다.
2. Pivot 앞에는 Pivot보다 값이 작은 모든 원소들이 오고,
Pivot 뒤에는 큰 값이 오도록 해서 입력을 둘로 나눈다.
3. 나뉜 두 개의 입력에 대해 재귀적으로 이 과정을 반복한
다.
퀵 정렬
4. 퀵 정렬 - 예제
[ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ]
Pivot을 하나 지정한다. (보통 입력의 가장 왼쪽으로 지정한
다)
Pivot = 62
Pivot을 기준으로 입력을 둘로 나눈다.
5. 퀵 정렬 - 예제
[ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ]
l h
i j
low = 0, high = 9, left = 0, right = 9, pivot = 62 로 지정한다.
i 값이 pivot 보다 클 때 까지 오른쪽으로 움직인다.
그리고 j 값이 pivot 보다 작거나 같을때 까지 왼쪽으로 움직
인다.
6. 퀵 정렬 - 예제
[ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ]
l h
i j
여기서 i와 j의 위치를 교체 한다.
left = 1, right = 8이다.
7. 퀵 정렬 - 예제
[ 62, 47, 18, 53, 07, 17 , 95, 86, 83, 69 ]
l h
i j
i 값이 pivot 보다 클 때 까지 오른쪽으로 움직인다.
그리고 j 값이 pivot 보다 작거나 같을 까지 왼쪽으로 움직인
다.
8. 퀵 정렬 - 예제
[ 62, 47, 18, 53, 07, 17 , 95, 86, 83, 69 ]
l h
j i
i가 j 보다 크거나 같으면 더이상 진행 하지 않는다.
이제 low = 0, high = 9, left = 6, right = 5이다.
입력의 low에 right를 입력하고, right에 pivot을 입력한다.
[ 17, 47, 18, 53, 07, 62 , 95, 86, 83, 69 ]
9. 퀵 정렬 - 예제
[ 17, 47, 18, 53, 07, 62 , 95, 86, 83, 69 ]
이제 2개의 그룹으로 나눠서 새로 정렬한다.
[ 17, 47, 18, 53, 07 ], [ 95, 86, 83, 69 ]
10. 퀵 정렬 - 예제
[ 17, 47, 18, 53, 07 ]
l h
i j
이제 다시 처음으로 돌아가서 시작한다.
low = 0, high = 4, left = 0, right = 4, pivot = 17
i가 pivot보다 크거나 같을 때 까지 i를 옮긴다. j가 pivot보다
작을 때 까지 j를 옮긴다.
11. 퀵 정렬 - 예제
[ 17, 47, 18, 53, 07 ]
l h
i j
여기서 i와 j의 위치를 교체 한다.
left = 1, right = 4이다.
12. 퀵 정렬 - 예제
[ 17, 07, 18, 53, 47 ]
l h
i j
다시 i가 pivot보다 클 때 까지 i를 옮긴다. j가 pivot보다 작거
나 같을 때 까지 j를 옮긴다.
13. 퀵 정렬 - 예제
[ 17, 07, 18, 53, 47 ]
l h
j i
i가 j 보다 크거나 같으면 더이상 진행 하지 않는다.
이제 low = 0, high = 4, left = 2, right = 1이다.
입력의 low에 right를 입력하고, 입력의 right에 pivot을 입력
한다.
[ 07, 17, 18, 53, 47 ]
14. 퀵 정렬 - 예제
[ 07, 17, 18, 53, 47 ]
이제 또다시 pivot를 기준으로 나눌 수 있다.
[ 07 ] [ 18, 53, 47 ]
다시 [ 18, 53, 47 ]을 정렬한다.
15. 퀵 정렬 - 예제
[ 18, 53, 47 ]
l h
i j
이제 다시 처음으로 돌아가서 시작한다.
low = 0, high = 2, left = 0, right = 2, pivot = 18
i가 pivot보다 크거나 같을 때 까지 i를 옮긴다. j가 pivot보다
작을나 같을 때 까지 j를 옮긴다.
16. 퀵 정렬 - 예제
[ 18, 53, 47 ]
l h
j i
i가 j 보다 크거나 같으면 더이상 진행 하지 않는다.
이제 low = 0, high = 2, left = 1, right = 0이다.
입력의 low에 right를 입력하고, 입력의 right에 pivot을 입력
한다.
[ 18, 53, 47 ]
17. 퀵 정렬 - 예제
[ 18, 53, 47 ]
이제 또다시 pivot를 기준으로 나눌 수 있다.
[ 53, 47 ]
다시 [ 53, 47 ]을 정렬 한다.
18. 퀵 정렬 - 예제
[ 53, 47 ]
l h
i j
이제 다시 처음으로 돌아가서 시작한다.
low = 0, high = 1, left = 0, right = 1, pivot = 53
i가 pivot보다 크거나 같을 때 까지 i를 옮긴다. j가 pivot보다
작을 때 까지 j를 옮긴다.
19. 퀵 정렬 - 예제
[ 53, 47 ]
l h
i,j
i가 j 보다 크거나 같으면 더이상 진행 하지 않는다.
이제 low = 0, high = 1, left = 1, right = 1이다.
입력의 low에 right를 입력하고, 입력의 right에 pivot을 입력
한다.
20. 퀵 정렬 - 예제
[ 47, 53 ]
이제 또다시 이전 pivot를 기준으로 나눌 수 있다.
[ 47 ]
47은 더이상 정렬 할 필요가 없다.
22. 퀵 정렬 - 구현 힌트
1. 종료 조건을 찾을 것
2. 분할 정복 방법을 적용 할 것
.
.
.
.
.
http://en.wikipedia.org/wiki/Quicksort pseudocode 참고.
23. 트리 정렬은 최악의 경우에는 O(n^2)의 복잡도를 가지지
만, 평균적으로 O(nlogn)의 복잡도를 가진다.
단순하게 주어진 입력을 통해서 이진 검색 트리를 만들고,
이진 검색 트리를 탐색하여 정렬한다.
이진 검색 트리는 node와 left leaf와 right leaf 사이에 크기
규칙이 있다.
트리 정렬
24. 가운데 Root의 값이 Left Child 보다 반드
시 크고, Right Child 보다 반드시 작다.
BST(이진검색트리)에서 최대값을 찾는
연산의 복잡도는 최악의 경우에 O(n)이
다.
BST에서 원소를 삽입하는 연산의 최대
복잡도는 최악의 경우에 O(n)이다.
트리 정렬
25. 이진 트리의 특성을 생각해보면. 단순히 모든 원소를 빈
BST에 넣고, 최대값을 BST에서 찾으면 된다.
- 평균적인 경우의 복잡도를 보자.
O(모든 원소를 BST에 넣는다 + 최대값을 BST에서 찾는다.)
= O(logn * n + logn * n) = O(2nlogn) = O(logn)
트리 정렬
26. 퀵 정렬은 메모리를 O(logn)만큼 더 차지하지만,
트리 정렬을 메모리를 O(n)만큼 더 차지 한다.
퀵 정렬과 트리 정렬 비교