본문 바로가기
-----ETC2-----/알고리즘(기본)

[알고리즘] Week 2: 정렬 알고리즘 I - 정렬 개념 및 기본 알고리즘

by cogito21_python 2024. 6. 1.
반응형

Day 1: 정렬의 개념과 필요성

  • 강의 내용:
    • 정렬의 정의
      • 정렬이란 무엇인가?
      • 데이터 정렬의 필요성
    • 정렬 알고리즘의 실제 응용 사례
      • 검색 최적화
      • 데이터 분석
      • 보고서 및 결과 정리
  • 실습:
    • 파이썬 내장 정렬 함수 사용해보기
# 파이썬 내장 정렬 함수 예제
data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_data = sorted(data)
print("원본 데이터:", data)
print("정렬된 데이터:", sorted_data)

data.sort()
print("데이터 정렬 후:", data)

 

Day 2: 버블 정렬 (Bubble Sort)

  • 강의 내용:
    • 버블 정렬의 개념
      • 버블 정렬의 정의 및 작동 원리
      • 버블 정렬의 시간 복잡도 분석 (O(n^2))
    • 버블 정렬의 장단점
      • 이해 및 구현이 쉬움
      • 비효율적이며 큰 데이터셋에 적합하지 않음
  • 실습:
    • 버블 정렬 알고리즘 구현 및 예제
# 버블 정렬 알고리즘 구현
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

# 버블 정렬 예제
data = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(data)
print("버블 정렬 결과:", data)  # [11, 12, 22, 25, 34, 64, 90]

 

Day 3: 버블 정렬의 최적화

  • 강의 내용:
    • 버블 정렬의 최적화 방법
      • 교환이 없는 경우 정렬 종료
    • 최적화된 버블 정렬의 시간 복잡도
  • 실습:
    • 최적화된 버블 정렬 알고리즘 구현 및 예제
# 최적화된 버블 정렬 알고리즘 구현
def optimized_bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break

# 최적화된 버블 정렬 예제
data = [64, 34, 25, 12, 22, 11, 90]
optimized_bubble_sort(data)
print("최적화된 버블 정렬 결과:", data)  # [11, 12, 22, 25, 34, 64, 90]

 

Day 4: 선택 정렬 (Selection Sort)

  • 강의 내용:
    • 선택 정렬의 개념
      • 선택 정렬의 정의 및 작동 원리
      • 선택 정렬의 시간 복잡도 분석 (O(n^2))
    • 선택 정렬의 장단점
      • 이해 및 구현이 쉬움
      • 비효율적이며 큰 데이터셋에 적합하지 않음
  • 실습:
    • 선택 정렬 알고리즘 구현 및 예제
# 선택 정렬 알고리즘 구현
def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_idx = i
        for j in range(i+1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]

# 선택 정렬 예제
data = [64, 34, 25, 12, 22, 11, 90]
selection_sort(data)
print("선택 정렬 결과:", data)  # [11, 12, 22, 25, 34, 64, 90]

 

Day 5: 선택 정렬의 최적화

  • 강의 내용:
    • 선택 정렬의 최적화 방법
      • 최소값, 최대값 동시 선택
    • 최적화된 선택 정렬의 시간 복잡도
  • 실습:
    • 최적화된 선택 정렬 알고리즘 구현 및 예제
# 최적화된 선택 정렬 알고리즘 구현
def optimized_selection_sort(arr):
    n = len(arr)
    for i in range(n//2):
        min_idx = i
        max_idx = i
        for j in range(i, n-i):
            if arr[j] < arr[min_idx]:
                min_idx = j
            if arr[j] > arr[max_idx]:
                max_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
        arr[n-i-1], arr[max_idx] = arr[max_idx], arr[n-i-1]

# 최적화된 선택 정렬 예제
data = [64, 34, 25, 12, 22, 11, 90]
optimized_selection_sort(data)
print("최적화된 선택 정렬 결과:", data)  # [11, 12, 22, 25, 34, 64, 90]

 

Day 6: 정렬 알고리즘의 비교와 응용

  • 강의 내용:
    • 정렬 알고리즘의 비교
      • 버블 정렬과 선택 정렬의 비교
      • 각 알고리즘의 장단점 및 활용 사례
    • 정렬 알고리즘의 실제 응용 사례
      • 데이터 정렬
      • 검색 최적화
  • 실습:
    • 다양한 데이터셋을 사용한 정렬 알고리즘 비교
# 정렬 알고리즘 비교 예제
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 = [64, 34, 25, 12, 22, 11, 90]
data2 = data1.copy()
data3 = data1.copy()

print("버블 정렬 시간:", measure_time(bubble_sort, data1))
print("최적화된 버블 정렬 시간:", measure_time(optimized_bubble_sort, data2))
print("선택 정렬 시간:", measure_time(selection_sort, data3))

 

Day 7: 종합 연습 및 프로젝트 준비

  • 강의 내용:
    • 정렬 알고리즘 종합 연습
      • 다양한 정렬 알고리즘 문제 풀이
      • 알고리즘 성능 분석 및 최적화
    • 프로젝트 준비
      • 프로젝트 주제 선정 및 요구사항 분석
      • 프로젝트 구현 계획 수립
  • 실습:
    • 정렬 알고리즘 종합 연습 문제 풀기
    • 프로젝트 주제 및 계획 수립
### 종합 연습 문제 예시
1. 주어진 배열을 정렬하는 다양한 방법 구현
2. 배열의 최대값, 최소값을 정렬 알고리즘을 사용하여 찾기
3. 정렬된 배열에서 특정 값의 위치 찾기

### 프로젝트 주제 예시
1. 도서 관리 시스템
2. 학생 성적 분석 도구
3. 상품 가격 비교 도구

### 프로젝트 요구사항 예시
1. 도서 관리 시스템:
   - 도서 정보 입력 및 저장
   - 도서 정보 정렬 (제목, 저자, 출판년도 등)
   - 도서 검색 기능

### 프로젝트 계획 예시
1. 데이터 입력 모듈 구현
2. 도서 정보 정렬 알고리즘 구현
3. 도서 검색 모듈 구현

 

이 강의는 파이썬의 기본 정렬 알고리즘을 이해하고 구현하는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!

반응형