본문 바로가기

Algorithm/개념 정리7

분할과 정복 내용정리 분할 정복 알고리즘 이란? 분할 정복 알고리즘(Divide and conquer algorithm)은 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법이나 알고리즘이다. 일반적으로 재귀 함수로 구현한다. 설계 단계 Divide (분할) : 문제가 분할이 가능한 경우, 원래 문제를 분할하여 더 작은 하위 문제들로 분할한다. Conquer (정복) : 나누어진 문제가 여전히 분할이 가능하다면, 다시 Divide 수행하고 그렇지 않다면 문제를 해결한다. Combine (합치기): Conquer한 문제들을 통합하여 원래 큰 문제의 답을 얻는다. 장단점 장점 문제를 나눔으로써 어려운 문제를 쉽게 해결할 수 있다. 단점 재귀 함수를 호출한다는 점에서 함수 호출로 인한 오버헤드 발생, 스택에 .. 2021. 9. 13.
재귀 알고리즘 내용 정리 재귀 재귀란? 재귀의 사전적 정의는 다음과 같다. 재귀(recursion)란 어떠한 것을 정의할 때 자기 자신을 참조하는 것을 뜻한다. 재귀 호출 따라서 재귀 호출이란 함수 내부에서 함수가 자기 자신을 다시 호출하는 행위를 의미한다. 재귀 호출의 주의점은 자기 자신을 계속해서 호출하므로, 함수 내에서 호출을 일정 조건을 만족하면 중단할 수 있도록 조건이 변경될 명령문을 반드시 포함해야 한다. 재귀 호출과 반복문 비교 반복문 메모리 : 메모리 힙을 사용한다. 속도 : 빠름 무한 루프는 CPU 사이클을 반복적으로 사용한다. 코드 길이가 길어지고 변수 사용이 많아진다. (가독성이 떨어짐) 재귀 호출 메모리 : 스택 메모리를 사용한다. 속도 : 느림 무한 재귀는 스택 오버플로우를 일으킴 코드의 길이도 짧고 변수.. 2021. 9. 6.
[python구현] 정렬 알고리즘 - 선택, 삽입, 버블, 병합, 퀵 정렬 정렬 선택 정렬 선택 정렬 알고리즘 주어진 리스트 중에 최솟값을 찾는다. 찾은 값을 맨 앞에 위치한 값과 교체한다. 정렬된 앞부분을 제외한 리스트를 같은 방법으로 교체한다. 선택 정렬 파이썬 구현 def selectionSort(x) : length = len(x) for i in range(length-1) : minIndex = i for j in range(i+1,length) : if x[minIndex] >x[j] : minIndex = j x[i], x[minIndex] = x[minIndex], x[i] return x 선택 정렬 시간 복잡도 모든 인덱스 접근 루프문(i for문) : O(n) 최솟값 찾기 루프문 (j for문) : O(n) 총 O(n^2) 버블 정렬 버블 정렬 알고리즘 인접.. 2021. 8. 30.