bfs 시간복잡도 관련 질문입니다!
안녕하세요!
열심히 수강하다가 질문이 생겨 작성하게 되었습니다:>
'''
질문 : 이 함수의 시간복잡도는 O(n^3)인가?
'''
def bfs(graph, start_v):
visited = [start_v]
queue = deque(start_v)
while queue:
cur_v = queue.popleft()
for v in graph[cur_v]:
if v not in visited:
visited.append(v)
queue.append(v)
return visited
위의 코드를 템플릿처럼 외우라고 하신 함수 시간복잡도가 궁금합니다!
제가 생각하기로는
n(vertax의 수만큼 while문 실행) x n(for문) x n(리스트 in 연산자 수행)
-> O(n^3) 이라고 생각하는데 이게 맞는걸까요??
답변 1
0
안녕하세요 kse011010님.
단순하게 보면 O(n^3), (여기서 n= vertex의 개수)이라고 볼 수 있지만,
if v not in visited 이 조건문 때문에 상황이 달라집니다.
조건문이 있기 때문에 그냥 무작정 n번씩 반복하는게 아닙니다.
그래서 이런경우는 코드가 어떤 동작을 하는지 살펴봐야 합니다.
해당 코드는 bfs 코드라서, O(vertex개수 + edge 개수) * O(vetex 개수) (visited에서 v가 있는지 찾는데 걸리는 시간복잡도)
정도로 생각하시면 됩니다.
O(V+E) * O(V) 정도가 되겠네요~!
모든 코드에 대해 시간복잡도를 완전 정확하게 알기는 쉽지가 않아요.
그래서 시간복잡도를 계산하는 연습을 하는 것은 좋지만, 적당히 넘어가야 하는 코드들도 많이 만날거에요!
혹시 더 궁금하시면 질문 남겨주세요 ~
노션 공유 링크
0
85
2
수업 중간에 내주신 문제는 해답을 알 수 없는걸까요?
0
75
2
최신 강의와 비교
0
83
2
Min Cost Climbing stairs 질문
0
75
2
노션 공유 부탁드립니다!
1
87
2
for 문에 sort 함수 를 사용하면
1
87
2
노션 공유 부탁드립니다.
0
102
2
디스코드가 올바르지 않다고 뜹니다..!
0
106
1
그래프
0
97
2
노션 공유
1
122
2
시간복잡도 질문
2
124
3
11강 질문
1
77
2
노션 공유 부탁드립니다
0
83
2
linkedList - BrowserHistory 코드 질문
0
75
1
list1.append(list2)와 list1.append(list2[:])의 차이가 무엇인가요?
1
166
1
라이브러리 사용
1
135
2
문제 교재는 따로 없는 거 맞나요?
1
201
2
LCA 관련해서 질문이 있습니다.
1
117
2
[Unique Paths] 완전탐색 / DP (후반부)
0
107
1
dp 계단오르기최소비용질문입니다.
0
107
1
Dynamic Array 의 size 정보가 저장되는 곳
2
161
2
노션공유가 안된듯 합니다
1
162
2
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
1
121
1
강의자료 만들 때 사용하신 프로그램이 뭘까요?
1
202
1





