Tags
- 백트래킹
- 쟝고
- stack
- SQL
- outer join
- 이진트리
- M:N
- 뷰
- count
- Tree
- drf
- 완전검색
- 스택
- 트리
- delete
- 큐
- distinct
- Django
- Vue
- 통계학
- Article & User
- update
- DB
- Queue
- create
- regexp
- N:1
- migrations
- 그리디
- ORM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
완전검색 그리디 - 반복과 재귀 본문
1. 반복(Iteration)과 재귀(Recursion)
- 반복과 재귀는 유사한 작업을 수행할 수 있습니다.
- 반복은 수행하는 작업이 완료될 때까지 계속 반복합니다.
- 루프(for, while 구조)
- 재귀는 주어진 문제의 해를 구하기 위해 동일하면서 더 작은 분제의 해를 이용하는 방법입니다.
- 하나의 큰 문제를 해결할 수 있는 (해결하기 쉬운) 더 작은 문제로 쪼개고 결과들을 결합합니다.
- 재귀 함수로 구현
2. 반복구조
- 초기화
- 반복되는 명령문을 실행하기 전에 (한 번만) 조건 검사에 사용할 변수의 초기값을 설정합니다.
- 조건검사 (check control expression)
- 반복할 명령문 실행 (action)
- 업데이트 (loop update) : 무한 루프(infinite loop)가 되지 않게 조건이 거짓(false)이 되게 합니다.
3. 재귀적 알고리즘
- 재귀적 정의는 두 부분으로 나뉩니다.
- 하나 또는 그 이상의 기본 경우(basis case or rule)
- 집합에 포함되어 있는 원소로 induction을 생성하기 위한 시드(seed) 역할
- 하나 또는 그 이상의 유도된 경우 (inductive case or rule)
- 새로운 집합의 원소를 생성하기 위해 결합되는 방법
4. 재귀 함수(recursive function)
- 함수 내부에서 직접 혹은 간접적으로 자기 자신을 호출하는 함수
- 일반적으로 재귀적 정의를 이용해서 재귀 함수를 구현합니다.
- 따라서, 기본 부분(basis part)와 유도 부분(indcutive part)로 구성됩니다.
- 재귀적 프로그램을 작성하는 것은 반복 구조에 비해 간결하고 이해하기 쉽습니다.
- 그러나, 재귀에 대해 익숙하지 않은 개발자들은 재귀적 프로그램이 어렵다고 느낍니다.
- 함수 호출은 프로그램 메모리 구조에서 스택을 사용합니다. 따라서 재귀 호출은 반복적인 스택의 사용을 의미하며 메모리 및 속도에서 성능저하가 발생합니다.
5. 반복 또는 재귀?
- 해결할 문제를 고려해서 반복이나 재귀의 방법을 선택합니다.
- 재귀는 문제 해결을 위한 알고리즘 설계가 간단하고 자연스럽습니다.
- 추상 자료형(List, tree 등)의 알고리즘은 재귀적 구현이 간단하고 자연스러운 경우가 많습니다.
- 일반적으로, 재귀적 알고리즘은 반복(Iterative) 알고리즘보다 더 많은 메모리와 연산을 필요로 합니다.
- 입력 값 n이 커질수록 재귀 알고리즘은 반복에 비해 비효율적일 수 있습니다.
6. 연습문제
'알고리즘' 카테고리의 다른 글
완전검색 그리디 - 순열 (0) | 2024.06.19 |
---|---|
완전검색 그리디 - 완전 검색 기법 (0) | 2024.06.18 |
트리 - 이진트리4 (0) | 2024.06.16 |
트리 - 이진트리3 (0) | 2024.06.15 |
트리 - 이진트리2 (0) | 2024.06.14 |