아이템 찾기를위한 비교 기반 데이터 구조


34

정렬되지 않은 항목의 배열을 취하고 에서 사전 처리를 수행 하고 쿼리에 응답 하는 데이터 구조가 있습니까? 목록에 일부 요소 가 있고 각 쿼리는 최악의 시간 입니까?nO(n)xO(logn)

나는 실제로 없다고 생각하므로 아무도 없다는 증거도 환영합니다.


3
(1) 질문에“예상”이라고 언급하지 않았기 때문에“물론 예상 시간을 고려합니다”라고 말할 수있는 이유를 모르겠습니다. “물론”이라고 말하기 전에 질문을보다 정확하게 말하십시오. (2)“해싱 불가”를 정의하십시오.
Tsuyoshi Ito

2
(1) 알겠습니다. 설명 주셔서 감사합니다. 누군가가“런닝 타임에 관심이 있습니까?”라고 물으면 그 대답은 실제로“물론”입니다. 사람들이 "해시 불가능"이란 의미를 이해하기 위해 주석을 읽을 필요가 없도록 질문을 편집 할 수 있습니까?
Ito Tsuyoshi

3
그건 그렇고, 그것을 증명할 수 없다면 왜 불가능하다는 것을 알고 있습니까? 교과서 나 수업에서 연습하는 경우 잘못된 웹 사이트를 요청하는 것입니다.
Ito Tsuyoshi

6
이것이 당신의 질문입니까? 순서가없는 n 개의 항목을 배열하고 O (n)에서 전처리를 수행하고 쿼리에 응답하는 데이터 구조가 있습니까? 목록에 일부 요소 x가 있습니까? 각 쿼리는 최악의 시간 O (log n)입니까?
sdcvvc

2
@Filip :보기 쉬운가요? 그것이 사실이라면, 나는 그것이 문제를 해결한다는 데 동의합니다.
이토 쓰요시

답변:


30

불가능하다는 증거가 있습니다. 이러한 데이터 구조를 구축 할 수 있다고 가정하십시오. 그것을 구축하십시오. 그런 다음 목록에서 임의로 개 항목을 선택 하고 각 항목에 을 추가 합니다. 여기서 은 목록에있는 두 항목의 차이보다 작으며 쿼리를 수행하여 결과 항목이 있는지 확인합니다. 목록에 있습니다. 지금까지 쿼리를 수행했습니다 .ϵ ϵ O ( n )n/lognϵϵO(n)

난 당신이 수행 한 비교는 항목인지 구별하기에 충분하다는 것을 주장하고 싶은 원래의 목록은 새로운 항목에 비해보다 작거나 큰 경우 . 말할 수 없다고 가정하십시오. 이 비교 기반 모델이기 때문에 그런 다음, 당신이 있는지 모르겠다 동등했다 여부, 데이터 구조가 작동하는지 가정의 모순.b a babab

