I는 I 같은 복잡한 합리적인 이해가 판단 , Θ ( N ) 과 Θ ( N 2 ) .
목록 측면에서 은 지속적인 조회이므로 목록의 머리를 얻는 것입니다. Θ ( n ) 은 전체 목록을 걷는 곳이며 Θ ( n 2 ) 는 목록의 각 요소에 대해 한 번 목록을 걷는 것입니다.
파악 유사한 직관적 인 방법이 , 다른 하나는 그 사이 어딘가에 자리 잡고 단지 아는 것보다 O ( 1 ) 와 Θ ( N ) ?
I는 I 같은 복잡한 합리적인 이해가 판단 , Θ ( N ) 과 Θ ( N 2 ) .
목록 측면에서 은 지속적인 조회이므로 목록의 머리를 얻는 것입니다. Θ ( n ) 은 전체 목록을 걷는 곳이며 Θ ( n 2 ) 는 목록의 각 요소에 대해 한 번 목록을 걷는 것입니다.
파악 유사한 직관적 인 방법이 , 다른 하나는 그 사이 어딘가에 자리 잡고 단지 아는 것보다 O ( 1 ) 와 Θ ( N ) ?
답변:
복잡성은 일반적 세분 접속된다. 목록을 예로 사용하는 경우 요소가 정렬 된 목록을 상상해보십시오. O ( log n ) 시간 으로이 목록에서 검색 할 수 있습니다 . 목록의 정렬 특성으로 인해 각 요소를 실제로 볼 필요는 없습니다.
목록 중간에있는 요소를보고 검색 한 요소와 비교하면 배열의 왼쪽 또는 오른쪽 절반에 있는지 여부를 즉시 알 수 있습니다. 그런 다음이 절반을 가져 와서 찾을 때까지 절차를 반복하거나 사소하게 비교 한 1 개의 항목이있는 목록에 도달 할 수 있습니다.
목록이 각 단계를 효과적으로 반으로 나눈 것을 볼 수 있습니다. 즉 , 길이가 인 목록을 얻으면 한 항목 목록에 도달 해야하는 최대 단계는 5 입니다. 128 = 2 7 항목 의 목록이있는 경우 7 단계 만 필요 하고 1024 = 2 10 목록의 경우 10 단계 만 필요 합니다.
보다시피, 2 n 의 지수 은 항상 필요한 단계 수를 나타냅니다. 이 지수를 정확하게 추출하기 위해 로그가 사용됩니다 (예 : log 2 2 10 = 10) . 또한 2의 거듭 제곱이 아닌 길이를 나열하도록 일반화합니다.
O(log n)
목록에 일정한 시간 랜덤 액세스 가있는 경우 에만 해당 됩니다. 보다 일반적인 목록 구현 (연결된 목록)에서 이것은O(n log n)
십진수 로 변환하는 알고리즘을 생각해보십시오.
while n != 0:
print n%2,
n = n/2
while