정렬되지 않은 항목의 배열을 취하고 에서 사전 처리를 수행 하고 쿼리에 응답 하는 데이터 구조가 있습니까? 목록에 일부 요소 가 있고 각 쿼리는 최악의 시간 입니까?
나는 실제로 없다고 생각하므로 아무도 없다는 증거도 환영합니다.
정렬되지 않은 항목의 배열을 취하고 에서 사전 처리를 수행 하고 쿼리에 응답 하는 데이터 구조가 있습니까? 목록에 일부 요소 가 있고 각 쿼리는 최악의 시간 입니까?
나는 실제로 없다고 생각하므로 아무도 없다는 증거도 환영합니다.
답변:
불가능하다는 증거가 있습니다. 이러한 데이터 구조를 구축 할 수 있다고 가정하십시오. 그것을 구축하십시오. 그런 다음 목록에서 임의로 개 항목을 선택 하고 각 항목에 을 추가 합니다. 여기서 은 목록에있는 두 항목의 차이보다 작으며 쿼리를 수행하여 결과 항목이 있는지 확인합니다. 목록에 있습니다. 지금까지 쿼리를 수행했습니다 .ϵ ϵ O ( n )
난 당신이 수행 한 비교는 항목인지 구별하기에 충분하다는 것을 주장하고 싶은 원래의 목록은 새로운 항목에 비해보다 작거나 큰 경우 . 말할 수 없다고 가정하십시오. 이 비교 기반 모델이기 때문에 그런 다음, 당신이 있는지 모르겠다 동등했다 여부, 데이터 구조가 작동하는지 가정의 모순.b a b
이제 선택한 항목이 무작위이므로 원래 목록을 목록 (각각 크기의 목록으로 나눌 수있는 충분한 정보가 제공 될 가능성이 높습니다 . 이러한 각 목록을 정렬하면 비교, 모순에만 기반한 무작위 -시간 정렬 알고리즘 을 얻게 됩니다.n / 로그 n O ( 로그 n ) O ( n 로그 로그 n )
사전 처리 를 통해 쿼리 시간 구조를 사용할 수 없음을 증명하는 다른 증거가 여기 있습니다 .
전처리 과정에서 비교를 수행하여 부분적인 순서가 있다고 가정합니다 .
이제 그 중 가장 큰 안티 체인 의 크기 를 고려하십시오 . 이러한 요소는 비교할 수 없으므로 쿼리 알고리즘을 사용하려면 이어야합니다 .O ( log k n ) A = O ( log k n )
이제 Dilworth의 정리에 의해 크기 체인이 체인으로 분할 되었습니다.
이제 알고리즘을 보완하여 파티션의 체인을 결정할 수 있습니다. 직접 비교 그래프를 작성하고 도달 가능성 분석을 수행하여 두 요소가 비교 가능한지 여부를 확인할 수 있습니다. 추가 비교없이 수행 할 수 있습니다. 이제 크기 의 가능한 각 파티션을 무차별 적으로 강제 실행 하여 체인의 파티션인지 확인하십시오.
체인을 확보하면 체인을 병합 하여 전체 목록을 정렬하기위한 비교 알고리즘 을 제공 할 수 있습니다 .
시간 쿼리 비용 허용
특히, 전처리를 사용하면 쿼리 비용을 가질 수 없습니다 . 또한 전처리는 마다 에 해당 하므로 쿼리 비용입니다.