본문 바로가기
Base/Python

11. 복잡도/프로그램/루틴/프로시저/메서드/함수

by 귀멸 2023. 2. 21.

혼공파 48 ~ 49강

1. 복잡도

# 시간 복잡도

자료 크기 n에 따른 계산 횟수를 식으로 표현하여 계수 없이 최고차 항으로만 표현하는 방식

→ 점근 표기법, 빅오 표기법, 란다우 표기법

 

복잡도 최고차 항의 서열


공식 자료에 따른 슈퍼컴퓨터 순위

1위 : US Oak Ridge 연구소 Prontier [1.12엑사 플롭 급] : 1초에 112경 번의 부동소수점 연산

O(n!) 의 자료 개수 32개에 대한 연산만 해도 위의 슈퍼컴퓨터로 계산 불가

 

따라서 프로그램/알고리즘의 복잡도를 낮추는 것은 중요한  것

현실적으로 사용가능한 시간 복잡도의 마지노선 : nlogn, n^2

 

2. 함수 관련 기본 용어

# program : 미리 + 작성된 

# 코드 전체 : 프로그램(program), 루틴(routine)

# 서브루틴, 서브프로그램 : 전체 프로그램 중에 작은 조각 프로그램

# 매개변수(parameter) : 함수에 괄호에 들어가는 변수

# 절차(procedure) : 매개변수를 가지는 서브루틴 

# 프로그램, 루틴 전체
케이크 = {
  "이름": "당근 케이크",
  "남은 무게": 300
}

## 서브 루틴, 서브 프로그램
print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

print("케이크를 50g 만큼 자르고")
print("케이크를 먹는다")
케이크["남은 무게"] -= 50
print(f"남은 케이크의 무게는 {케이크['남은 무게']}입니다.")

 

서브 루틴 문법

def 이름(매개변수):

     서브프로그램 

 

파이썬은 함수 내부에서 함수 외부에 있는 변수의 스택값을 변경하는 것을 허용하지 않는다.

# f(x) = x^2 +2x + 1
output = 0
def f(x):
  output = x ** 2 + 2 * x + 1

f(10)
print(output)   # 그냥 0

f(20)
print(output)   # 그냥 0

# 함수 안에 output 변수를 사용할 수 없음

 

# 함수(function) : 수학에서 가져온 용어 / 코드 자체가 값이 될 수 있게

   프로시저 + "리턴 값"

# f(x) = x^2 +2x + 1
output = 0
def f(x):
  return x ** 2 + 2 * x + 1

print(f(10))  # 121
print(f(20))  # 441

 

# 클래스 내부에 있는 함수 : 메서드(method)

 

# 현대적인 프로그래밍 언어에서는 함수의 문법을 통해 프로시저, 메서드를 사용할 수 있다.

댓글