2012-12-02 3 views
1

두 개의 정렬되지 않은 배열이 있고 각 배열의 길이는 n입니다. 이 배열에는 임의의 정수가 포함됩니다. 이 두 배열에 공통적 인 요소가있는 경우 찾을 방법은 Θ(n*logn)입니까?(알고리즘) 정렬되지 않은 배열 두 개가 정렬없이 Θ (n * logn) 시간에 공통적 인 요소가 있는지 찾습니다.

정렬 할 수 없습니다.

+4

먼저 시도해 보셨습니까? –

+1

공간 제한이 있습니까? – Gumbo

+2

O (n) 공간을 사용하면 한 배열의 모든 요소를 ​​집합 (트리)에 삽입하고 다른 요소를 반복하면서 반복 할 수 있습니다 (트리가 정렬 된 데이터이므로 트리밍이므로 부정 행위입니다). 구조...). 트리 대신 해시 테이블을 사용하면'O (n)'의 평균 * 대소 문자를 구할 수 있습니다. – amit

답변

0

B이 정렬되지 않은 배열, 길이 N 모두하자. @amit에서 제안한대로 해시 테이블을 사용할 수 있습니다. 그러나 더 빠른 알고리즘이 있습니다. 카드 (A) = 카드 (B)이므로 고속 교차 알고리즘은 Bloom filter을 사용하여 세트를 저장 한 다음 교차가 비트 AND 연산으로 구현됩니다. 여전히 O (n)이 필요하지만 상수 표기법에 숨겨진 상수 및 하위 항에 대해서는 더 나은 결과입니다.

+3

해시 테이블에는 O (N) 단계가 필요하며 그보다 더 잘할 수 없습니다. – wildplasser

+0

동일한 * O (n) * 상한을 달성하면서 점근 표기법 내에 숨겨진 상수 및 하위 조건에 관해서는 *를 더 잘 수행 할 수 있습니다. –

관련 문제