정렬 된 배열을 결합하여 선택 : 이미 알려져 있습니까?


12

다음 알고리즘 / 문제에 대한 참고 문헌을 찾고 있습니다. 이름을 "BiSelect"또는 "t-ary Select"또는 "Selected Union of Sorted Arrays"로 지정했지만 이전에 다른 이름으로 소개 된 것 같습니다.

문제

다음 문제를 고려하십시오.

감안 이산 정렬 된 어레이 , 각 크기의 및 정수 는 무엇 그들의 정렬 연합 번째 값 ?kA1,,Akn1,,nkt[1..ni]t iAi

솔루션

시간에 실행 매우 소쇄 알고리즘가 의 경우 K = 2 : 만약 K = 2 , 단지 비교 A_1를 [t / 2]A_2 [t / 2] 와 재귀 A_1 [t / 2..t]A_2 [1..t / 2 또는 A_1 [1..t / 2]A_2 [t / 2..t] 따라서, 두 경우에서와 매개 변수 t / 2 (및 n_1 또는 n_2t 보다 작은 경우 일부 최적화 )O(lgmin{n1,n2,t})k=2k=2A1[t/2]A2[t/2]A1[t/2..t]A2[1..t/2]A1[1..t/2]A2[t/2..t]t/2n1n2t

시간에 실행하는 좀더 정교한 알고리즘이 일반화 O(klgt) 의 더 큰 값 k , 값들의 중간 값 계산에 기반 Ai[t/k] 에 대한 i[1..k] 다음 t/k 작은 요소는 또한 무시 될 수있는 k/2 어레이 여기서 Ai[t/k] 중앙값보다 작은 경우와, 등급 요소 [tt/k..] 상기에서 무시할 수있는 k/2 다른 배열 은 각 반복에서 t 의 절반을 초래 합니다 (중앙값 tO(k) 입니다).

참조?

내 솔루션에 만족하지만 문제 (및 솔루션)가 이미 알려져 있다고 가정합니다. 그것은 중간 크기를 계산하기위한 선형 시간 알고리즘과 관련이 있으며 (크기가 인 그룹을 정렬 하고 중간의 중앙값을 되풀이하여) 약간 더 일반적입니다. 나는 오르후스 (덴마크)의 Madalgo에있는 여러 대학에 성공하지 않고 워크샵 Stringology (Rouen)의 다른 대학에 물었습니다.5

동기 부여

이 문제에 대한 솔루션에는 배열의 지연된 데이터 구조에 대한 응용 프로그램이 있습니다 (실제로 정렬 된 배열의 결합을 위해 지연된 데이터 구조의 연산자로 볼 수 있음). 보다 복잡한 방식으로, 최적 프리픽스 프리 코드의 적응 계산에 적용된다.

답변:


2

1982 년 Frederickson과 Johnson이 설명한 알고리즘은 모든 세트의 크기가 같다고 간주합니다. 또한 1980 년에는 다양한 크기의 분류 된 세트를 활용하는 최적의 솔루션을 설명했습니다. 이 알고리즘의 복잡성은 있습니다.O(k+i=1klogni)

참고

Greg N. Frederickson과 Donald B. Johnson. 1980. 일반화 된 선발 및 순위 (예비 버전). 컴퓨팅 이론에 관한 제 12 차 연례 ACM 심포지엄 진행 (STOC '80). ACM, 뉴욕, 미국 뉴욕, 420-428. DOI = 10.1145 / 800141.804690 http://doi.acm.org/10.1145/800141.804690



0

k = 2의 경우는 병렬 병합 정렬에서 발생합니다. 다른 스레드에서 정렬 된 두 배열의 병합은 동일한 양의 병렬 처리를 유지하기 위해 두 스레드간에 분할되어야하기 때문입니다. 이 숙제 솔루션 은 하나의 참조입니다.

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