SlideShare a Scribd company logo
1 of 42
Download to read offline
Seungdols
http://seungdols.tistory.com/
알고리즘 스터디
Algorithm Study
Index
하나,
기본 개념
둘,
Sort 소개
셋,
생각 해보기
넷,
질의응답
하나, 기본 개념
정렬 알고리즘이란 원소들을 번호순이나 사전 순서와 같이
일정한 순서대로 열거하는 알고리즘이다.
하나, 기본 소개
Stability?!
하나, 기본 소개
정렬시 안정적인지? 아닌지?
Stability?!
하나, 기본 소개
그림과 같이 기존 원소와
정렬 된 원소 결과가
같은 값에 대해 순서가 유지 되는지!!
Stability?!
하나, 기본 소개
하나, 기본 소개
하나, 기본 소개
하나, 기본 소개
다양한 정렬 기법이 존재.
내가 배울 땐..저런거 배우지… 않…
하나, 기본 소개
Heap Sort 를 쓰기 위해 Heap 먼저 구성 해야 한다.
하나, 기본 소개
HeapSort를 사용하기 위해서는 BuildHeap 과정을 거쳐,
Max – Heap / Min – heap을 구성 해야 한다.
Heap이란 자료구조는 쉽게 말해, 완전 이진 트리의 한 종류이며,
Max – Heap 의 경우 Root (부모) 노드가 자식 노드 보다 값이 크다.
Min – Heap 의 경우 Root(부모) 노드가 자식 노드 보가 값이 작다.
고로, 최상위 Root의 경우 트리 내 (최대힙) 가장 최대의 값을 가지거나,
(최소힙) 가장 최소의 값을 가지게 된다.
하나, 기본 소개
HeapSort
하나, 기본 소개
HeapSort
하나, 기본 소개
HeapSort의 특징은 무엇일까요 ?
하나, 기본 소개
HeapSort의 특징은 무엇일까요 ?
Worst-case이더라도 O ( n log n )의 성능
하나, 기본 소개
Selection Sort란 주어진 원소 내에서 최솟값을 찾고, 그 최솟값을
앞으로 보내며 정렬 하는 방식이다.
• 가장 앞부터 정렬이 되기 시작한다.
• 버블 정렬의 경우 제일 뒤부터 정렬이 됨.
하나, 기본 소개
InPlaceSelectionSort
하나, 기본 소개
원소를 비교하며 , 해당 원소가 들어갈
적절한 위치를 찾아 해당 위치에 삽입하는 정렬.
즉, 앞부터 정렬 되어가면서 더 작은 값이 나오면,
앞에 있는 원소들이 모두 한 칸씩 뒤로 밀린다.
하나, 기본 소개
InPlaceInSertSort
하나, 기본 소개
InPlaceSelectionSort
둘, QuickSort 소개
원소 하나를 기준(피벗, pivot)으로 삼아 피벗 기준으로
좌측은 피벗 보다 더 작은 값 , 우측은 피벗 보다 큰 값으로 정렬 후.
피벗 기준으로 분할
나누어진 좌/우에서 다시 피벗을 잡고 다시 퀵 정렬을 실시한다.
분할 된 크기가 0이나 1이 될 때까지 정렬한다.
즉, 퀵 정렬은 Recursive 하게 동작 함.
찰스 앤터니 리처드 호어가 개발한 정렬 알고리즘.
Pivot
파란색은 피벗보다 작거나 같고
빨간색은 피벗보다 크다.
둘, QuickSort 소개
최악의 경우에는 시간복잡도가 O(n2)가 되는데, 피벗을 최솟값이나 최댓값으로
계속해서 잡게 되는 경우.
대표적인 예로는 피벗을 항상 배열의 첫 원소로 잡도록 구현한 알고리즘으로 이미
정렬된 배열을 정렬할 경우.
데이터가 극단적이면, 대충 구현된 퀵정렬은 최악의 결과를 초래함.
이를 방지하기 위하여 여러 기법들이 개발 되었는데,
대표적인 것이 피벗을 랜덤으로 잡는 것.
또는, 배열 중에 3개의 원소를 골라 중앙값을 피벗으로 고름.
둘, QuickSort 소개
QuickSort가 평균적인 복잡도는 O ( n log n)
단, 가장 최악의 Case의 복잡도는 O ( 𝑛2
)이지만, 대부분의 컴퓨터 아키텍처에서
효율적으로 작동하도록 설계 되어있고, 제곱 시간이 걸릴 확률이 거의 없도록
알고리즘을 설계 하는 것이 가능하다.
둘, Radix Sort 소개
기수 정렬은 자릿수가 있는 데이터(정수, 문자열 등)에서만 수행이 가능하며,
데이터끼리의 직접적인 비교 없이 정렬.
비교를 이용한 정렬이 아니기 때문에 k가 상수일 경우 시간복잡도가 O(n)으로
퀵정렬보다 빠른 시간복잡도가 나오는 것이 가능.
자릿수가 적은 4바이트 정수 등에서나 제대로 된 성능을 발휘할 수 있으며,
자릿수가 무한에 가까운 문자열 정렬 등에 사용할 경우
오히려 퀵정렬 보다 느릴 수 있고, 부동 소수점 등을 정렬에는 사용할 수가 없음.
둘, Radix Sort 소개
둘, Counting Sort 소개
Counting Sort의 큰 특징은 데이터 내의 가장 큰 값에 효율이 결정.
특정 데이터의 개수를 데이터의 값에 대응하는 위치에 저장.
자신의 위치에서 앞에 있던 값을 모두 더한 배열을 만들고,
데이터가 들어가야 할 위치를 찾아내는 알고리즘
복잡도는 데이터의 최댓값이 K라면 시간 복잡도는 O ( n + K )에 달한다.
단, K 값이 억 단위로 넘어간다면 시간은 기하급수적으로 상승하여 n이 작아도
시간이 오래 걸림.
반대로 K 작다면, 선형시간 내에 정렬을 끝냄.
둘, Counting Sort 소개
5 12 7 10 12
0 00 0 1 2
a[0] a[1] a[12]
K = 12
a[0] a[1] a[3] a[4]a[2]
Counting Arr[K + 1]
a[3] a[4]a[2]
데이터 원소 내 가장 큰 값을 K로 설정한다.
CountingArr[k+1]을 생성 후
둘, Counting Sort 소개
5 12 7 10 12
0 00 0 1 2
a[0] a[1] a[12]
K = 12
a[0] a[1] a[3] a[4]a[2]
Counting Arr[K + 1]
5 7 10 12 12 Result
a[0] a[1] a[3] a[4]a[2]
a[3] a[4]a[2]
데이터 원소를 순회하며, 숫자 값에 해당 하는 CountingArr 원소 위치에 + 1을 해준다.
둘, Counting Sort 소개
5 12 7 10 12
0 00 0 1 2
a[0] a[1] a[12]
K = 12
a[0] a[1] a[3] a[4]a[2]
Counting Arr[K + 1]
5 7 10 12 12 Result
a[0] a[1] a[3] a[4]a[2]
a[3] a[4]a[2]
Counting Arr의 배열을 순회하며, 0이 아니면,
값을 -1을 하고, result 배열에 (원소번호)해당하는 숫자 값을 써준다.
예시에서는 a[4]에 1이므로 -1을 해주고, Result 배열 첫 번째에 5를 넣어준다.
0이 되었으므로 다음 원소로 넘어간다.
이런 방법으로 카운팅 배열 원소를 모두 순회함.
둘, Shell Sort 소개
삽입정렬이 거의 정렬된 배열에서 최적의 성능을 내는 것에 착안한 정렬 방법.
특징을 잘 이용한 정렬기법이며, 구조를 어떻게 하느냐에 따라
성능이 최대 O( 𝑛1.25
)의 성능을 보이기도 하여, Heap Sort에 버금 갈 정도.
둘, Shell Sort 소개
쉘 정렬은 삽입정렬의 단점을 제거하고, 효율을 높인 정렬 기법으로 생각 할 수 있음.
요소들이 삽입 될 때 이웃한 위치로만 이동을 하게 되는데, 이 거리가 멀면 멀수록
Overhead가 증가하게 된다.
데이터를 일정의 간격을 만들고, 이 간격만큼
삽입 정렬을 통하여 정렬을 실행함. ( 데이터가 부분적 정렬 상태가 됨 )
간격을 줄이다가 간격이 1이 되면 거의 정렬 된 리스트를 마지막으로
삽입정렬을 이용해 완전하게 정렬 된 결과를 얻을 수 있게 됨.
둘, Shell Sort 소개
5 568 77 13 90
a[0] a[1] a[12]a[3] a[4]a[2]
10 85 77 18 90
a[0] a[1] a[12]a[3] a[4]a[2]
Gap = 5
Gap = 3
5 108 18 77 90
a[0] a[1] a[12]a[3] a[4]a[2]
Gap = 1
Gap = 1 인 상황은 거의 정렬이 된 상태에서 마지막으로 삽입정렬을 수행.
셋, 생각 해보기
어떤 정렬 기법을 써야 하는가 ?
정렬 되어야 하는 데이터 값들이 큰 경우 !
셋, 생각 해보기
어떤 정렬 기법을 써야 하는가 ?
정렬 되어야 하는 데이터 값들이 큰 경우 !
셋, 생각 해보기
어떤 정렬 기법을 써야 하는가 ?
정렬 되어야 하는 데이터 값들이 큰 경우 !
정렬 되어야 하는 값들이 많은 경우 !
셋, 생각 해보기
어떤 정렬 기법을 써야 하는가 ?
정렬 되어야 하는 데이터 값들이 큰 경우 !
어떤 상황에서도 평균적인 속도를 내야 하는 경우!
정렬 되어야 하는 값들이 많은 경우 !
셋, 생각 해보기
정렬 기법들 중에서 가장 구현 하기 쉬운 것은 ?
셋, 생각 해보기
정렬 기법들 중에서 가장 구현 하기 쉬운 것은 ?
정렬 기법들 사용시 공간 복잡도에 대해서도 고려 해야 할까?
셋, 생각 해보기
정렬 기법들 중에서 가장 구현 하기 쉬운 것은 ?
정렬 기법들 사용시 공간 복잡도에 대해서도 고려 해야 할까?
공간 복잡도까지 고려 했을 때 어느 정렬을 써야 할까?
넷, 질의응답
단, 저는 아는 것만 대답합니다.
질문 받습니다.
Seungdols
감사합니다.

