결정 론적 선형 시간으로 요소 고유성을 해결할 수 있습니까?


9

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

입력 :리스트X,Y 정수

목표 : 정수가 있는지 확인x 그것은 두 목록에 있습니다.

두 목록을 모두 가정하자 X,Y 크기가 n. 이 문제에 대한 결정 론적 선형 시간 알고리즘이 있습니까? 즉,이 문제를 해결할 수 있습니까?O(n) 무작위성을 사용하지 않고 결정 론적으로 시간?

불행히도 목록 요소가 모두 작다고 가정 할 수는 없습니다.


나는 그것을 해결하는 방법을 볼 수 있습니다 O(n) 무작위 알고리즘을 사용한 예상 시간 : 임의로 2 개의 범용 해시 함수 선택 h의 요소를 저장 X 해시 테이블로 h 해시 함수)와 같은 각 요소를 찾습니다. Y해시 테이블에 있는지 확인하십시오. 예상 실행 시간은O(n). 그러나 나는 결정적 알고리즘을 찾는 방법을 볼 수 없다O(n)시간을 실행. 이것을 무작위 화 해제하고 단일 특정 해시 함수를 수정하려고하면이 절차가 실행되는 최악의 입력이 있습니다.Θ(n2)시각. 내가 찾을 수있는 가장 결정적인 알고리즘은 값 정렬과 관련이 있지만 선형 시간은 아닙니다. 선형 주행 시간을 달성 할 수 있습니까?

또한 모든 목록 요소가 범위의 정수라고 가정하면 선형 시간으로 해결하는 방법을 볼 수 있습니다 [1,n] (기본적으로 카운팅 정렬)-그러나 우리가 그것을 추측 할 수없는 일반적인 경우에 어떤 일이 일어나고 있는지에 관심이 있습니다.

답이 계산 모델에 의존한다면 RAM 모델이 떠오를 것이지만 합리적인 계산 모델에 대한 결과에 관심이 있습니다. 나는 알고있다Ω(nlogn) 요소 고유성에 대한 의사 결정 트리 알고리즘의 하한 이지만, 때때로 우리는 선형 시간 알고리즘을 찾을 수 있기 때문에 결정적이지는 않습니다.Ω(nlogn) 의사 결정 트리 모델에 바인딩됩니다.


충돌을 처리해야하므로 해시 테이블은 O (n log n)입니다.
Thorbjørn Ravn Andersen 님이

1
@ ThorbjørnRavnAndersen, 나는 당신이 어디서 그것을 얻지 못하고 있습니다. 2 개의 범용 해시 함수와 적절한 크기의 해시 테이블을 사용하면 해시 충돌 횟수가 최소화됩니다 (높은 확률로).O(n)실행 시간을 달성 할 수 있습니다. 어디 있는지 모르겠어요O(nlgn)에서; 특별한 것을하지 않으면 (2-universal hashing 사용) 최악의 경우는O(n2)충돌로 인해
DW

악마는 상세하게 여기에 "적절한 크기의 해시 테이블"입니다. 충돌을 원하지 않으면 상당히 클 수 있습니다. 전형적인 n-log-n은 해시 함수 충돌을 처리하기위한 것입니다 (정확히 기억한다면).
Thorbjørn Ravn Andersen 1

1
@ ThorbjørnRavnAndersen 동일한 주소에 매핑되는 키의 예상 개수는 일정하므로 (오버로드되지 않은 테이블의 경우) 충돌 해결의 종류는 관련이 없습니다. 여기도 참조 하십시오 .O(nlogn)목록 대신 (외부) 밸런스 BST를 사용하는 경우 최악의 경우에 적합합니다.
Raphael

답변:


1

X 및 Y의 각 가능한 값에 대해 비트를 가질 수있는 충분한 메모리가있는 경우 선형 시간으로 문제점을 해결할 수 있습니다. 이는 X 및 Y 순서의 제한을 부과하지 않습니다.

  1. 처음에는 모든 비트가 설정 해제됩니다.
  2. 해당 비트를 설정하여 X를 반복합니다.
  3. 해당 비트가 위에 설정되어 있는지 확인하면서 Y를 반복합니다.

2
불행히도 모든 정수가 작다고 가정 할 수는 없습니다 (이 알고리즘이 작동하기에 충분히 작다고 가정 할 수는 없습니다). 일반적으로이 알고리즘의 실행 시간은 목록 요소의 비트 길이에 따라 지수 적입니다. 그래도 감사합니다!
DW

그런 다음 "적절한 크기의 비트 배열"이라고하겠습니다. 또한 비트 길이의 선형은 log-n과 같습니다. 입력 데이터에 대한 제한이나 사전 조건없이 log-n 성능을 얻는 것에 대해 진지합니까?
Thorbjørn Ravn Andersen 1

