로그 복잡도에 대한 알고리즘 직감


59

I는 I 같은 복잡한 합리적인 이해가 판단 , Θ ( N )Θ ( N 2 ) .O(1)Θ(n)Θ(n2)

목록 측면에서 은 지속적인 조회이므로 목록의 머리를 얻는 것입니다. Θ ( n ) 은 전체 목록을 걷는 곳이며 Θ ( n 2 ) 는 목록의 각 요소에 대해 한 번 목록을 걷는 것입니다.O(1)Θ(n)Θ(n2)

파악 유사한 직관적 인 방법이 , 다른 하나는 그 사이 어딘가에 자리 잡고 단지 아는 것보다 O ( 1 )Θ ( N ) ?Θ(logn)O(1)Θ(n)


8
로그 n은 "검색"을위한 것입니다 : 이진 검색을 생각하십시오
Suresh

2
를 사용 하여이 질문을하는 것은 상한 만 나타 내기 때문에 올바르지 않습니다. 예를 들어 상수 시간은 O ( log n ) 입니다. θ 가 더 적절할 것입니다. 메타 질문보기 : meta.cs.stackexchange.com/questions/182/…OO(logn)θ
Aryabhata


약간의 참고 사항 : 고전적인 Turing Machine 설정에서는 모든 알고리즘이 입니다. 입력의 각 기호를 한 번 이상 읽어야하기 때문입니다. 이진 검색은 예를 들어 목록이 정렬 될 것이라는 약속 이 있기 때문에 O ( log n ) 로 수행 할 수 있습니다 . Ω(n)O(logn)
chazisop 2016 년

1
늦은 기여 : 정의에 따르면, 숫자 n 의 기본 로그는 b 에 자체를 곱하여 n 을 곱한 횟수입니다 . b l = nbnbn . 예를 들어, 2 3 = 8bl=nl=logb(n) 입니다. 당신은 수있는 그렇다면 N을 당신은 무엇을 발견 할 리터의 g의 B를 ( N ) = ? 1에 도달 할 때까지 b로 나누면됩니다(단순함을 위해 n b 의 거듭 제곱이라고 가정). 나누기의 수는 l o g b ( n )과 같습니다 . 이 분주 동작을 나타내는 알고리즘에 한 번 실행 O ( L 개의 입출력 g23=8log2(8)=3nlogb(n)=?b1nblogb(n) . O(log(n))
saadtaame

답변:


53

복잡성은 일반적 세분 접속된다. 목록을 예로 사용하는 경우 요소가 정렬 된 목록을 상상해보십시오. O ( log n ) 시간 으로이 목록에서 검색 할 수 있습니다 . 목록의 정렬 특성으로 인해 각 요소를 실제로 볼 필요는 없습니다.Θ(logn)O(logn)

목록 중간에있는 요소를보고 검색 한 요소와 비교하면 배열의 왼쪽 또는 오른쪽 절반에 있는지 여부를 즉시 알 수 있습니다. 그런 다음이 절반을 가져 와서 찾을 때까지 절차를 반복하거나 사소하게 비교 한 1 개의 항목이있는 목록에 도달 할 수 있습니다.

목록이 각 단계를 효과적으로 반으로 나눈 것을 볼 수 있습니다. 즉 , 길이가 인 목록을 얻으면 한 항목 목록에 도달 해야하는 최대 단계는 5 입니다. 128 = 2 7 항목 의 목록이있는 경우 7 단계 만 필요 하고 1024 = 2 10 목록의 경우 10 단계 만 필요 합니다.325128=2771024=21010

보다시피, 2 n 의 지수 은 항상 필요한 단계 수를 나타냅니다. 이 지수를 정확하게 추출하기 위해 로그가 사용됩니다 (예 : log 2 2 10 = 10) . 또한 2의 거듭 제곱이 아닌 길이를 나열하도록 일반화합니다.n2nlog2210=10


4
이는 O(log n)목록에 일정한 시간 랜덤 액세스 가있는 경우 에만 해당 됩니다. 보다 일반적인 목록 구현 (연결된 목록)에서 이것은O(n log n)
asm

1
포인터가없는 목록에서는 이진 검색이 작동하지 않습니다. 일반적으로 배열에서 수행됩니다.
Raphael

이진 검색은 목록에서 잘 작동합니다. 그것은 필수 / 유용한 / 실용적인 것보다 훨씬 더 복잡하다는 점에서 무의미합니다.
Anton

링크 된리스트를 탐색 @AndrewMyers 더 정확하다 O(n)
phant0m

1
@ phant0m 그래, 매번 처음부터 순회하는 대신 현재 위치에서 움직이고 있다고 가정하는 데 약간의 시간이 걸렸다.
asm

38

(균형) 트리 측면에서 (이진 트리이므로 모든 는 기본 2입니다) :log

  • 은 나무의 뿌리를 얻고 있습니다Θ(1)
  • 은 뿌리에서 잎까지의 거리입니다.Θ(logn)
  • Θ(n)
  • Θ(n2)
  • Θ(nk)kk
  • Θ(2n)k=1,2,,n

5
Θ(loglogn)T(n)=T((n))+1log(n)

17

O(logn)n

예를 들어, 이진 검색의 경우 각 비교 작업마다 문제 크기를 절반으로 줄일 수 있습니다.

O(logn)O(logn)O(logn)logn


1
'다운 컷팅 양'이 일정하지 않은 경우 어떻게됩니까?
Svish

O(logn)

예, 문제 검색 공간이 항상 줄어들었지만 반드시 일정한 속도로 유지되는 것은 아닙니다. "문제 크기를 줄이기 위해 사용하는 백분율과 연산이 일정하게 유지되는 한 O (log n) 알고리즘"입니다. 비율이 일정하지 않은 경우 이름이 다른 경우
Svish


8

log(n)1n1nlog(n)

100210021002100100210021002100

10021001002100210021001002100log(n)n

지수와 로그는 어디에서 오는가? 컴퓨터 과학에 관심이 많은 이유는 무엇입니까? 눈치 채지 못할 수도 있지만 지수는 어디에나 있습니다. 신용 카드로이자를 지불 했습니까? 당신은 당신의 가정을 위해 우주를 지불했습니다 (나쁘지는 않지만 곡선이 맞습니다). 지수는 제품 규칙에서 비롯된 것이라고 생각하지만 다른 사람들은 더 많은 예제를 제공 할 수 있습니다. 제품 규칙은 무엇입니까? 그리고 나는 대답 할 것이다.

ABCBCACDCAD2342421010242101010210101024

log2(n)nn2n2logb(n)bbnlog(n)nn

log(n)n


3
log(n)

3
나는 그것이 얼마나 작은 지 직관하려고 노력했다.
Ravi

5

O(logn)x

여전히 목록의 크기를 기반으로하지만 일부 요소 만 방문하면됩니다.


4

Θ(lgkn)Θ(lgk+1n)

Θ(1)lgn

이진 검색 알고리즘은 고전적인 예이다.


1

직감은 숫자를 반으로 줄일 수있는 횟수입니다. 예를 들어 n은 1로 줄이기 전에 O (lg n)입니다.

시각화하려면 이진 트리로 그림을 그려이 기하학적 진행을 해결하여 레벨 수를 계산하십시오.

2^0+2^1+...+2^h = n

lognn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.