soyeooooo 님의 블로그

파이썬 알고리즘 (저자 최영규) 본문

python/알고리즘

파이썬 알고리즘 (저자 최영규)

soyeooooo 2025. 1. 3. 19:18

024_2학기 알고리즘 수업에서 사용되는 '파이썬 알고리즘' (저자 최영규)' 내용 정리입니다.

제 1장

알고리즘의 조건

입력, 출력, 명확성, 유한성, 유효성

최댓값 찾기

def find_max(a):
 max=a(0)
 for i in range(len(a)):
  if a[i] > max :
  max = a[i]
 return max

최대 공약수 찾기

def gcd(a,b)
 while b!=0 :
 r=a%b
 a=b
 b=r
return a

-> 개인적 코드

def gcd(a,b)
 if b==0:
  return a
 else:
  return gcd(b, a%b)

정렬

정렬: 데이터를 순서대로 재배열하는 문제 (레코드를 키의 순서로 재배열)
비교할수있는 모든 속성은 정렬의 기준이 된다.

레코드: 정렬할 대상
필드: 대상이 가지고 있는 성질
키, 정렬키: 정렬의 기준이되는 필드

비교기반과 분재기반 정렬
대부분은 비교하지만, 기수정렬과 같이 분배하는 방법도 존재
분배기반: 빠른 정렬가능, 제한적 킷값
비교기반: 연산이 분배에 비해 김
안정성: 동일한 킷값을 갖는 레코드가 있을때, 정렬후에도 이들의 상대적 위치가 바뀌지 않는 경우
제자리 정렬 : 입력 배열 외에 추가적인 메모리를 사용하지 않는경우

제 2장

시간 효율성: 더 빨리 결과를 내는 알고리즘이 더 효율적
이론적으로 복잡도를 분석하는 방법이 사용됨
공간효율성 알고리즘이 컴퓨터 메모리를 얼마나 사용하는지 나타냄

(2.1) 순차 탐색 ( 선형알고리즘 ): 리스트에 어떤 값을 가진 항목을 찾을때,
첫번째 항목부터 순차적으로 검사해야함

def s_search (a,b):
 for i in range(len(a))
  if a[i] == b:
   return i
  return -1
  
 c=list(map(int,input().split())
 d=int(input())
 
 print(" %d찾기:" %(b),s_search(a,b))
  

빅오 표기법: 어떤 함수의 점근적 하한을 표시하는방법
O(1): 연산이 한번
O(N): for과 같은 순환 연산이 한개포함
O(n^2): for 내부에 for과같이 내부순환 연산이 한개 존재

중복항목 탐색

제3장

선택 정렬
억지기법(완전탐색):
제자리 정렬

def S(A):
 n=len(A)
 for i in range (n-1):
 i=min
  for j in range (i+1,n):
  if A[j]<A[min]:
  min=j
  A[i],A[min]=A[min],A[i]
  P(A,i+1)
 def P(arr,val):
 print("  step%2d= "%val, end='')
 print(arr) 
A=list (map(int,input().split())
print(f'orginal: ',A)
S(A)
print(f'selection: ',A)

순차탐색(선형탐색)

문자열 매칭 (억지기법)

완전탐색: 가능한 모든 경우를 탐색하는 방법

'python > 알고리즘' 카테고리의 다른 글

시간 복잡도  (1) 2025.01.26
항상 그냥 사용하는 map  (0) 2025.01.26