반응형
Day 1: 재귀의 개념
- 강의 내용:
- 재귀의 정의와 중요성
- 재귀란 무엇인가?
- 재귀 함수의 기본 구조 (기저 조건과 재귀 호출)
- 재귀 알고리즘의 중요성 및 활용 사례
- 재귀의 장단점
- 재귀의 장점 (간결함, 특정 문제에 대한 자연스러운 표현)
- 재귀의 단점 (성능 문제, 스택 오버플로우 위험)
- 재귀의 정의와 중요성
- 실습:
- 간단한 재귀 함수 작성 및 실행
# 재귀 함수의 기본 예제: 1부터 n까지의 합 계산
def recursive_sum(n):
if n == 1:
return 1
else:
return n + recursive_sum(n - 1)
# 예제 실행
print("1부터 5까지의 합:", recursive_sum(5)) # 15
Day 2: 팩토리얼 계산
- 강의 내용:
- 팩토리얼의 개념
- 팩토리얼의 정의 (n! = n * (n-1)!)
- 팩토리얼의 수학적 표현 및 활용
- 팩토리얼의 재귀적 구현
- 기저 조건 및 재귀 호출
- 팩토리얼의 개념
- 실습:
- 팩토리얼 계산 함수 구현 및 예제
# 팩토리얼 계산 함수 구현
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
# 팩토리얼 계산 예제
print("5! =", factorial(5)) # 120
Day 3: 피보나치 수열
- 강의 내용:
- 피보나치 수열의 개념
- 피보나치 수열의 정의 (F(n) = F(n-1) + F(n-2), F(0) = 0, F(1) = 1)
- 피보나치 수열의 수학적 표현 및 활용
- 피보나치 수열의 재귀적 구현
- 기저 조건 및 재귀 호출
- 피보나치 수열의 개념
- 실습:
- 피보나치 수열 계산 함수 구현 및 예제
# 피보나치 수열 계산 함수 구현
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
# 피보나치 수열 계산 예제
print("피보나치 수열의 10번째 항:", fibonacci(10)) # 55
Day 4: 피보나치 수열의 최적화
- 강의 내용:
- 피보나치 수열의 비효율성
- 중복 계산 문제
- 시간 복잡도 분석 (O(2^n))
- 메모이제이션을 통한 최적화
- 메모이제이션의 개념 및 적용 방법
- 피보나치 수열의 비효율성
- 실습:
- 메모이제이션을 적용한 피보나치 수열 계산 함수 구현
# 메모이제이션을 적용한 피보나치 수열 계산 함수 구현
def fibonacci_memo(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
memo[n] = n
else:
memo[n] = fibonacci_memo(n - 1, memo) + fibonacci_memo(n - 2, memo)
return memo[n]
# 피보나치 수열 계산 예제
print("최적화된 피보나치 수열의 50번째 항:", fibonacci_memo(50)) # 12586269025
Day 5: 하노이의 탑
- 강의 내용:
- 하노이의 탑의 개념
- 하노이의 탑 문제 설명
- 하노이의 탑의 수학적 표현 및 원리
- 하노이의 탑의 재귀적 구현
- 기저 조건 및 재귀 호출
- 하노이의 탑의 개념
- 실습:
- 하노이의 탑 해결 알고리즘 구현 및 예제
# 하노이의 탑 해결 함수 구현
def hanoi(n, source, target, auxiliary):
if n == 1:
print(f"Move disk 1 from {source} to {target}")
return
hanoi(n - 1, source, auxiliary, target)
print(f"Move disk {n} from {source} to {target}")
hanoi(n - 1, auxiliary, target, source)
# 하노이의 탑 예제 실행
n = 3
hanoi(n, 'A', 'C', 'B')
# 예상 출력:
# Move disk 1 from A to C
# Move disk 2 from A to B
# Move disk 1 from C to B
# Move disk 3 from A to C
# Move disk 1 from B to A
# Move disk 2 from B to C
# Move disk 1 from A to C
Day 6: 재귀 알고리즘의 성능 분석
- 강의 내용:
- 재귀 알고리즘의 성능 분석
- 재귀 호출의 시간 복잡도 분석 방법
- 재귀 알고리즘의 공간 복잡도 분석
- 재귀와 반복의 비교
- 재귀 알고리즘과 반복 알고리즘의 비교
- 각각의 장단점
- 재귀 알고리즘의 성능 분석
- 실습:
- 재귀 알고리즘과 반복 알고리즘의 성능 비교 예제
# 반복적 팩토리얼 계산 함수 구현
def factorial_iterative(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
# 성능 비교 예제
import time
n = 500
# 재귀적 팩토리얼 계산 시간 측정
start_time = time.time()
factorial(n)
end_time = time.time()
print("재귀적 팩토리얼 계산 시간:", end_time - start_time)
# 반복적 팩토리얼 계산 시간 측정
start_time = time.time()
factorial_iterative(n)
end_time = time.time()
print("반복적 팩토리얼 계산 시간:", end_time - start_time)
Day 7: 종합 연습 및 프로젝트 준비
- 강의 내용:
- 재귀 알고리즘 종합 연습
- 다양한 재귀 알고리즘 문제 풀이
- 알고리즘 성능 분석 및 최적화
- 프로젝트 준비
- 프로젝트 주제 선정 및 요구사항 분석
- 프로젝트 구현 계획 수립
- 재귀 알고리즘 종합 연습
- 실습:
- 재귀 알고리즘 종합 연습 문제 풀기
- 프로젝트 주제 및 계획 수립
### 종합 연습 문제 예시
1. 주어진 정수 배열에서 모든 부분집합을 찾는 재귀 함수 구현
2. 미로 찾기 문제를 재귀적으로 해결
3. 문자열의 모든 순열을 생성하는 재귀 함수 구현
### 프로젝트 주제 예시
1. 재귀적 데이터 구조 처리 시스템
2. 재귀적 그래프 탐색 도구
3. 재귀적 패턴 생성기
### 프로젝트 요구사항 예시
1. 재귀적 데이터 구조 처리 시스템:
- 다양한 데이터 구조 입력 및 저장
- 재귀 알고리즘을 통한 데이터 처리
- 처리된 데이터 출력 및 분석
### 프로젝트 계획 예시
1. 데이터 입력 모듈 구현
2. 재귀 알고리즘 구현 (예: 트리 탐색, 그래프 탐색 등)
3. 데이터 출력 및 분석 모듈 구현
이 강의는 파이썬의 재귀 알고리즘, 특히 팩토리얼 계산, 피보나치 수열, 하노이의 탑의 기본 개념과 구현을 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!
반응형
'-----ETC2----- > 알고리즘(기본)' 카테고리의 다른 글
[알고리즘] Week 8: 동적 프로그래밍 - 개념과 예제 (1) | 2024.06.02 |
---|---|
[알고리즘] Week 7: 분할 정복 알고리즘 - 개념과 예제 (1) | 2024.06.02 |
[알고리즘] Week 5: 탐색 알고리즘 II - 이진 탐색 트리 및 균형 트리 (0) | 2024.06.02 |
[알고리즘] Week 4: 탐색 알고리즘 I - 탐색 개념 및 기본 알고리즘 (0) | 2024.06.02 |
[알고리즘] Week 3: 정렬 알고리즘 II - 삽입 정렬 및 고급 정렬 알고리즘 (0) | 2024.06.01 |