2017-12-14 19 views
-2

예제 연습에서는 배열의 모든 요소가 서로 동일한 지 확인했습니다. 이 질문은이 작업을 수행하는 가장 효율적인 방법에 관한 것이 아닙니다. 오히려이 두 가지 솔루션에 관한 것입니다.동일한 for 루프에서 비교 횟수가 시간 복잡도에 영향을 줍니까?

for(var i=0; i < set.length-1; i++) 
    { 
    if (set[i] != set[i+1]) // could have compared all elements to the firstelement instead of switching 
    { 
    isTrue=false; 
    } 

    } 

위의 알고리즘은 각 인덱스를 인덱스와 나중에 비교합니다.

var firstIndex=set[0]; 
for(var i=0; i < set.length-1; i++) 
{ 
    if(set[i] != firstIndex) 
    { 
     isTrue=false; 
    } 
} 

이 알고리즘은 현재 색인과 첫 번째 색인을 비교합니다. 이러한 알고리즘은 적어도 O (N)이지만. 비교의 차이가 시간/공간 복잡성에 영향을 줍니까?

+0

같은 일을 물건으로하지 런타임 시간 복잡도을 향상시킬 수 있습니다 - 중복이 발생했습니다. – RobG

+0

인터뷰를 준비 중이며 주어진 코드를 기반으로 복잡성을 계산하는 방법을 이해하려고했습니다. 큰 O는 어느 경우에도 선형일까요? –

답변

1

시간 복잡성을 분명히 일을 할 수 있습니다. 공간 복잡도는 O(1)입니다.

배열 색인 액세스 또는 기타 같은 것은 Big-O 시간 복잡성에 영향을주지 않습니다.

이러한 알고리즘은 적어도 O (N)이지만.

이들은 적어도 O(n)입니다.

당신은 조건이`내가

if(set[i] != firstIndex) 
{ 
    isTrue=false; 
    break; 
} 
+0

아! https://stackoverflow.com/questions/4915842/difference-between-time-complexity-and-running-time에서 알 수 있듯이, 런타임은 일반적으로 대부분의 알고리즘에 알려져 있지 않습니다. 더 큰 입력으로 확장하는 것과 관련하여 런타임이 중요합니까? –

+0

실행 시간 문제를 조정하는 데는 문제가 없지만, 변경 사항이 선형 적으로 비례한다는 것을 알고 있어야합니다. 이 algo를 크게 'n'으로 확장하면 모든 변경 사항이 선형이됩니다. 당신이 이것을 묻는 지 확신 할 수는 없지만 - runtime ofc의 경우'n '에 대한 편차가 있지만 복잡성에 대해서는 같은 클래스에 속합니다. @ NithinMoorthy – coderredoc

+0

@coderredoc. 이것은 매우 도움이되었습니다. –

0

공간 복잡성 : 여분의 변수/데이터 구조를 사용하지 않아도 변경되지 않습니다. 두 번째 코드 단편에있는 firstIndex은 일정한 공간을 차지하므로 고려하지 않습니다.

시간 복잡도 : 거의 변화 없음. 두 조각 모두에서 단일 비교를 수행하지만 배열 액세스가 직접 변수 액세스와 비교할 때 속도가 느리기 때문에 첫 번째 코드 조각은 조금 느려집니다. 둘 다 O(n) 될 것이기

+0

좋아요, 이것이 제가 궁금해 한 것입니다. 배열을 반복적으로 액세스하면 변경이 발생합니다. 고맙습니다! 이 질문에 왜 싫어하는 지 아십니까? –

+0

또한 big O가 두 경우 모두 선형일까요? –

+0

Big O는 어레이 액세스가 일반적으로 시간 복잡성을 고려하지 않기 때문에 두 경우 모두 선형입니다. – Ran