N / K 번 표시되는 정렬 된 크기 N의 모든 정수를 어떻게 찾을 수 있습니까?
-
29-09-2020 - |
문제
이 문제에 대한 해결책을 찾으려고 노력합니다. O (klogn) 시간보다
에서 n / k 번 나타나는 정렬 된 크기 n의 정렬 된 배열에서 모든 정수를 어떻게 찾을 수 있습니까?나는 o (klogn) 솔루션이 제공되는이 질문.
해결책
$ k= 2 $ 을 시작하고 알고리즘이 비교 기반이라고 가정합니다.
단일 요소가 $ n / 2 $ 시간을 찾는 모든 알고리즘이 색인 $를 알아야합니다. I $ $ a [i + 1]= a [i + n / 2] $ . 실제로이 경우가 아니라고 가정하고 $ a $ 의 항목이 실수 숫자 인 것으로 가정 해 봅시다. 알고리즘이 다음 값을 알고 있음을 알려주십시오. $$ A [I_1]=CDOTS= A [j_1] $ a [i_1-1] 등과 조금 포함 된 알고리즘의 지식과 일치합니다. $ n / 2 $ 시간을 나타나지 않는 요소가 없음을 준비 할 수 있습니다.
일반적인 경우 알고리즘은 $ a [i + 1]을 $ i $ 을 알아야합니다.= 출력되는 각 요소에 대해 [I + N / K] $ . 우리는 $ 2n / k $ 크기의 $ k / 2 $ 부품을 분할 할 수 있습니다. $ (n / k + 1) ^ k $ 이전의 예제, $ r $ th 요소 $ n / k $ 시간은 $ r $ th 부분에 있습니다. 이것은 $ \ omega (k \ log (n / k)) $ 의 낮은 경계선을 제공하여 $ k $ .
(알고리즘은 일치하는 상한을 부여하기 위해 미끄러지 듯이 향상 될 수 있습니다.)
제휴하지 않습니다 cs.stackexchange