More Related Content

What's hot

R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차Moonki Choi
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차Moonki Choi
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째Jaeseok Park
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced partNAVER D2
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Treehyun soomyung
 
Binary Search
Binary SearchBinary Search
Binary Searchskku_npc
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R BasicsYoonwhan Lee
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀beom kyun choi
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regressionHaesun Park
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디대영 노
 
Data Structures
Data StructuresData Structures
Data Structuresskku_npc
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째Jaeseok Park
 
말의여행
말의여행말의여행
말의여행mil23
 
2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차Moonki Choi
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 

What's hot (20)

R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Tree
 
Binary Search
Binary SearchBinary Search
Binary Search
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regression
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
Data Structures
Data StructuresData Structures
Data Structures
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
자료구조02
자료구조02자료구조02
자료구조02
 
말의여행
말의여행말의여행
말의여행
 
2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 

Viewers also liked

BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크
BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크
BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크Editorial Benefit
 
[C언어의정석] ch7 포인터(pointer)
[C언어의정석] ch7 포인터(pointer)[C언어의정석] ch7 포인터(pointer)
[C언어의정석] ch7 포인터(pointer)성 남궁
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
물리기반렌더링 알레고리드믹 한국어 번역
물리기반렌더링 알레고리드믹 한국어 번역물리기반렌더링 알레고리드믹 한국어 번역
물리기반렌더링 알레고리드믹 한국어 번역Dae Hyek KIM
 
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스Minkyu Cho
 