2
@ ThorbjørnRavnAndersen이 공간은 비트 길이에서 기하 급수적이며 (가능한 모든 값에서 매핑해야 함) 시간은 전체 목록 크기에서 선형입니다 (두 목록의 모든 값을 봐야 함). 비트 길이에 선형은 없습니다.
wchargin

0

두 목록에 정수가 있다고 말하고 있기 때문에 두 목록에서 기수 정렬을 실행 한 다음 두 목록을 동등한 항목으로 비교하는 선형 검색을 수행 할 수 있습니다.


4
이것은 숫자의 크기에 한계가있는 경우에만 작동합니다.
Luke Mathieson

하지만 높은 크기가 제가 여기에 누락 무엇인지 알려 주시기 바랍니다 ... 유일한 종류의 우리가 그 문제를 해결하기 위해 충분히 높은 기수를 선택할 수 있습니다 종류의 계산과 기수에 대한 문제가 될 것입니다 생각
사진 제공 : Anirudh

숫자 중 하나가 2 ^ (2 ^ 128)이면 어떻게됩니까?
miniBill

@anirudh 그러나 입력 크기에 따라 다른 알고리즘을 사용합니다. 기수를 늘릴 때마다 더 큰 알파벳이 필요합니다. 알파벳 크기를 늘리기 위해 크기를 늘리는 복잡성을 내보내는 것입니다. 물론 이것은 이론상에서만 가능합니다. 많은 하드웨어로 인해 숫자를 나타내는 기준을 변경할 수 있다고 생각하지 않습니다 (입력 및 출력 끝에서 척 할 수는 있지만 (주로) 이진으로 귀결됩니다) ).
Luke Mathieson

0

왜 각 목록의 정수를 간단한 비트 단위로 삽입하지 않습니까? 이것이 최적이라는 의미에서 그렇지 않습니까?O(nm¯), 어디 m¯정수의 평균 비트 크기이며; 구체적으로 말하면 , 두 목록이 단순히 * 읽는 * 데 시간이 걸리기 때문에 어떻게 더 잘할 수 있을지 모르겠습니다 .


참고해 주셔서 감사합니다. 이 점을 다루는 질문의 마지막 단락을 참조하십시오. RAM 모델에서는 두 목록을 읽을 수 있습니다 .O(n) 시간-걸리지 않습니다 O(n\overbarm)시각. 그래서 계산 모델이 등장합니다.이 답변은 결정 론적 선형 시간이 불가능하다는 것을 실제로 증명하지는 않습니다.
DW

@DW RAM 모델에는 단어 크기가 있습니다 w 그것은 상수이며 한계가 있습니다. m 따라서 m¯의 런타임 결과 O(n)또는 내가 착각하고 있습니까?
Realz Slaw

흠 아마도 w상수는 실수입니다.
Realz Slaw

( 일정한 것으로 간주되지 않지만 n: 당신은 상수 배수를 가질 수 있습니다 m 나타내는 데 필요한 것 n (대표하기에 충분히 넓은 nm), 임의로 크지는 않습니다 .)
greybeard

-1

이는 n 개의 숫자 집합이 있고 모든 요소가 고유한지 확인하려는 Elemet 고유성 문제와 유사합니다. 이 문제에는 대수 계산 트리의 하한이 있습니다.O(nlogn).


1
문제는 로그 선형이 아니라 선형 결정 시간에 대해 매우 분명합니다. 또한 (어떤 값이 아닌) 집합에 고유 한 요소 만 있는지 확인하려면 로그 선보다 빠르게 수행 할 수 있습니다.
Evil

1
당신은 의미합니까 Ω(nlogn)? 그렇다면 문제의 문제를 선형 시간으로 해결할 수 없다는 것을 암시 할 수 있습니다. 그러나 로그 선형 시간으로 관련 문제를 해결할 수 있다고 말하는 것이 실제로 질문에 대답하지는 않습니다. (cc @EvilJS)
David Richerby

1
참고해 주셔서 감사합니다. 질문의 마지막 문장을 놓쳤는 지 궁금합니다. 여기에서 반복하겠습니다 : "알고 있습니다Ω(nlogn) 요소 고유성에 대한 의사 결정 트리 알고리즘의 하한 이지만, 때때로 우리는 선형 시간 알고리즘을 찾을 수 있기 때문에 결정적이지는 않습니다.Ω(nlogn)다시 말해,이 답변은 질문에 대한 답변이 아니라 이미 알고있는 질문에서 이미 말한 내용을 반복하지만 질문을 해결하지 못하는 것입니다.
DW

그것은 할 수 있습니다 O(nloglogn) 주어진 것보다 나은 시간 O(nlogn)그래서 나는 이것이 아니라고 확신합니다. Ω(nlogn)그러나 DW 질문은 해결되지 않습니다. 따라서 여기에 의견을 말하십시오.
Evil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.