2011-02-26 4 views
4

결정 성 선형 검색 알고리즘의 평균 사례 실행 시간을 도출하려고합니다. 알고리즘은 정렬되지 않은 배열 A의 요소 x를 A [1], A [2], A [3] ... A [n]의 순서로 검색합니다. 요소 x를 찾거나 배열의 끝에 도달 할 때까지 계속됩니다. 나는 wikipedia을 검색했고 주어진 답은 (n + 1)/(k + 1)이었습니다. 여기서 k는 x가 배열에있는 횟수입니다. 나는 다른 방법으로 접근했고 다른 대답을 얻고있다. 아무도 내게 올바른 증거를주고 내게도 내 방법에 문제가 있다는 것을 알려주시겠습니까?선형 검색 알고리즘의 평균 사례 실행 시간

E(T)= 1*P(1) + 2*P(2) + 3*P(3) ....+ n*P(n) where P(i) is the probability that 
        the algorithm runs for 'i' time (i.e. compares 'i' elements). 
P(i)= (n-i)C(k-1) * (n-k)!/n! 
Here, (n-i)C(k-1) is (n-i) Choose (k-1). As the algorithm has reached the ith 
step, the rest of k-1 x's must be in the last n-i elements. Hence (n-i)C(k-i). 
(n-k)! is the total number of ways of arranging the rest non x numbers, and n! 
is the total number of ways of arranging the n elements in the array. 

단순화시 (n + 1)/(k + 1)을 얻지 못합니다.

+0

어쩌면 나는 바보입니다. 배열의 크기가 N이면 평균 케이스 시간은 N/2입니까 ?? 신경 쓰지 마세요 ... 내 아이폰에서 언급해서는 안됩니다 ... 틀린 질문 q – Kevin

+1

@kevin 중복이 없을 때 그 경우. 그러나 복제본을 가지고있을 때 두 번째 발생을 발견하더라도 (평균 복잡도 계산시) 먼저 검색을 수행하게됩니다. – Zimbabao

+0

@Kevin 사실 다중 복사가없는 평균 케이스는 (n + 1)/2입니다. 1 * (1/n) + 2 * (1/n) + 3 * (1/n) ... + n * (1/n)과 같이 얻을 수 있습니다. – Brahadeesh

답변

6

k 개의 x 사본 순열에 대해서는 잊어 버린 것입니다. , 모든 요소가 별개 가정 X가를하자 :

In[1]:= FullSimplify[Sum[i Binomial[n-i, k-1]/Binomial[n, k], {i, 1, n}], 0 <= k <= n] 

     1 + n 
Out[1]= ----- 
     1 + k 

아래 내 댓글에 정교하게하려면 P(i)의 정확한 정의는

P(i) = (n-i)C(k-1) * k! * (n-k)!/n! = (n-i)C(k-1)/nCk. 
        ^^ 

내가 티카에 걸쳐 물건을 돌려 것입니다 일치 집합을 선택하고 Y를 일치하지 않는 집합이라고 가정합니다. 가정에 따라, | X | = k 및 | Y | = n-k이다. 예상 읽기 수는 e가 읽히는 확률 인 요소 e에 대한 합계와 같습니다.

S의 각 요소가 주어지면 S의 각 요소는 확률이 1/| S | 인 다른 모든 요소보다 먼저옵니다.

X의 원소 x는 확률 1/k 인 X의 모든 원소 앞에 오는 경우에만 읽습니다. X에서 요소의 총 기여도는 | X | (1/k) = 1

확률 1/(k + 1) 인 X의 모든 원소 앞에 오는 경우에만 Y의 원소 y가 읽혀집니다. Y에있는 요소들의 총 기여도는 | Y |이다. (1/(k + 1)) = (n-k)/(k + 1)이다.

우리는 1 + (n-k)/(k + 1) = (n + 1)/(k + 1)을 갖는다.

+0

참고 :이 값을 유도하는 더 쉬운 방법은 x의 정확히 1 개를 조사하고 모든 x의 앞에 나타나는 경우 nk 개의 non-x를 검사하는 것입니다. 확률 1/(k + 1). 우리는 1 + (n-k)/(k + 1) = (n + 1)/(k + 1)을가집니다. – user635541

+0

@ user635541 결과를 가져 주셔서 감사합니다. 나는 x의 치환을 생각했다. 그러나 그런 다음 그들은 동일한 배열의 여러 복사본을 만듭니다. 그래서 나는 그들을 반대했다. K 사용에 대한 정당성을 명확히 해 주실 수 있겠습니까? ? 또한, 당신은 코멘트를 정교하게 만들 수 있습니까? 나는 그것을하지 않았다. 죄송합니다. – Brahadeesh

+1

문제는 n! 인자는 또한 k를 발생시킨다. 같은 배열의 복사본 (비 x가 뚜렷하다고 가정). – user635541

5

다음은 Cormen 용어를 사용하는 솔루션입니다. S을 다른 n-k 요소 집합이라고합시다.
우리가 실행하는 과정에서 집합의 i '번째 요소 이 발생하면 지표가 임의의 변수 Xi=1으로 변경됩니다.
Pr{Xi=1}=1/(k+1)이고 따라서 E[Xi]=1/(k+1)입니다.
우리가 실행 과정에서 검색하는 요소 중 하나 인 k을 발견하면 지시기를 임의의 변수 Y=1으로 변경하십시오.
Pr{Y=1}=1 따라서 E[Y]=1.
랜덤 변수 X=Y+X1+X2+...X(n-k)을 이 실행되는 과정에서 만나는 요소의 합계라고합시다.
E[X]=E[Y+X1+X2+...X(n-k)]=E[Y]+E[X1]+E[X2]+...E[X(n-k)]=1+(n-k)/(k+1)=(n+1)/(k+1).

+0

나는 개인적으로 Y에 대한 설명을 조금 혼란스럽게 보았다. 다른 사람에게 도움이되는 경우, 이것을 생각하는 또 다른 방법은 X = (방문한 요소의 개수)와 Y = (방문한 요소의 개수)를 합치는 것입니다. 그런 다음, 우리는 Z = (방문한 요소의 수) = X + Y를 찾고 있지만 확률 1로 Y = 1이므로 E [X] = E [X] + E [Y] = E [X] + 1 –

관련 문제