The Brand of Higher Education: Context for The Conflict
The Brand of Higher Education: Context for The ConflictThe Brand of Higher Education: Context for The Conflict
The Brand of Higher Education: Context for The Conflictidfive
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양Jubok Kim
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료Sangsu Song
 
신입 개발자 생활백서
신입 개발자 생활백서신입 개발자 생활백서
신입 개발자 생활백서Yurim Jin
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들Jinsub Jung
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qaNAVER D2
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육승엽 신
 
2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태NAVER D2
 

Viewers also liked (20)

BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크
BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크
BENEFIT MAGAZINE_레고가 도시의 상흔을 치유한다: 디스패치워크
 
Advanced git
Advanced gitAdvanced git
Advanced git
 
[C언어의정석] ch7 포인터(pointer)
[C언어의정석] ch7 포인터(pointer)[C언어의정석] ch7 포인터(pointer)
[C언어의정석] ch7 포인터(pointer)
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
물리기반렌더링 알레고리드믹 한국어 번역
물리기반렌더링 알레고리드믹 한국어 번역물리기반렌더링 알레고리드믹 한국어 번역
물리기반렌더링 알레고리드믹 한국어 번역
 
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
 
The Brand of Higher Education: Context for The Conflict
The Brand of Higher Education: Context for The ConflictThe Brand of Higher Education: Context for The Conflict
The Brand of Higher Education: Context for The Conflict
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료
 
