반응형
Day 1: 탐색의 개념
- 강의 내용:
- 탐색의 정의와 중요성
- 탐색이란 무엇인가?
- 탐색의 필요성
- 탐색 알고리즘의 실제 응용 사례
- 탐색 알고리즘의 분류
- 선형 탐색
- 이진 탐색
- 탐색의 정의와 중요성
- 실습:
- 파이썬 내장 탐색 함수 사용해보기
# 파이썬 내장 탐색 함수 예제
data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print("데이터에서 5의 인덱스:", data.index(5))
print("데이터에서 2의 존재 여부:", 2 in data)
Day 2: 선형 탐색 (Linear Search)
- 강의 내용:
- 선형 탐색의 개념
- 선형 탐색의 정의 및 작동 원리
- 시간 복잡도 분석 (O(n))
- 선형 탐색의 장단점
- 단순하고 이해하기 쉬움
- 큰 데이터셋에서는 비효율적
- 선형 탐색의 개념
- 실습:
- 선형 탐색 알고리즘 구현 및 예제
# 선형 탐색 알고리즘 구현
def linear_search(arr, x):
for i in range(len(arr)):
if arr[i] == x:
return i
return -1
# 선형 탐색 예제
data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
index = linear_search(data, 5)
print("선형 탐색 결과: 인덱스", index) # 4 (첫 번째 5의 인덱스)
Day 3: 이진 탐색 (Binary Search)
- 강의 내용:
- 이진 탐색의 개념
- 이진 탐색의 정의 및 작동 원리
- 시간 복잡도 분석 (O(log n))
- 이진 탐색의 전제 조건
- 데이터가 정렬되어 있어야 함
- 이진 탐색의 개념
- 실습:
- 이진 탐색 알고리즘 구현 및 예제
# 이진 탐색 알고리즘 구현
def binary_search(arr, x):
low = 0
high = len(arr) - 1
mid = 0
while low <= high:
mid = (high + low) // 2
if arr[mid] < x:
low = mid + 1
elif arr[mid] > x:
high = mid - 1
else:
return mid
return -1
# 이진 탐색 예제
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
index = binary_search(data, 7)
print("이진 탐색 결과: 인덱스", index) # 6 (7의 인덱스)
Day 4: 재귀적 이진 탐색
- 강의 내용:
- 재귀적 이진 탐색의 개념
- 재귀적 이진 탐색의 정의 및 작동 원리
- 재귀적 이진 탐색의 시간 복잡도 분석 (O(log n))
- 재귀적 이진 탐색의 구현
- 재귀적 이진 탐색의 개념
- 실습:
- 재귀적 이진 탐색 알고리즘 구현 및 예제
# 재귀적 이진 탐색 알고리즘 구현
def binary_search_recursive(arr, x, low, high):
if high >= low:
mid = (high + low) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search_recursive(arr, x, low, mid - 1)
else:
return binary_search_recursive(arr, x, mid + 1, high)
else:
return -1
# 재귀적 이진 탐색 예제
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
index = binary_search_recursive(data, 7, 0, len(data) - 1)
print("재귀적 이진 탐색 결과: 인덱스", index) # 6 (7의 인덱스)
Day 5: 탐색 알고리즘의 비교와 응용
- 강의 내용:
- 탐색 알고리즘의 비교
- 선형 탐색과 이진 탐색의 비교
- 각 알고리즘의 장단점 및 활용 사례
- 탐색 알고리즘의 실제 응용 사례
- 데이터베이스 인덱싱
- 검색 엔진
- 탐색 알고리즘의 비교
- 실습:
- 탐색 알고리즘을 사용한 응용 예제
# 데이터베이스 인덱싱 예제
class SimpleDatabase:
def __init__(self):
self.data = []
def insert(self, record):
self.data.append(record)
self.data.sort()
def search(self, query):
return binary_search(self.data, query)
# 데이터베이스 인덱싱 사용 예제
db = SimpleDatabase()
db.insert(15)
db.insert(10)
db.insert(20)
db.insert(5)
db.insert(25)
result = db.search(15)
print("데이터베이스에서 15의 탐색 결과: 인덱스", result) # 2 (정렬된 데이터에서 15의 인덱스)
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)
# 정렬된 데이터 생성
small_data.sort()
medium_data.sort()
large_data.sort()
# 탐색 알고리즘 성능 비교
def measure_time(search_func, arr, x):
import time
start_time = time.time()
result = search_func(arr, x)
end_time = time.time()
return end_time - start_time, result
x = 500
print("작은 데이터셋 선형 탐색 시간:", measure_time(linear_search, small_data, x))
print("작은 데이터셋 이진 탐색 시간:", measure_time(binary_search, small_data, x))
print("중간 데이터셋 선형 탐색 시간:", measure_time(linear_search, medium_data, x))
print("중간 데이터셋 이진 탐색 시간:", measure_time(binary_search, medium_data, x))
print("큰 데이터셋 선형 탐색 시간:", measure_time(linear_search, large_data, x))
print("큰 데이터셋 이진 탐색 시간:", measure_time(binary_search, large_data, x))
Day 7: 프로젝트 준비 및 시작
- 강의 내용:
- 프로젝트 주제 선정 및 요구사항 분석
- 탐색 알고리즘 프로젝트 주제 선정
- 프로젝트 요구사항 정의
- 프로젝트 계획 수립
- 프로젝트 구현 계획 수립
- 주요 기능 및 모듈 정의
- 프로젝트 주제 선정 및 요구사항 분석
- 실습:
- 프로젝트 주제 및 계획 수립
- 프로젝트 구현 시작
### 프로젝트 주제 예시
1. 도서 검색 시스템
2. 영화 검색 도구
3. 상품 검색 엔진
### 프로젝트 요구사항 예시
1. 도서 검색 시스템:
- 도서 정보 입력 및 저장
- 다양한 탐색 알고리즘을 통한 도서 검색
- 검색된 도서 정보 출력
### 프로젝트 계획 예시
1. 데이터 입력 모듈 구현
2. 탐색 알고리즘 구현 (선형 탐색, 이진 탐색 등)
3. 데이터 출력 모듈 구현
이 강의는 파이썬의 탐색 알고리즘, 특히 선형 탐색과 이진 탐색의 기본 개념과 구현을 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해
반응형
'-----ETC2----- > 알고리즘(기본)' 카테고리의 다른 글
[알고리즘] Week 6: 재귀 알고리즘 - 개념과 예제 (0) | 2024.06.02 |
---|---|
[알고리즘] Week 5: 탐색 알고리즘 II - 이진 탐색 트리 및 균형 트리 (0) | 2024.06.02 |
[알고리즘] Week 3: 정렬 알고리즘 II - 삽입 정렬 및 고급 정렬 알고리즘 (0) | 2024.06.01 |
[알고리즘] Week 2: 정렬 알고리즘 I - 정렬 개념 및 기본 알고리즘 (0) | 2024.06.01 |
[알고리즘] Week 1: 알고리즘 개요 및 기본 개념 (0) | 2024.06.01 |