컴퓨터에서 자료를 정리하고 조직화하는 다양한 구조
항목들을 순서적으로 나열하여 저장하는 창고
항목 접근 방법에 따라 다시 세분화
항목들이 보다 복잡한 연결관계
컴퓨터로 문제를 풀기 위한 단계적인 절차 ex)사전에서 단어 찾기
프로그래머가 추상적으로 정의한 자료형
bag = []
def contains(bag,e):
return e in bag #boolean
def insert(bag,e):
bag.append(e)
def remove(bag,e):
bag.remove(e)
def count(bag,e):
return bag.len()
insert(bag,"휴대폰")
insert(bag,"지갑")
insert(bag,"손수건")
insert(bag,"빗")
insert(bag,"자료구조")
insert(bag,"야구공")
print(f"mybag: {bag}")
insert(bag,"빗") #중복
remove(bag,"손수건")
print(f"mybag: {bag}")
contains(bag,"빗")
import time
my_bag = []
start = time.time()
#...
insert(bag,"휴대폰")
insert(bag,"지갑")
insert(bag,"손수건")
insert(bag,"빗")
insert(bag,"자료구조")
insert(bag,"야구공")
print(f"mybag: {bag}")
insert(bag,"빗") #중복
remove(bag,"손수건")
print(f"mybag: {bag}")
print(contains(bag,"빗"))
#
end = time.time()
print(f"실행시간 = {end - start}")
시간복잡도분석 : 수행시간분석
– 산술, 대입, 비교, 이동의 기본적인 연산 고려
– 알고리즘 수행에 필요한 연산의 개수를 계산
– 입력의 개수 n에 대한 함수->시간복잡도 함수, T(n)
ex: 등교 시간 분석
• 집을 나와서 지하철역까지는 5분, 지하철을 타면 학교 까지 30분, 강의실까지는 걸어서 10분 걸린다
• 최선경우Ω(n^2): 수행시간이 가장 빠른 경우
집을 나와서 5분 후 지하철역에 도착하고, 운이 좋게 바로 열차를 탄 경우를 의미한다. 따라서 최선경우 시간은 5 + 20 + 10 = 35분
• 최악경우O(n^2): 수행시간이 가장 늦은 경우 가장 널리 사용된다.
열차에 승차하려는 순간, 열차의 문이 닫혀 서 다음 열차를 기다려야 하고 다음 열차가 10분 후에 도착한다면, 최악경우는 5 + 10 + 20 + 10 = 45분
• 평균경우θ(n^2): 대략 최악과 최선의 중간이라고 가정했을 때, 40분이 된다.
공간복잡도분석:수행시 필요로하는 메모리공간분석
알고리즘이나 함수가 수행도중에 자기자신을 다시 호출하여 문제를 해결하는 기법
정의자체가 순환적으로 되어 있는 경우에 적합
def factorial(n):
if n == 1:
return 1
else :
return n * factorial(n-1)
함수안에 함수를 배치하면 순환 함수이다.
처음에 작은 값을 넣었을때는 순환이 내용과 다르게 더빨랐지만 큰수를 넣었더니 차이가 확연히 난다.
반복함수는 만들어봐야할 것 같다.