이제 선택한 항목이 무작위이므로 원래 목록을 목록 (각각 크기의 목록으로 나눌 수있는 충분한 정보가 제공 될 가능성이 높습니다 . 이러한 각 목록을 정렬하면 비교, 모순에만 기반한 무작위 -시간 정렬 알고리즘 을 얻게 됩니다.n / 로그 n O ( 로그 n ) O ( n 로그 로그 n )n/lognn/lognO(logn)O(nloglogn)


증거를 이해하는 데 도움이되는 몇 가지 힌트 (물론 본인이 올바르게 이해한다고 가정) : 항목은 이 추가 된 후에 항목으로 채워 져야 합니다. 비교 모델을 사용하면 및 보유 하는지 알 수 있습니다. 리스트 '오름차순'에있다 : 모두 높은 목록 내의 각 요소는 어떤 하위 목록 내의 각 요소보다 더 높다; 원래 쿼리 후 충분히이 정보 는 무작위로 선택한 항목을 중심으로 목록을 만들 수ϵ a b a b n / log nbϵababn/logn
알렉스 열 직전

(계속) 증명을 보유하기 위해 제공된 시간 내에 명시 적으로 목록을 작성할 수있는 것은 아닙니다.
Alex ten Brink

나는이 증거를 조용히 이해하지 못한다. 마지막 모순은 "비교만을 기반으로하는 알고리즘"에서 벗어 났지만, 알고리즘의 첫 단계에서 을 각 항목에 추가했습니다 ( " 이 목록의 두 항목 간의 차이보다 작음"). 왜 우리는 우리의 아이템이 비 연속적인 총 주문을 가지고 있다고 가정 할 때 알고리즘이 여전히 비교만을 기반으로한다는 것이 정당화 되는가? ϵϵϵ
Artem Kaznatcheev

5
@Artem : 원래 입력은 요소 로 구성됩니다 . 그런 다음 새 세트를 구성합니다. ; 원래 를 로 나타내고 수정 된 을 냅니다. 이제 블랙 박스 알고리즘을 사용합니다. 알고리즘은 요소 를 서로 비교합니다 . 이러한 쿼리에 응답하려면 일정한 수의 요소 만 서로 비교하면됩니다 . 따라서 모든 것은 비교 모델에서 일정한 오버 헤드로 수행 할 수 있어야합니다. xXX=X×{0,1}xX(x,0)Xx+ϵ(x,1)XXX
Jukka Suomela

1
@Aryabhata : 그렇습니다. 이란 무엇입니까 알고리즘은? O(log2n)
Peter Shor

24

사전 처리 를 통해 쿼리 시간 구조를 사용할 수 없음을 증명하는 다른 증거가 여기 있습니다 .O(logkn)O(n)

전처리 과정에서 비교를 수행하여 부분적인 순서가 있다고 가정합니다 .O(n)

이제 그 중 가장 큰 안티 체인 의 크기 를 고려하십시오 . 이러한 요소는 비교할 수 없으므로 쿼리 알고리즘을 사용하려면 이어야합니다 .O ( log k n ) A = O ( log k n )AO(logkn)A=O(logkn)

이제 Dilworth의 정리에 의해 크기 체인이 체인으로 분할 되었습니다.A

이제 알고리즘을 보완하여 파티션의 체인을 결정할 수 있습니다. 직접 비교 그래프를 작성하고 도달 가능성 분석을 수행하여 두 요소가 비교 가능한지 여부를 확인할 수 있습니다. 추가 비교없이 수행 할 수 있습니다. 이제 크기 의 가능한 각 파티션을 무차별 적으로 강제 실행 하여 체인의 파티션인지 확인하십시오.A

체인을 확보하면 체인을 병합 하여 전체 목록을 정렬하기위한 비교 알고리즘 을 제공 할 수 있습니다 .O(nloglogn)


1
좋은 생각입니다. 그리고 체인 파티션이 알고리즘에 알려 져야 함을 보여줄 수 있다면 mergesort를 사용하여 Jensen을 사용하는 대신 전체 입력을 정렬하는 데 추가 O (n log log n) 비교 만 필요하다는 것을 보여줄 수 있습니다. 그러나 전처리 알고리즘이 체인 파티션을 구성해야하는 이유는 무엇입니까? 체인 파티션은 반드시 존재해야하지만 알고리즘에 알려진 것과는 매우 다릅니다.
David Eppstein

8
O(nloglogn)

6
Ω(nlogn)Ω(n)

1
@ Yuval :이 관찰을 실제 답변으로 작성해야 할 수도 있습니다. 왜냐하면 답변의 증거에서 위의 결과를 얻으려면 적당한 양의 작업을해야한다고 생각하기 때문입니다.
피터 쇼어

1
Ω(nlogn)Ω(n1ϵ)ϵo(nlogn)O(n/logn)lognn/lognθ(nloglogn)

0

k<nΘ(nlogk)nc>0cnlogkcnlogk/kk=k/logkn/lognO(nlogk)=O(nlogk)시간 쿼리 비용 허용O(n/k)

특히, 전처리를 사용하면 쿼리 비용을 가질 수 없습니다 . 또한 전처리는 마다 에 해당 하므로 쿼리 비용입니다.O(n)o(n)o(nlogn)kO(nε)ε>0Ω(n1ε)

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