알고리즘을 분석하려면 "이 특정 줄에 얼마나 많은 시간이 소요됩니까?"라는 질문을 한 줄씩 건너 뛰고 싶지는 않습니다. 그 이유는 각 행이 동일한 횟수만큼 실행되지 않기 때문입니다. 예를 들어, 가장 안쪽에있는 행은 한 번 실행되는 첫 번째 행에 비해 한 번에 여러 번 실행됩니다.
이와 같은 알고리즘을 분석하려면 알고리즘의 총 런타임의 일정한 인수 내에 값이있는 수량을 확인하십시오. 이 경우, 그 수량은 아마도 "sum++
라인이 몇 번 실행됩니까?"라고 할 수 있습니다. 왜냐하면이 값을 알면 알고리즘의 두 루프가 소비 한 총 시간을 알 수 있기 때문입니다. 이것을 파악하기 위해 이러한 루프에서 어떤 일이 일어나는지 추적 해 봅시다. 외부 루프의 첫 번째 반복에서는 i == 0
이므로 내부 루프는 정확히 한 번 실행됩니다 (0에서 0까지 카운트 다운). 외부 루프의 두 번째 반복에서 i == 1
과 내부 루프가 정확히 두 번 실행됩니다 (처음에는 j == 0
을 사용하여 j == 1
). 일반적으로 외부 루프의 k 번째 반복에서 내부 루프는 k + 1
번을 실행합니다. 가장 안쪽 루프의 반복 횟수가
1 + 2 + 3 + ... + N
주어진다이 수량이 두 용어
N (N + 1) N^2 + N N^2 N
--------- = ------- = --- + ---
2 2 2 2
동일하게 표시 할 수 있고, N^2/2
용어는 지배적 인 성장 기간이고, 그렇다면 우리는 그것의 상수 fa를 무시합니다. 우리는 O (N)의 런타임을 얻습니다.
이 답을 암기해야하는 것으로 보지 마십시오. 답을 얻는 데 필요한 모든 단계를 생각하십시오. 카운트 할 수량을 찾은 다음, 루프의 실행에 의해 그 수량이 어떻게 영향을 받는지를 보았습니다. 이로부터 우리는 그 양에 대한 수학적 표현을 도출 할 수 있었고, 우리는이를 단순화했습니다. 마지막으로, 결과 표현식을 취하여 전체적인 기능에 대해 큰 역할을하는 지배적 인 용어를 결정했습니다.
당신은 N을하지 루프 카운터 관련 복잡성을 계산해야합니다. – thkala