분명히 길이가 이진 문자열이 있습니다. 이진을 탐색하려면 알고리즘이 각 노드를 한 번 방문해야합니다. 즉
단계. 2 n 2 n ∑ i = 0 2 i = 2 2 n + 1 − 1 = O ( 4 n )4엔2 N
∑나는 = 02 N2나는= 22 N + 1− 1 = O ( 4엔)
당신이 묘사 한 트리를 가로 지르는 재귀 알고리즘을 고려하지만 그 길에서 1과 0의 수를 세어 봅시다. 즉, 트리의 좋은 부분만을 가로지 릅니다.
그러나 0과 1을 가진 이진 문자열 은 몇 개입니까? 길이 의 문자열에 대해 1을 선택 하고 2 단계에서 스털링 공식을 사용합니다.
, N , N (2) , N ( 2 N엔엔엔2 N
( 2N엔) =(2, N)!( n ! )2= 4엔π엔−−−√( 1 + O ( 1 / n ) )
편집
Peter Shor의 의견 덕분에 두 번째 알고리즘에 필요한 단계 수를 분석 할 수 있습니다.이 알고리즘은 1과 0을 계산합니다. 아래에서 그의 의견을 인용하고 있습니다.
정확히 0과 1을 가진 모든 이진 시퀀스를 찾고 싶습니다 . 각 노드가 최대 0과 1의 시퀀스 인 이진 트리를 순회합니다 . 0보다 크거나 1 보다 큰 노드를 방문 할 필요가 없습니다 . 몇 개의 노드를 방문해야합니까? 있다 와 문자열 공의와 1 개의를. 온통이 합산 준다 . 이제 노드 당 일정한 평균 비용으로 이러한 각 노드를 방문해야합니다. 우리는 각각의 왼쪽 자식을 먼저 방문하고 오른쪽 자식을 두 번째 방문하여이를 수행 할 수 있습니다.n 2 n n n ( i + j엔엔2 N엔엔 iji,j≤n∑ n i = 0 ∑ n j = 0 ( i + j( 나는+J나는)나는제이i , j ≤ n∑엔나는 = 0∑엔j = 0( 나는+J나는) = ( 2, N+2n + 1) −1
스털링 공식을 다시 사용하면
새 알고리즘의 실행 시간으로 .
( 2 , N + 2n + 1) −1=4n + 11n + 1−−−−−√( 1 + O ( 1 / n ) ) − 1 = O ( 4엔엔−−√)