i 번째 정렬 해제를 찾는 효율적인 알고리즘이 있습니까?


9

이 질문의 배경은 다음과 같습니다. 친구와 나는 다른 사람들에게 선물을 줄 필요가있는 게임을하고있었습니다. 누가 누구에게 선물을 주어야하는지 결정하기 위해 우리는 추첨을하기로 결정했습니다. 그러나 문제는 누군가가 자신에게 선물을 줄 수 있다는 것입니다. 당신은 불행한 사람들의 예상 숫자가 1임을 알 수 있습니다. 그래서 이것은 매우 자주 발생합니다.

이 목적을 위해 정리가 큰 도움이 될 것 같습니다. 정리를 제대로 만들 수 있다면, 하나의 정리를 고르면 누가 선물을 줄 것인지 결정할 수 있습니다.

무작위 배열 생성은 Las Vegas 방법으로 수행 할 수 있습니다. 그러나 문제는 다항식 실행 시간 만 예상한다는 것입니다. 그래서 저는 i 번째 정리를 찾는 문제에 왔습니다. [1, D_n]에서 i를 무작위로 고르고 최악의 다항식 시간 (효율적인) 알고리즘을 사용하여 i 번째 정렬을 해제하면 완료됩니다.


1
질문의 동기를 설명해 주시겠습니까? 즉, 왜이 질문에 관심이 있습니까?
Kaveh December

2
아마도 당신은 비밀 산타를하고 싶어하고 어떤 기회도 기꺼이하지 않습니다 :)
레브 레이 진

배치 해제의 의미에 대한 줄을 추가 할 수 있습니까?
Vijay D

답변:


9

실제로 이것은 좋은 질문 일지 모르지만 현재 형식으로 잘못 구성되어 있습니다. 랜덤 디 레인지먼트를 생성하는 잘 알려진 알고리즘은 선형으로 예상되는 시간을 갖지만 최악의 다항식 시간 알고리즘을 찾는 것은 개방적인 문제 일 수 있습니다.

예를 들어 http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf (및 슬라이드 : http://www.lsi.upc.edu/~conrado/research/talks/analco08.pdf )를 참조하십시오.


이것은 나에게 정답처럼 보입니다.
Suresh Venkat

10
en.wikipedia.org/wiki/Derangement에 설명 된 재귀! n = (n−1) (! (n−1) +! (n−2))는 무작위로 최악의 다항식 알고리즘을 초래하지 않습니다. 세대?
David Eppstein

그래, 너가 맞아. 최악의 경우 폴리 타임에서 {1, ..., n}의 임의의 하위 집합으로 임의의 숫자를 생성 할 수 있어야하기 때문에 작은 캐치가 있다고 생각했지만 쉽게 수행 할 수 있습니다.
didest

0

왜, 각각의 위치에 대한 , 무작위 이외의 모든 요소를 선택할 내가 ? 예를 들어 [0..n-2] 에서 원래 배열의 인덱스를 선택할 수 있으며 j> = i 를 얻는 경우 j + 1 을 사용 합니다.


3
그렇게하면 모든 장애가 똑같이 일어날까요?
David Eppstein

오, 좋은 지적-이것은 배열에서 나중에 배열의 요소를 우선적으로 배치합니다. 대상 배열의 슬롯을 임의의 순서로 채울 경우 대칭에 따라 모든 배열이 동일하게 나타날 수 있습니다.
pat :
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.