신입 개발자 생활백서
신입 개발자 생활백서신입 개발자 생활백서
신입 개발자 생활백서
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
[4차]왓챠 알고리즘 분석(151106)
[4차]왓챠 알고리즘 분석(151106)[4차]왓챠 알고리즘 분석(151106)
[4차]왓챠 알고리즘 분석(151106)
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qa
 
[4차]넷플릭스 알고리즘 분석(151106)
[4차]넷플릭스 알고리즘 분석(151106)[4차]넷플릭스 알고리즘 분석(151106)
[4차]넷플릭스 알고리즘 분석(151106)
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태
 

Similar to 알고리즘 스터디(정렬) Seungdols

[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - HeapBill Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick SortBill Kim
 
정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx
정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx
정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptxkoi312500
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
자료구조6보고서
자료구조6보고서자료구조6보고서
자료구조6보고서KimChangHoen
 
Project#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 HwpProject#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 HwpKimjeongmoo
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
Shell, merge, heap sort
Shell, merge, heap sortShell, merge, heap sort
Shell, merge, heap sortHyun Jin Moon
 
Binary search tree
Binary search treeBinary search tree
Binary search treeMelon Lemon
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree승혁 조
 

Similar to 알고리즘 스터디(정렬) Seungdols (20)

[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
알고리즘
알고리즘알고리즘
알고리즘
 
6. Sorting
6. Sorting6. Sorting
6. Sorting
 
06. sorting
06. sorting06. sorting
06. sorting
 
정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx
정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx
정렬 알고리즘 작동 방식 및 예시 발표 & GPT 코드 비교 진행.pptx
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
자료구조6보고서
자료구조6보고서자료구조6보고서
자료구조6보고서
 
Project#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 HwpProject#6 오탈자 검사 D0 Hwp
Project#6 오탈자 검사 D0 Hwp
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
Shell, merge, heap sort
Shell, merge, heap sortShell, merge, heap sort
Shell, merge, heap sort
 
Binary search tree
Binary search treeBinary search tree
Binary search tree
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
BOJ10547
BOJ10547BOJ10547
BOJ10547
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree
 
Quick sort
Quick sortQuick sort
Quick sort
 
sort algorithim
sort algorithimsort algorithim
sort algorithim
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 

알고리즘 스터디(정렬) Seungdols

  • 3. 하나, 기본 개념 정렬 알고리즘이란 원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘이다.
  • 5. 하나, 기본 소개 정렬시 안정적인지? 아닌지? Stability?!
  • 6. 하나, 기본 소개 그림과 같이 기존 원소와 정렬 된 원소 결과가 같은 값에 대해 순서가 유지 되는지!! Stability?!
  • 10. 하나, 기본 소개 다양한 정렬 기법이 존재. 내가 배울 땐..저런거 배우지… 않…
  • 11. 하나, 기본 소개 Heap Sort 를 쓰기 위해 Heap 먼저 구성 해야 한다.
  • 12. 하나, 기본 소개 HeapSort를 사용하기 위해서는 BuildHeap 과정을 거쳐, Max – Heap / Min – heap을 구성 해야 한다. Heap이란 자료구조는 쉽게 말해, 완전 이진 트리의 한 종류이며, Max – Heap 의 경우 Root (부모) 노드가 자식 노드 보다 값이 크다. Min – Heap 의 경우 Root(부모) 노드가 자식 노드 보가 값이 작다. 고로, 최상위 Root의 경우 트리 내 (최대힙) 가장 최대의 값을 가지거나, (최소힙) 가장 최소의 값을 가지게 된다.
  • 15. 하나, 기본 소개 HeapSort의 특징은 무엇일까요 ?
  • 16. 하나, 기본 소개 HeapSort의 특징은 무엇일까요 ? Worst-case이더라도 O ( n log n )의 성능
  • 17. 하나, 기본 소개 Selection Sort란 주어진 원소 내에서 최솟값을 찾고, 그 최솟값을 앞으로 보내며 정렬 하는 방식이다. • 가장 앞부터 정렬이 되기 시작한다. • 버블 정렬의 경우 제일 뒤부터 정렬이 됨.
  • 19. 하나, 기본 소개 원소를 비교하며 , 해당 원소가 들어갈 적절한 위치를 찾아 해당 위치에 삽입하는 정렬. 즉, 앞부터 정렬 되어가면서 더 작은 값이 나오면, 앞에 있는 원소들이 모두 한 칸씩 뒤로 밀린다.
  • 22. 둘, QuickSort 소개 원소 하나를 기준(피벗, pivot)으로 삼아 피벗 기준으로 좌측은 피벗 보다 더 작은 값 , 우측은 피벗 보다 큰 값으로 정렬 후. 피벗 기준으로 분할 나누어진 좌/우에서 다시 피벗을 잡고 다시 퀵 정렬을 실시한다. 분할 된 크기가 0이나 1이 될 때까지 정렬한다. 즉, 퀵 정렬은 Recursive 하게 동작 함. 찰스 앤터니 리처드 호어가 개발한 정렬 알고리즘. Pivot 파란색은 피벗보다 작거나 같고 빨간색은 피벗보다 크다.
  • 23. 둘, QuickSort 소개 최악의 경우에는 시간복잡도가 O(n2)가 되는데, 피벗을 최솟값이나 최댓값으로 계속해서 잡게 되는 경우. 대표적인 예로는 피벗을 항상 배열의 첫 원소로 잡도록 구현한 알고리즘으로 이미 정렬된 배열을 정렬할 경우. 데이터가 극단적이면, 대충 구현된 퀵정렬은 최악의 결과를 초래함. 이를 방지하기 위하여 여러 기법들이 개발 되었는데, 대표적인 것이 피벗을 랜덤으로 잡는 것. 또는, 배열 중에 3개의 원소를 골라 중앙값을 피벗으로 고름.
  • 24. 둘, QuickSort 소개 QuickSort가 평균적인 복잡도는 O ( n log n) 단, 가장 최악의 Case의 복잡도는 O ( 𝑛2 )이지만, 대부분의 컴퓨터 아키텍처에서 효율적으로 작동하도록 설계 되어있고, 제곱 시간이 걸릴 확률이 거의 없도록 알고리즘을 설계 하는 것이 가능하다.
  • 25. 둘, Radix Sort 소개 기수 정렬은 자릿수가 있는 데이터(정수, 문자열 등)에서만 수행이 가능하며, 데이터끼리의 직접적인 비교 없이 정렬. 비교를 이용한 정렬이 아니기 때문에 k가 상수일 경우 시간복잡도가 O(n)으로 퀵정렬보다 빠른 시간복잡도가 나오는 것이 가능. 자릿수가 적은 4바이트 정수 등에서나 제대로 된 성능을 발휘할 수 있으며, 자릿수가 무한에 가까운 문자열 정렬 등에 사용할 경우 오히려 퀵정렬 보다 느릴 수 있고, 부동 소수점 등을 정렬에는 사용할 수가 없음.
  • 26. 둘, Radix Sort 소개
  • 27. 둘, Counting Sort 소개 Counting Sort의 큰 특징은 데이터 내의 가장 큰 값에 효율이 결정. 특정 데이터의 개수를 데이터의 값에 대응하는 위치에 저장. 자신의 위치에서 앞에 있던 값을 모두 더한 배열을 만들고, 데이터가 들어가야 할 위치를 찾아내는 알고리즘 복잡도는 데이터의 최댓값이 K라면 시간 복잡도는 O ( n + K )에 달한다. 단, K 값이 억 단위로 넘어간다면 시간은 기하급수적으로 상승하여 n이 작아도 시간이 오래 걸림. 반대로 K 작다면, 선형시간 내에 정렬을 끝냄.
  • 28. 둘, Counting Sort 소개 5 12 7 10 12 0 00 0 1 2 a[0] a[1] a[12] K = 12 a[0] a[1] a[3] a[4]a[2] Counting Arr[K + 1] a[3] a[4]a[2] 데이터 원소 내 가장 큰 값을 K로 설정한다. CountingArr[k+1]을 생성 후
  • 29. 둘, Counting Sort 소개 5 12 7 10 12 0 00 0 1 2 a[0] a[1] a[12] K = 12 a[0] a[1] a[3] a[4]a[2] Counting Arr[K + 1] 5 7 10 12 12 Result a[0] a[1] a[3] a[4]a[2] a[3] a[4]a[2] 데이터 원소를 순회하며, 숫자 값에 해당 하는 CountingArr 원소 위치에 + 1을 해준다.
  • 30. 둘, Counting Sort 소개 5 12 7 10 12 0 00 0 1 2 a[0] a[1] a[12] K = 12 a[0] a[1] a[3] a[4]a[2] Counting Arr[K + 1] 5 7 10 12 12 Result a[0] a[1] a[3] a[4]a[2] a[3] a[4]a[2] Counting Arr의 배열을 순회하며, 0이 아니면, 값을 -1을 하고, result 배열에 (원소번호)해당하는 숫자 값을 써준다. 예시에서는 a[4]에 1이므로 -1을 해주고, Result 배열 첫 번째에 5를 넣어준다. 0이 되었으므로 다음 원소로 넘어간다. 이런 방법으로 카운팅 배열 원소를 모두 순회함.
  • 31. 둘, Shell Sort 소개 삽입정렬이 거의 정렬된 배열에서 최적의 성능을 내는 것에 착안한 정렬 방법. 특징을 잘 이용한 정렬기법이며, 구조를 어떻게 하느냐에 따라 성능이 최대 O( 𝑛1.25 )의 성능을 보이기도 하여, Heap Sort에 버금 갈 정도.
  • 32. 둘, Shell Sort 소개 쉘 정렬은 삽입정렬의 단점을 제거하고, 효율을 높인 정렬 기법으로 생각 할 수 있음. 요소들이 삽입 될 때 이웃한 위치로만 이동을 하게 되는데, 이 거리가 멀면 멀수록 Overhead가 증가하게 된다. 데이터를 일정의 간격을 만들고, 이 간격만큼 삽입 정렬을 통하여 정렬을 실행함. ( 데이터가 부분적 정렬 상태가 됨 ) 간격을 줄이다가 간격이 1이 되면 거의 정렬 된 리스트를 마지막으로 삽입정렬을 이용해 완전하게 정렬 된 결과를 얻을 수 있게 됨.
  • 33. 둘, Shell Sort 소개 5 568 77 13 90 a[0] a[1] a[12]a[3] a[4]a[2] 10 85 77 18 90 a[0] a[1] a[12]a[3] a[4]a[2] Gap = 5 Gap = 3 5 108 18 77 90 a[0] a[1] a[12]a[3] a[4]a[2] Gap = 1 Gap = 1 인 상황은 거의 정렬이 된 상태에서 마지막으로 삽입정렬을 수행.
  • 34. 셋, 생각 해보기 어떤 정렬 기법을 써야 하는가 ? 정렬 되어야 하는 데이터 값들이 큰 경우 !
  • 35. 셋, 생각 해보기 어떤 정렬 기법을 써야 하는가 ? 정렬 되어야 하는 데이터 값들이 큰 경우 !
  • 36. 셋, 생각 해보기 어떤 정렬 기법을 써야 하는가 ? 정렬 되어야 하는 데이터 값들이 큰 경우 ! 정렬 되어야 하는 값들이 많은 경우 !
  • 37. 셋, 생각 해보기 어떤 정렬 기법을 써야 하는가 ? 정렬 되어야 하는 데이터 값들이 큰 경우 ! 어떤 상황에서도 평균적인 속도를 내야 하는 경우! 정렬 되어야 하는 값들이 많은 경우 !
  • 38. 셋, 생각 해보기 정렬 기법들 중에서 가장 구현 하기 쉬운 것은 ?
  • 39. 셋, 생각 해보기 정렬 기법들 중에서 가장 구현 하기 쉬운 것은 ? 정렬 기법들 사용시 공간 복잡도에 대해서도 고려 해야 할까?
  • 40. 셋, 생각 해보기 정렬 기법들 중에서 가장 구현 하기 쉬운 것은 ? 정렬 기법들 사용시 공간 복잡도에 대해서도 고려 해야 할까? 공간 복잡도까지 고려 했을 때 어느 정렬을 써야 할까?
  • 41. 넷, 질의응답 단, 저는 아는 것만 대답합니다. 질문 받습니다.