인프런 커뮤니티 질문&답변

kse011010님의 프로필 이미지

작성한 질문수

코딩테스트 [ ALL IN ONE ]

너비 우선 탐색 (Breadth-first search, BFS)

bfs 시간복잡도 관련 질문입니다!

해결된 질문

작성

·

168

1

안녕하세요!

열심히 수강하다가 질문이 생겨 작성하게 되었습니다:>

 

'''

질문 : 이 함수의 시간복잡도는 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) 정도가 되겠네요~!

 

모든 코드에 대해 시간복잡도를 완전 정확하게 알기는 쉽지가 않아요.

그래서 시간복잡도를 계산하는 연습을 하는 것은 좋지만, 적당히 넘어가야 하는 코드들도 많이 만날거에요!

 

혹시 더 궁금하시면 질문 남겨주세요 ~