반응형
Day 1: 삽입 정렬 (Insertion Sort)
- 강의 내용:
- 삽입 정렬의 개념
- 삽입 정렬의 정의 및 작동 원리
- 삽입 정렬의 시간 복잡도 분석 (최선의 경우 O(n), 최악의 경우 O(n^2))
- 삽입 정렬의 장단점
- 소규모 데이터셋에 효율적
- 이미 정렬된 데이터에 매우 효율적
- 삽입 정렬의 개념
- 실습:
- 삽입 정렬 알고리즘 구현 및 예제
# 삽입 정렬 알고리즘 구현
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# 삽입 정렬 예제
data = [12, 11, 13, 5, 6]
insertion_sort(data)
print("삽입 정렬 결과:", data) # [5, 6, 11, 12, 13]
Day 2: 퀵 정렬 (Quick Sort)
- 강의 내용:
- 퀵 정렬의 개념
- 퀵 정렬의 정의 및 작동 원리 (분할 정복)
- 시간 복잡도 분석 (평균 O(n log n), 최악 O(n^2))
- 피벗 선택 전략
- 첫 번째 요소, 마지막 요소, 중간 요소, 랜덤 선택
- 퀵 정렬의 개념
- 실습:
- 퀵 정렬 알고리즘 구현 및 피벗 선택 전략 비교
# 퀵 정렬 알고리즘 구현
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 퀵 정렬 예제
data = [3, 6, 8, 10, 1, 2, 1]
sorted_data = quick_sort(data)
print("퀵 정렬 결과:", sorted_data) # [1, 1, 2, 3, 6, 8, 10]
Day 3: 병합 정렬 (Merge Sort)
- 강의 내용:
- 병합 정렬의 개념
- 병합 정렬의 정의 및 작동 원리 (분할 정복)
- 시간 복잡도 분석 (O(n log n))
- 병합 정렬의 장단점
- 안정적인 정렬 알고리즘
- 추가적인 메모리 공간 필요
- 병합 정렬의 개념
- 실습:
- 병합 정렬 알고리즘 구현 및 예제
# 병합 정렬 알고리즘 구현
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
L = arr[:mid]
R = arr[mid:]
merge_sort(L)
merge_sort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
# 병합 정렬 예제
data = [38, 27, 43, 3, 9, 82, 10]
merge_sort(data)
print("병합 정렬 결과:", data) # [3, 9, 10, 27, 38, 43, 82]
Day 4: 퀵 정렬 vs 병합 정렬 비교
- 강의 내용:
- 퀵 정렬과 병합 정렬의 비교
- 각 알고리즘의 장단점
- 사용 사례 및 데이터셋 특성에 따른 선택
- 퀵 정렬과 병합 정렬의 성능 비교
- 퀵 정렬과 병합 정렬의 비교
- 실습:
- 퀵 정렬과 병합 정렬의 성능 비교 실험
# 성능 비교 예제
import time
def measure_time(sort_func, arr):
start_time = time.time()
sort_func(arr)
end_time = time.time()
return end_time - start_time
data1 = [38, 27, 43, 3, 9, 82, 10]
data2 = data1.copy()
print("퀵 정렬 시간:", measure_time(quick_sort, data1))
print("병합 정렬 시간:", measure_time(merge_sort, data2))
Day 5: 고급 정렬 알고리즘의 실제 응용
- 강의 내용:
- 고급 정렬 알고리즘의 실제 응용 사례
- 데이터베이스 정렬
- 파일 시스템 정렬
- 대규모 데이터셋 처리
- 실제 문제를 통해 배우는 정렬 알고리즘
- 고급 정렬 알고리즘의 실제 응용 사례
- 실습:
- 고급 정렬 알고리즘을 활용한 실제 문제 해결
# 실제 문제 예제: 학생 성적 정렬
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def student_sort_key(student):
return student.score
# 학생 데이터 생성
students = [
Student("Alice", 85),
Student("Bob", 95),
Student("Charlie", 70),
Student("David", 90),
Student("Eva", 88)
]
# 성적 기준으로 학생 정렬
sorted_students = sorted(students, key=student_sort_key, reverse=True)
for student in sorted_students:
print(f"{student.name}: {student.score}")
# 예상 출력:
# Bob: 95
# David: 90
# Eva: 88
# Alice: 85
# Charlie: 70
Day 6: 종합 연습
- 강의 내용:
- 고급 정렬 알고리즘 종합 연습
- 다양한 정렬 알고리즘 문제 풀이
- 알고리즘 성능 분석 및 최적화
- Q&A 세션 및 피드백
- 고급 정렬 알고리즘 종합 연습
- 실습:
- 다양한 데이터셋을 사용한 정렬 알고리즘 연습
- 알고리즘 성능 분석 및 최적화
# 종합 연습: 다양한 데이터셋 정렬
def generate_random_data(size):
import random
return [random.randint(0, 1000) for _ in range(size)]
# 데이터셋 생성
small_data = generate_random_data(10)
medium_data = generate_random_data(100)
large_data = generate_random_data(1000)
# 정렬 알고리즘 성능 비교
print("작은 데이터셋 퀵 정렬 시간:", measure_time(quick_sort, small_data.copy()))
print("작은 데이터셋 병합 정렬 시간:", measure_time(merge_sort, small_data.copy()))
print("중간 데이터셋 퀵 정렬 시간:", measure_time(quick_sort, medium_data.copy()))
print("중간 데이터셋 병합 정렬 시간:", measure_time(merge_sort, medium_data.copy()))
print("큰 데이터셋 퀵 정렬 시간:", measure_time(quick_sort, large_data.copy()))
print("큰 데이터셋 병합 정렬 시간:", measure_time(merge_sort, large_data.copy()))
Day 7: 프로젝트 준비 및 시작
- 강의 내용:
- 프로젝트 주제 선정 및 요구사항 분석
- 데이터 정렬 프로젝트 주제 선정
- 프로젝트 요구사항 정의
- 프로젝트 계획 수립
- 프로젝트 구현 계획 수립
- 주요 기능 및 모듈 정의
- 프로젝트 주제 선정 및 요구사항 분석
- 실습:
- 프로젝트 주제 및 계획 수립
- 프로젝트 구현 시작
### 프로젝트 주제 예시
1. 데이터베이스 정렬 시스템
2. 파일 시스템 정렬 도구
3. 상품 가격 비교 도구
### 프로젝트 요구사항 예시
1. 데이터베이스 정렬 시스템:
- 데이터 입력 및 저장
- 다양한 정렬 알고리즘을 통한 데이터 정렬
- 정렬된 데이터 검색 기능
### 프로젝트 계획 예시
1. 데이터 입력 모듈 구현
2. 정렬 알고리즘 구현 (퀵 정렬, 병합 정렬 등)
3. 데이터 검색 모듈 구현
이 강의는 파이썬의 고급 정렬 알고리즘을 이해하고 구현하는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!
반응형
'-----ETC2----- > 알고리즘(기본)' 카테고리의 다른 글
[알고리즘] Week 6: 재귀 알고리즘 - 개념과 예제 (0) | 2024.06.02 |
---|---|
[알고리즘] Week 5: 탐색 알고리즘 II - 이진 탐색 트리 및 균형 트리 (0) | 2024.06.02 |
[알고리즘] Week 4: 탐색 알고리즘 I - 탐색 개념 및 기본 알고리즘 (0) | 2024.06.02 |
[알고리즘] Week 2: 정렬 알고리즘 I - 정렬 개념 및 기본 알고리즘 (0) | 2024.06.01 |
[알고리즘] Week 1: 알고리즘 개요 및 기본 개념 (0) | 2024.06.01 |