CS/알고리즘_개념 15

퀵 정렬(quick sort)

- 기준점(pivot)을 정해서 기준점보다 작은 데이터는 왼쪽(left), 큰 데이터는 오른쪽(right)으로 모으는 함수를 작성. - 각 왼쪽(left), 오른쪽(right)은 재귀용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복. - 함수는 왼쪽(left) + 기준점(pivot) + 오른쪽(right) 을 리턴함. ================================= index : 0 1 2 3 4 5 6 7 value : 49 97 53 5 33 65 62 51 ================================= pivot선택 : (index : 0, value : 49) p1 (1회) pivot - (index : 0, value : 49) [left] - (index :..

동적계획법과 분할정복 : Dynamic Programing & Divide and Conquer

- 동적 계획법(Dynamic Programing) -> 입력 크기가 작은 부분의 문제들을 해결한 후, 해당 부분 문제의 해를 활용해서 보다 큰 크기의 부분문제를 해결하여 최종적으로 전체 문제를 해결하는 알고리즘. -> 상향식 접근법으로, 가장 최하위 해답을 구한 후, 이를 저장하고 해당 결과값을 이용해서 상위 문제를 풀어가는 방식 -> Memorization 기법을 사용 : 프로그램 실행 시 이전 단계에서의 계산한 값을 저장하여, 다시 계산하지 않도록 하여 전체 실행속도를 빠르게하는 기술. -> 문제를 잘게 쪼갤 때, 부분문제는 중복되어 재활용됨. ex)피보나치 수열 - 분할정복(Divide and Conquer) -> 문제를 나눌 수 없을 때까지 나누어서 각각 풀면서 다시 합벼하여 문제의 답을 얻는 ..

재귀용법2(recursive call, 재귀호출) : Brute-Force Algorithm

- 모든 경우를 시도해봄으로써 답을 구하는 방법 - 모든 겨우를 시도해보는 코드를 짜기가 까다로운 경우 예) N개의 카드가 있고, 각각은 1부터 N까지의 번호를 찾는다. 이를 한 줄로 세울 수 있는 모든 경우를 출력하시오 N = 3 (3중 반복문 필요) 123 132 213 231 312 321 - N중 반복문을 돌려야한다? 재귀호출 #아이디어 1 2 3 4 5 6 7 8 9 10 n = 3 def doRecursion(x): # x번 째 for문을 실행 if x > n: pass #print numbers else: for i range(1, n+1): if 아직숫자 i가 없다면, x번 째 for에서 숫자 i를 등록하고, doRecursion(x+1) doRecursion(1) Colored by Co..

재귀용법(recursive call, 재귀호출)

: 함수 안에서 동일한 함수를 호출하는 형태. 자기 자신을 호출하는 함수. - 재귀 호출의 일반적인 형태 1) 1 2 3 4 5 6 7 def functino(입력): if 입력 > 일정값: # 입력이 일정 값보다 크면 return function(입력-1) else: return 일정값 # 재귀호출종료 cs #팩토리얼1 1 2 3 4 5 6 7 8 def factorial(num): if num > 1: return num * factorial(num-1) else: return num print(factorial(4)) Colored by Color Scripter cs - 재귀 호출의 일반적인 형태 2) 1 2 3 4 5 def functino(입력): if 입력 > 일정값: # 입력이 일정 값보다..

[정렬]선택, 삽입, 버블

: 어떤 데이터들이 주어졌을 때 이를 정해진 순서대로 나열하는 것. 1) 선택 정렬 - 주어진 데이터 중 최솟값을 찾음 - 해당 최솟값을 데이터 맨 앞에 위치한 값과 교체 - 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복 1 2 3 4 5 6 7 8 9 10 11 12 13 import random def selection_sort(data): for stand in range(len(data)-1): for index in range(stand+1, len(data)): if data[stand] > data[index]: data[stand], data[index] = data[index], data[stand] return data data_list = random.sample(range..

반응형