본문 바로가기

CODING/Algorithm12

[알고리즘/Python] 계수 정렬 | count sort 계수 정렬 [ count sort ] - 원소간의 비교가 아닌 각 원소가 몇개 등장하는지 갯수를 세서 정렬 시간복잡도 ⏱ 최선의 경우 : O(n + k) 최악의 경우 : O(n + k) 평균 : O(n + k) 장점 1. 시간 복잡도가 O(n+k) [ k : 원소의 최댓값 ] 으로 퀵정렬, 병학 정렬에 비해 일반적으로 빠르다 단점 1. 원소의 갯수를 저장할 별도의 공간이 필요하다 2. 원소의 최소값과 최대값의 차이가 클 경우 메모리 낭비를 많이 하게 될 수도 있다. 🗡 ex) [ 1, 33, 72, 14 ,57 ,99999999] - 이 경우 원소의 갯수를 저장할 공간이 99999999보다 커야하지만 안쓰는 인덱스들이 많이 발생 [ python count sort code | 파이썬 계수 정렬 코드 ] .. 2020. 10. 9.
[알고리즘/Python] 퀵 정렬 | quick sort 퀵 정렬 [ quick sort ] - 기준 점 ( pivot )을 잡아서 기준보다 크면 오른쪽 작으면 왼쪽으로 보낸 뒤 각각 또 다시 pivot을 잡아서 반복하는 정렬 시간복잡도 ⏱ 최선의 경우 : O(n log(n)) 이미 정렬이 다 되어있는 경우 최악의 경우 : O(n²) 평균 : O(n log(n)) 장점 1. 평균적인 속도는 가장 빠르다 단점 1. pivot을 잘못 선택할 경우 ( 리스트가 계속 불균형하게 나누어지는 경우 )는 수행시간이 더 많이 걸린다. - 최악의 경우 시간 복잡도가 O(n²)이 된다. [ python quick sort code | 파이썬 퀵 정렬 코드 ] 더보기 ver.1 - 파이썬의 특성을 살린 코드 data = list(map(int,input().split())) de.. 2020. 10. 7.
[알고리즘/Python] 삽입정렬 | Insertion sort 삽입정렬 [ Insertion sort ] - 배열의 인덱스를 늘려가면서 원소가 들어가야할 자리를 찾아서 삽입하는 정렬 -정렬 완료 된 부분 - 자리를 찾아야하는 원소 1 [34, 24, 67, 43, 93] 2 [24, 34, 67, 43, 93] 3 [24, 34, 67, 43, 93] 4 [24, 34, 43, 67, 93] 시간복잡도 ⏱ 최선의 경우 : O(n) 이미 정렬이 다 되어있는 경우 최악의 경우 : O(n²) 평균 : O(n²) 장점 1. 거의 정렬되어 있는 상태 ( O(n) ) 면 매우 빠른 효율성을 가지고 잇다 단점 1. 최악의 경우 ( ex : 거꾸로 정렬되어 있는 경우 ) O(n²) 라는 시간복잡도를 갖게 된다. 2. 데이터의 상태와 크기에 따라성능의 편차가 심하다 [ python.. 2020. 10. 6.
[알고리즘/Python] 선택정렬 | selection sort 선택정렬 [ selection sort ] - 전체원소 중에 가장 작은 값을 가장 앞에 있는 원소와 바꾸고, 바꾼 원소를 제외하고 계속 가장 작은 값을 앞으로 보내는 정렬 패스 테이블 최솟값 0 [9, 1, 6, 8, 5, 4, 2, 0] 0 1 [0, 1, 6, 8, 5, 4, 2, 9] 1 3 [0, 1, 2, 8, 5, 4, 6, 9] 2 4 [0, 1, 2, 8, 5, 4, 6, 9] 4 5 [0, 1, 2, 4, 5, 8, 6, 9] 5 6 [0, 1, 2, 4, 5, 8, 6, 9] 6 7 [0, 1, 2, 4, 5, 6, 8, 9] 8 시간복잡도 ⏱ 최선의 경우 : O(n²) 최악의 경우 : O(n²) 평균 : O(n²) 장점 1. 구현이 쉬움2. 정렬을 위한 비교 횟수는 많지만 실제로 교환.. 2020. 10. 6.
[알고리즘/Python] 합병정렬 | merge sort 합병 정렬 [ Merge sort ] - 전체 원소를 하나의 단위로 분할한 후 분할한 원소를 다시 병합하면서 정렬하는 방식 시간복잡도 ⏱ 최선의 경우 : O(n log(n)) 최악의 경우 : O(n log(n)) 평균 : O(n log(n)) 장점 1. 퀵 정렬은 Pivot을 어떻게 잡느냐에 따라 성능이 안좋아지는 경우가 있는데 그런 경우 업이 항상 O(n log(n))이라는 시간복잡도를 가짐 2. 안정한 정렬 - 제자리 정렬로 구현할 수 있기 때문에 단점 1. 추가적인 메모리가 필요하다. 정렬해야할 양이 많다면 메모리가 부담스러울 수 있다. [ python merge sort code | 파이썬 합병 정렬 코드 ] 더보기 def merge(alist): if len(alist) > 1: mid = le.. 2020. 9. 29.
[알고리즘/Python] 힙정렬 | heap sort 힙 정렬(heap sort) - 우선순위 큐를 위해 만들어진 것 ➡️ 여러 개의 값들 중 최댓값 OR 최솟값을 빠르게 찾기 위해 - 완전 이진 트리로 만들어져 있음 ✔️ 완전 이진 트리란 : 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있으며, 마지막 레벨의 노드들은 가능한 왼쪽부터 채워져 있는 구조를 말한다. 1️⃣ Min - heap : 최소값이 루트 노드에 있고, 부모 노드는 자식 노드보다 작아야 함 ( 부모 노드 자식 노드 ) 시간복잡도 ⏱ 최선의 경우 : O(n log(n)) 최악의 경우 : O(n log(n)) 평균 : O(n log(n)) 장점 최악의 경우에도.. 2020. 9. 17.