점근 표기법 학습에 대한 실로나는 상각 호스팅하면서 배, 배. 선형 시간 O (n) 의 개념이 이해가 되는데요, 즉 성장에 영향을 미치는 프로포르티오날리그랜드 알고리즘입니다 입력입니다 크기는 마찬가지다, 예를 들어, 이차 시간 O (n< sup> /sup> 2<;;;) 로 교환 등 레c번 알고리즘, 발전기, O (n!), 배 성장할 수 있는 계승.
예를 들어, 다음과 같은 기능을 사용할 수 있기 때문에 이 알고리즘은 O (n) n 따라 비례하여 입력:
f(int n) {
int i;
for (i = 0; i < n; ++i)
printf("%d", i);
}
마찬가지로, 만약 독극물이 nested loop, 시간 약간만이라도 O (n< sup> /sup> 2<;;;).
하지만 정확히 어떻게 O (log n) 는 ? 예를 들어, 어떻다는 있다고 높이 O (log n) 완전한 이진 진단트리는?
내가 아는 어떤 대수 (아니더라도 많은 상세함을) 가 있다는 점에서: log< sub> 10< /sub>;;; 하지만 난 식별할 수 있는 기능이 어떻게 이해할 수 없는 대수 100 = 2 시간.
>. 내가 어떻게 이해할 수 없는 식별할 수 있는 함수를 로그 하게하면서요.
가장 일반적인 특성을 시간을 실행 함수은 다음과 같은 사람이 있다.
또는
이 때문에, 예를 들어, O (log n) 에서 전화번호부 찾는 사람들이 있다. # 39 don& every 확인할 필요가 있습니다, t 전화 번호부의 오른쪽으로 한 사람을 찾습니다. 대신 그들의 위치를 기준으로 이름님은 문자순으로 보았으매 의해 분할 정복 됩니다 됩니다, 그리고 모든 부분을 찾기 전에 각 섹션의 서브세트 살펴보았으므로 결국 someone& # 39 의 전화 번호.
물론 더 큰 전화 번호부 계속 시행하십시오 won& # 39 더 긴 시간이 빨리 성장할 수 있지만, t 정도 추가 상승을 크기.
< hr/>;
전화 번호부 예제에서와 확장하십시오 비교할 수 있고 다른 종류의 운영 및 their 실행 시간. 대화할거에요 solaris. lionbridge 전화 번호부 businesses 있다 (이 Pages" 노란색이면 ";) 갖고 있는 고유한 이름과 people (이 ", 흰색 Pages") 않을 수 있는 고유한 이름을 가지고 있습니다. 전화 번호를 할당되었는지 많아야 한 사람 또는 경영학이라 또한 특정 호출이네요 전환할 수 있는 시간이 걸리는 상수입니다 solaris.
다음은 일부 작업을 수행할 수 있는 책, 전화를 통해 실행 시간을 우리가 가장 최악의:
아래의 예는 we& # 39, re 지금 현장에 대한 printer& # 39 의 사무실. 전화 기다리고 있어 각 묶음은 갑옷을 입은 there& 레지던트랑 또는 비즈니스, 스티커 부착, s # 39 을 발송할 수 있는 각 전화 번호부 식별하면 합니다. 모든 사람 또는 비즈니스의 전화 한 책이다.
자세한 수학적 설명 할 수 있습니다 'n' 목마르겠구나 로깅합니다 어떻게 체크아웃합니다 도착 시간 복잡도 https://hackernoon.com/what-does-the-time-complexity-o-log-n-actually-mean-45f94bb5bfbf
이 질문에 답을 이미 많은 优秀 게시하기를 있지만, 우리는 정말 중요한 한 - 즉, 더 일러스트레이티드 오토메이티드 실종됐다고 생각합니다.
>. 무슨 뜻이야 완료하십시오 O (log n) 이진 진단트리는 높이를 말하는?
이진 트리 다음 그리던건데 보여주고 있습니다. 각 레벨은 어떻게 디이브이 수를 두 배로 노드입니다 map_layer 비해 수준 높은 (업그레이드됨 이진 ):
복잡한 O (log n) '와' 이진 탐색 대표적이다. # 39 의 하위 수준의 나무를요 let& 있다고 노드입니다 그림 1 의 seabreeze 항목에서와 일부 정렬할지 뜻한다. 이진 탐색 () 는 분할 정복 알고리즘 및 드로잉에서는 fs@snapa 어떻게 할 것입니다 (최대) 4 비교 항목 검색 기록을 찾기 위해 우리는 이 16 데이터세트를.
대신 solaris. 하나님이 함께 한 데이터세트를 32tb 요소. 계속하시겠습니까 그들위에 드로잉에서는 찾을 수 있음을 알게 하는 등 5 가지가 이제 우리가 찾고자 한 단계 성장한 때 우리는 더욱 더 많은 양의 데이터를 여러배의 나무를요 사용할 수 있습니다. 그 결과, 복잡한 알고리즘입니다 로그 오더할 설명할 수 있다.
로그 (n) '를 일반 종이에 쓴 거 플로팅에', 'n' 로 감속 그래프란다 여기서 업그레이드하면 상승 곡선을 캐시-코어:
'O (log N)' 는 기본적으로 시간이 지남에 따라 기하급수적으로 동안 'n' 까지 올라간다. 만일 두 번째 요소 '1', '10' 계산하는 데 걸리는 시간이 걸리기 때문에 '2' 초 '100', '1000년' 초 '3' 요소를 계산하기 위한 계산하기 위한 요소, 드릴링됩니다.
이 때 O (log n) '는' 우리가 분할 정복 알고리즘 입력하십시ᄃ오 에드그 이진 탐색. 다른 예로, 우리는 두 부분으로 나눌 수 있는 빠른 정렬하려면 때마다 매번 어레이입니다 걸리는 시간 O (N) '및' com/go/downloads_kr 집어넣을 요소. 따라서 이는 'N O (log N)'
이진 트리 경우는 문제가 크기 n 크기의 서브노드 문제 도달할 때까지 우리는 n/2 분할됩니다 문제가 크기 1:
O (log n) 는 이진 검색 알고리즘 함께 일반적인 시간 복잡도 (n/2) + O (1) 즉 T 는 재귀 관계식을 그 이후의 수준의 나무를요 수명주기의 모든 문제를 여러 반단면 및 추가 작업 양을 못하며창조된 상수입니다 나눌 수 있습니다.
다른 좋은 베푼 구성도를 참조용이므로 나무를요 같은 말한다. I did 표시되지 않는 간단한 코드 예제. 그래서 내 외에도 일부 알고리즘을 설명하기 위해 간단한 설명, ll, I& # 39 는 서로 다른 알고리즘입니다 제표를 인쇄하십시오 복잡성입니다 범주입니다.
첫째, you& # 39, ll 사용하고자 하는 일반적인 개념은 대수 (https://en.wikipedia.org/wiki/Logarithm), 얻을 수 있다. 자연 과학 'e' 를 사용하여 자연 로그. 컴퓨터 과학자들은 log_2 log_10 (로그에서는 기본 10 명) 와 그의 제자들이 기술팀에서 사용할 사용할 수 있기 때문에 컴퓨터는 이진 (log 기본 2) 많이유 합니다. 때로는 약어를 자연 로그 log () ',' ll see you& # 39 로 두고, 엔지니어 보통 줄여서 '는 로그 ()' 와 '_10 끄기나 됩니다 log_2 lg ()'. 모든 유형의 대수 유사한 방식으로, 그래서 그들은 같은 범주에 따라 공유하지는 '로그 (n)'.
아래 코드 예제를 보면, 내가 볼 때 O (n), 그 후 추천합니까 O (1) O (n ^ 2). 그 후, 다른 좋아 살펴볼 수 있습니다. # 39, ve i& 포함되어 있을 뿐만 아니라 미묘한 변화가 발생할 수 있는 다양한 방법을 제시하십시오 참조용이므로 청소하십시오 여전히 같은 분류.
O (1), O (n), 생각할 수 있습니다 (i/o 로근) 등 클래스 또는 범주입니다 증가세를 보였다. 일부 범주입니다 시간이 더 소요될 것이라고 할 수 있는 다른 디바이스보다. 이러한 범주는 도움말에서는 저희에게 길을 지시한 알고리즘입니다 성능. 일부 커짐에 따라 ᄂ씨 입력입니다 빠르게 증가하고 있습니다. 다음 표는 숫자순 성장을 보여준다 "고 말했다. 아래 표에서 생각하노라 log (n) 를 상한선을 log_2.
다양한 대량량 O Categories:* 간단한 코드 예제
Examples:* 상수 시간 O (1) -
print "hello";
다만 입력 크기가 3 배) 가 2 알고리즘입니다 누구없어요 의존하지 않는다. 이 알고리즘은 n 늘어남에 따라 때에도 항상 국한됨 인쇄하십시오 누구없어요 3 회. 있다는 것 때문에 이 알고리즘은 O (1) 도 3, 항상 ''.
print "hello";
print "hello";
print "hello";
for(int i = 1; i <= n; i = i * 2)
print "hello";
4 알고리즘입니다 log_3 보여준다. 'I' 3 대 1 에서 9 디이브이 댁이라면 27.
for(int i = 1; i <= n; i = i * 3)
print "hello";
5 로 보여주는 것도 중요하지만 이를 통해 알고리즘입니다 deltamove 그 수가 1 보다 큰 및 그 결과 여러배의 자체에 대해 거듭 중인 대수 알고리즘입니다 보면서.
for(double i = 1; i < n; i = i * 1.02)
print "hello";
이 알고리즘은 n 번 누구없어요 간단한 인쇄하는.
for(int i = 0; i < n; i++)
print "hello";
이 알고리즘은 fs@snapa 변형, 어디에 인쇄됩니다 누구없어요 n/2 시간. * n 게하여 무시하시겠습니까 n/2 = 1/2 이 알고리즘은 O (n) 1/2 상수입니다 볼 수 있습니다.
for(int i = 0; i < n; i = i + 2)
print "hello";
이 생각을 비호환성의 O (log (n)) '와' 함께 'O (n)'. 이 '의 루프 도움을 중첩할 입수합니다 O ( lo * (n))'
for(int i = 0; i < n; i++)
for(int j = 1; j < n; j = j * 2)
print "hello";
하지만 각 8, 9 가 마치 알고리즘입니다 알고리즘입니다 루프가 발생할 수 있다, 이는 여전히 변화가 기술입니까 'O ( lo * (n))' 최종 결과
for(int i = 0; i < n; i = i + 2)
for(int j = 1; j < n; j = j * 3)
print "hello";
'O (n) ^ 2)' 가 쉽게 취득됩니다 중첩하면 standard for 루프.
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
print "hello";
단, 일부 등 10 알고리즘입니다 차이.
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j = j + 2)
print "hello";
이건 마치 알고리즘입니다 루프 대신 3 단, 2. 10
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
print "hello";
단, 일부 남아 있는 것은 같은 알고리즘입니다 12 변주곡 'O (n) ^ 3)'.
for(int i = 0; i < n; i++)
for(int j = 0; j < n + 5; j = j + 2)
for(int k = 0; k < n; k = k + 3)
print "hello";
위의 여러 가지 변화를 줄 수 있도록 어떤 미묘한 변화를 줄 수 있는 사례, 간단하지는 제시하십시오 # 39 는 정말 don&, t change 분석했다. 이를 충분히 파악할 수 있기를 바랍니다.
했을 경우, 함수 넘겨받은:
1 millisecond to complete if you have 2 elements.
2 milliseconds to complete if you have 4 elements.
3 milliseconds to complete if you have 8 elements.
4 milliseconds to complete if you have 16 elements.
...
n milliseconds to complete if you have 2**n elements.
그 후, 2< /sub> sub> log<;; (n) 시간이 걸린다. 이 [점근 표기법] (http://en.wikipedia.org/wiki/Big_O_notation), 즉, 말하기, 느슨하게 elationship 있어야 진정한 대규모 n, 그리고 그 상수입니다 제거율과 작은 약관보다 무시할 수 있습니다.
우리는 하나님이 내려 묶임 redhat. 상상할 것. 밧줄, 필요할 경우 직접 말을 제약됨 강제 말을 가져오기할 빼냅니다 (말하도다 from a man) 은 직접 1.
이제 한 것은 상상할 밧줄 기둥이네 라운드하지 루프 이제 말을 여러 번 가져오기할 투 겟 어웨이 힘들어진다. 양 손에 들고 배 크기에 따라 달라질 수 있지만, 그리고 황삭을 let& # 39, s 의 강도 one& 곱합니다 solaris. 것 # 39 에서 10 (밧줄 완료하십시오 할 때 선반가공).
이제 한 번 10 배 더 열심히 말을 할 경우, 밧줄 루프 당기십시오 있다. 인간의 경우 결정할 수 있도록 한 곳, 그는 정말 힘든 말을 다시 루프 밧줄, s # 39 라운드 it& 추가하여 강도를 높이는 10 배. 세 번째 루프는 증가되지는 의해 다시 힘을 더 10 배.
우리는 각 루프 값은 무려 10 캐시-코어 것을 알 수 있다. 회전 수를 데 필요한 모든 숫자가 3 국 (즉, 우리가 할 수 있는 호출됨 대수를 통해 여러 번, 6 국 증가시키십시오 의해 힘을 너회의 강도를 1000년 1,000,000.
3 은 1,000,000 (기본 10) 는 대수 및 6 천 유지된다.
Turns | Max Force
0 | 1
1 | 10
2 | 100
3 | 1000
4 | 10000
n | 10^n
위의 예는 있지만, 이제 한 사람도 없는 경로재설정 밑수가 10 바닥에 로그는 대해 이야기할 때 점근 표기법.
Your Friend: Guess my number between 1-100!
Your Guess: 50
Your Friend: Lower!
Your Guess: 25
Your Friend: Lower!
Your Guess: 13
Your Friend: Higher!
Your Guess: 19
Your Friend: Higher!
Your Friend: 22
Your Guess: Lower!
Your Guess: 20
Your Friend: Higher!
Your Guess: 21
Your Friend: YOU GOT IT!
이제 7 짐작은 afaq afnor 그러겄지 너회가 걸렸다 하지만 어떤 관계가 여기서요? 각 지역에서 가장 많은 양의 지정하십시오. 항목과의 짐작할 수 있는 추가 생각?
Guesses | Items
1 | 2
2 | 4
3 | 8
4 | 16
5 | 32
6 | 64
7 | 128
10 | 1024
만약 우리가 사용하는 그래프화합니다 사용하여, we can see it 가 앨리어스보다 미국 최대 1-100 사이의 수를 가늠하기는 이진 탐색 7 시도. 만일 하나님이 128 숫자임 수도 있었을 것입니다 하지만 많아야 좋은 결과를 짐작할 수) 7 시도한다 129 는 미국 8 시도 (관계식에는 대한 대수, 필요할 경우 7 짐작은 여기서 128 짐작은 값 범위, 10 의 1024년 값 범위. 그는 7 은 로그 128, 10 은 로그 (1024년 기준 2).
>. 아마 우리는 우리의 모든 데이터 집합이 있다는 것을 알 수 있다. 가장 중요한 규칙은 경우 알고리즘입니다 로가리스마티스 시간은 식별할 수 있다. >. 주눅들지 여부를 확인하기 위해 특정 데이터 세트 주문 후 각 이터레이션에
결국 됩니다 시간 O (n log (n) 알고리즘입니다. 라인라이스미스 통해 따라오렴 이 규칙에 따르면, 이번에는 로그 함수에 위에 다시 qic (예를 들어 n 번 , n 번 실행할 수 있는 알고리즘을 크기를 줄이는 바뀌엇어요 메그레소르 발생하는 것 같다.
만약 n log n time 은 쉽게 확인할 수 있습니다. (Look for 루프 반복하여 있는 외부 알고리즘 목록 (O (n)). To see if there is an 내부 루프지 보세요 는 데이터 세트의 경우 가공 / 줄일 수 있는 내부 루프 (loop) 는 각 이터레이션인지 (O (log n), 그래서 알고리즘은 O (n log n) = 전반적인 .
[2]: https://www.amazon.co.uk/mathematicians-delight-dover-books-mathematics/dp/ 0486462404
O (log N) 직관적으로 생각할 수 있는 시간이 말해 비례한다 자릿수를 N.
작업의 경우 각 자리에 입력, 운영 전반에 대한 연구를 수행하는 상수입니다 시간 또는 다소 시간이 걸릴 것이라고 비례하는 수의 자리 또는 비트 입력 강도입니다 아닌 입력. 따라서 O (log N) 보다는 O (N).
일련의 일정 시간 决策 만드는 작업의 경우 각 재배케하여 절반 (낮춰줍니다 분의 3, 4, 5.) 전체 크기는 입력입니다 비례하는 시간이 걸릴 것으로 간주되려면 로깅하도록 베이스 (base 3, 베이스, 베이스 5. 4) 2 입력 크기 N, O (N) 되지 않고.
및 드릴링됩니다.
곱셈적 의해 문제 크기 늘리면 양 (즉, 크기도 곱합니다 무려 10) 에 의해 포지셔닝하여 추가 작업이 양 증가에 그쳤다.
그래서 당신은 이 질문에 적용 데이터베이스에구성원을 이진 트리 좋은 프로그램: 수를 두 배로 늘릴 경우 이진 트리에 노드입니다 눈치보기식 높이가 1 씩 경우 (부가 금액). 이 경우, 여전히 1 두 번 다시 증가하는 데 그쳤다. (물론, 계속 밸런싱됩니다 I& # 39 m 경우 등). 대신 업무를 이쪽요 두 문제가 발생할 때, 조금 더 많은 일을 하고, # 39 만 you& 여러배의 크기는 매우 좋았다. # 39 의 알고리즘은 O (log n) 왜 that& 멋집니다.
우선 내가 추천합니까 다음과 같은 책을 읽을 수 있습니다.
[알고리즘 (제 4 판은)] [1]
다음은 일부 기능과 그들의 극복할 수 있을 것으로 보인다. 번호는 기술서임을 엑서큐션 주파수를 손실됨을 .
! [슬라이드에서는 일부 기능과 복잡한 그들의 걱정했던것] [2]
마지막으로 아주 단순해졌습니다 쇼케이스 fs@snapa 계산됩니까 방식에 있다.
그의 발언은 분석 프로그램 실행 속도.
실행 시간 분석 프로그램 (예).
[1]: ie? 키드 = 1499027825, sr = = = sr_1_1 https://www.amazon.com/algorithms-4th-robert-sedgewick/dp/032157351x/ref utf8& & 여러_키워드 = algorithms% 204th% 20edition 8-1&;
이는 여러 번 반복해서 b 에 도달하기 전에 동일한 부분을 잘라냅니다 로그에서는 길이가 n 수 있는 부분을 크기 1.
분할 정복 알고리즘 대개 'a' 를 로근 컴포넌트인지 하게하면서요. 이 같은 입력 절반으로 비롯됩니다.
이진 탐색 너회가 버릴 경우, 모든 이터레이션에 절반을 입력입니다. 그런 점에서 큰 오 기록하십시오 로깅합니다 표기법 () 는 기본 2 점에 유의해야 합니다.
편집: 앞에서 언급한 바와 같이 로그, t matter, 하지만 이 때 기본 doesn& # 39 의 성능을 기반으로 한 것으로 인해 큰 오 로그 팩터에서의 온, 즉, 내가 왜 기본 2 절반으로 생각하면 됩니다.
>. 그러나 정확하게 O (log n)? 예를 들어, 어떻다는 있다고 > 완료하십시오 O (log n), 높이는 이진 진단트리는?
이것을 & # 39, 두께 꼭 이래야겠어요 말할께 완전한 이진 로그 n& 진단트리는 # 39;. O (log n), 높이는 것이 완전한 이진 탐색 트리 약간만이라도 조교하실 경우 다운되어도 단계별.
>. 내가 어떻게 이해할 수 없는 식별할 수 있는 함수를 로그 >. 하게하면서요.
본질적으로 거듭제곱 대한 유지된다. # 39, & # 39, 따라서 각 step& 기능을 사용할 수 없으므로 a 는 원래 요소, 즉 시간 알고리즘이 로그 항목을 팩터에서의 설정되었습니다.
예를 들어, 일정 수준의 노드입니다 나무를요 대해 쉽게 알 수 있습니다 스테핑이란 아래로 아래로 이동할 때 폭발적인 잘라냅니다 여러 요소를 계속하시겠습니까. 가장 인기 있는 예를 통해 이동할 수 있는 전화 번호부 본질적으로 이름 정렬할지 avamer 내려 이진 탐색 트리 (가운데 페이지는 루트 요소는 추론할 수 있으며, 각 단계에서 검색하기를 분할할지를 왼쪽 또는 오른쪽).
O (log n) 는 좀 더 정확히 말하면, 잘못된 it& # 39 의 O (log< sub> 2< /sub>;;; n), 즉 (대수 및 기본 모델 2).
이진 진단트리는 높이를 밸런싱됩니다 (i/o log< sub> 2< /sub>;;; n), 이후 모든 노드에 2 개 (기록하십시오 two" "; 같이 sub> 2< /sub> log<;;; 자식 노드 n). 그래서 이 트리는 n 노드입니다 높이 log< sub> 2< /sub>;;; n.
다른 예로, 이진 탐색 갖고 있는 실행 시간 O (,, /sub> log< sub> 2<. 모든 단계에서 너회가 나누기 때문에 n), 검색 공간에서 2 로.
'O (log n)' 는 함수 (또는 알고리즘입니다 또는 단계입니다 알고리즘입니다) 에서 일하는 시간에 비례하는 로그 (일반적으로 베이스 2 대부분의 경우, 없는 것은 아니지만, 어느 의해 항상 이번 대회는 큰 오 표기법 *) 크기의 입력입니다.
이 기능은 보색으로 지수 함수 대수. 바꾸어 말하자면, 입력입니다 경우 기하급수적으로 증가 (아닌, 평상시와 같이 선형으로 간주할) 을 통해 기능 확장 때 쓰인다.
'O (log n)' 에서 실행 시간은 매우 일반적인 애플리케이션, 왜냐하면 당신은 어떤 종류의 분할 정복 (가장) 가공 작업하십시오 반단면 항상. 각 사업부의 경우, 또는 정복하십시오 단계를 상수입니다 시간 작업 하고 있습니다 (또는 작업 없는 일정 시간 O (log n) '보다' 천천히 갖추고 있지만, 시간이 갈수록), O (log n) '는' 그런후에도 너회의 전해석 함수. # 39 의 it& 하는 대신, 각 단계는 선형 시간 꽤 흔한 입력에서 알 수 있다. 이 금액은 총 시간 O (n log n) '복잡한'.
실행 시간 복잡도가 O (log n) 이진 탐색 예는 ''. 당신은 항상 여러분의 의견을 무시하고 있는 이진 탐색, 이는 나중에 절반은 각 단계 한 단계 반단면 서로 나누는 방식으로 어레이입니다 반단면 유일한 주력하고 있다. 각 단계는 이진 검색, 일정 시간 때문에 고객의 주요 요소는 됩니다 비교하십시오 위해 얼마나 올랐는지 다澜에 해야 할 일 선명하게 촬상 언제든지 큰 어레이입니다 고려하고 있다. 할 수 있도록 약 log (n) / log (2) 단계.
실행 시간 복잡도가 O (n log n) '' 정렬하려면 병합해야 예입니다. 이 때문에 틀렸다니까 나누어 각 단계에 있는 어레이입니다 반단면, 그 결과 총 대략 log (n) / log (2) 단계. 그러나 각 단계의 작업을 수행하는 데 필요한 모든 요소에 대한 병합해야 (표시할지를 it& # 39 의 한 결합 연산을 두 개의 하위 목록 중 n/2 요소, 또는 두 개의 병합해야 운영체 있는 4 개의 하위 목록 중 n/4 요소, 관련이 없습니다 자도으로 n 개의 요소를 갖추고 있기 때문에 이를 위해 각 단계의). 이에 따라 O (n log n) '는' 총 복잡성을.
즉 단순히 이 작업에 필요한 시간을 함께 성장하는 로그 (n) (예: 2s (n = 10, 4s (n = 100mb/s.). 위키백과의 문서를 읽고 있는 이진 검색 알고리즘 및 점근 표기법 보다 정밀도.