정렬에 대한 흥미로운 문제


14

번호가 매겨진 볼이있는 튜브 (무작위) 튜브에는 공을 제거하기위한 구멍이 있습니다. 한 작업에 대해 다음 단계를 고려하십시오.

  1. 구멍에서 하나 이상의 공을 고르고 공을 고른 순서를 기억할 수 있습니다.
  2. 파이프에 남아있는 볼이 왼쪽으로 이동하고 볼을 제거하여 생성 된 빈 공간을 차지하도록 파이프를 왼쪽으로 기울여야합니다.
  3. 파이프에서 번호가 매겨진 볼을 선택한 순서를 변경해서는 안됩니다. 이제 공의 움직임으로 생성 된 빈 공간을 사용하여 파이프에 다시 넣습니다.

1 단계에서 3 단계는 하나의 작업으로 간주됩니다.

번호가 매겨진 볼을 오름차순으로 정렬하는 데 필요한 최소 작업을 찾으십시오.

예 : 튜브에 다음이 포함 된 경우 : [ 1 4 2 3 5 6 ]     [1 4 2 3 5 6]

그런 다음 4455 , 6 을 꺼낼 수 있고 6파이프를 왼쪽으로 기울이면 [ 1 2 3 ]이되고  [1 2 3] , 파이프 끝까지 ( 4 5 6 )  (4 5 6) 을 순서대로 삽입 하여 [ 1 2 3 4 5 6 ]     [1 2 3 4 5 6] .

따라서 필요한 최소 단계 수는 1입니다. 파이프를 정렬하려면 최소 작업을 찾아야합니다.

이 문제를 해결하는 방법에 대한 아이디어 나 힌트가 있습니까?


역순으로 오면 2, 3, ...을 순서대로 꺼내고 마지막에 n 작업을 위해 추가해야 합니다. 이것은 분명히 최악의 경우입니다. n
vonbrand

2
항상 홀수 위치를 빼 냄으로써 8,7,6,5,4,3,2,1-> 75318642-> 51627384-> 12345678
adrianN

내 대답을 요약하면 : 순열 π 를 정렬하는 데 필요한 최소 작업 수 는 log 2 ( d ( π - 1 ) + 1 ) ⌉입니다 . 여기서 d ( ) 는 하강 횟수입니다. πlog2(d(π1)+1)d()
Yuval Filmus

나는 반전을 제거하는 관점에서 그것을 생각하고 싶습니다. 각 작업마다 세트 XS X ( S 는 전체 볼 세트) 사이의 반전을 제거 할 수 있습니다 . 따라서 세트 X를 신중하게 선택해야합니다 . XSXSX
Joe

답변:


10

다음 프로세스를 사용하여 r ( π ) 로 표시된 순열 π실행 파티션 번호 를 정의하십시오 . 하자 k는 숫자를 정수되도록 최대 수 ( π가 ) , ... , k는 에서 증가하는 순서로 나타나는 π . π 에서 그것들을 제거하고 과정을 반복하십시오. 전체 순열을 소비하는 데 걸리는 라운드 수는 r ( π ) 입니다.πr(π)kmin(π),,kππr(π)

예를 들어, r ( 62735814 )을 계산해 봅시다 . 우리는 먼저 6273584 를 얻기 위해 1을 따로 설정 했습니다 . 그런 다음 234를 따로 설정 하여 6758 을 얻습니다 . 그런 다음 5를 따로 설정 하여 678 을 얻습니다 . 마지막으로 빈 순열을 얻기 위해 678 을 따로 설정했습니다 . 이 과정에는 4 개의 라운드가 필요하므로 r ( 62735814 ) = 4 입니다.r(62735814)1627358423467585678678r(62735814)=4

이 표현이 62735814 정렬에 어떻게 유용 합니까? 매초마다 234 , 678을 실행 하고이 숫자를 오른쪽으로 이동하여 51627384 를 얻 습니다 (편집 : 순열에 나타나는 순서, 즉 627384 ). 이제 두 개의 런, 즉 1234 , 5678 이 있으며 5678 을 오른쪽 으로 이동하여 목록을 정렬 할 수 있습니다 .62735814234,678516273846273841234,56785678

이제 다음과 같은 추측을 하겠습니다 . 순열 π의 경우 Π 는 한 번의 이동으로 π 에서 도달 할 수있는 모든 순열의 집합입니다 . 그런 다음 min α Π r ( α ) = r ( π ) / 2 입니다.πΠπminαΠr(α)=r(π)/2

이러한 추측을 고려하면 순열 π 를 정렬하는 데 필요한 최소 이동 횟수 가 log 2 r ( π ) ⌉임을 쉽게 알 수 있으며 , n 8에 대해 S n의 모든 순열에 대해이 공식을 확인했습니다 .πlog2r(π)Snn8

편집 : 여기 에 계산을위한 선형 시간 알고리즘을 제공하고 추측의 증거를 스케치 할 있는 실행 파티션 번호에 대한 다른 해석이 있습니다. 따라서 공식 log 2 r ( π ) .log2r(π)

순열 62735814를 다시 고려 하십시오. 첫 번째 실행이 1 로 끝나는 이유 는 21 앞에 있기 때문 입니다. 마찬가지로 54 앞에 나타나기 때문에 두 번째 런은 4로 끝 납니다 . 따라서 순열의 실행 파티션 번호의 수 의 그런 내가 + 1 개 전에 나타납니다 내가 .62735814121454ii+1i

순열의 역수를 보면 이것을 간결하게 말할 수 있습니다. π = 62735814를 다시 고려하십시오 . π 1 = 72485136을 취하십시오 . 이 순열에는 세 개의 하강이 있습니다 : 7 2 48 5 1 36 (하강은 앞의 것보다 작은 위치입니다). 각 하강은 새로운 런의 시작에 해당합니다. 따라서 r ( π )1π - 1 의 하강 수를 더한 값과 같습니다 .π=62735814π1=7248513672485136r(π)π1

연산은 π - 1 과 관련하여 어떤 모양 입니까? 하자 B는 우리가 오른쪽으로 이동하는 것이 일련의 숫자, 그리고 A가 숫자들의 집합 왼쪽에 머무는 것을. A 의 숫자 를 { 1 , , | A | } 는 상대 순서를 나타내며 B 의 숫자 를 { | A | + 1 , , | A | + | B | }π1BAA{1,,|A|}B{|A|+1,,|A|+|B|}. 예를 들어 이동 6273 5 8 1 451 627384를 고려하십시오 . 역 순열의 경우 7 248 5 1362 468 1 357 입니다. 그래서 75 에 매핑 된 (21)248,136이 매핑 된 468,357 .627358145162738472485136246813577521248136468357

하강 ... X , Y ...π - 1 동작하는 경우에만 후 손실 X Y B . 반대로, π - 1의 관점에서 , AB 로의 구획 은 A- 런 및 B- 런에 대응하고 ; B- 런이 끝나고 A- 런이 시작될 때마다 하강이 있습니다. 하강을 "죽이기"위해서는 A- 런에서 B 로 전환해야합니다xyπ1xAyBπ1ABABBAAB-운영. 우리가 두 개의 강하를 죽이면 중간에 B- run에서 A- run으로 전환되어 하강을 일으킬 것입니다.BA

이 인수는 α 가 연산을 통해 π 에서 발생 하는 경우 d ( α - 1 ) d ( π - 1 ) / 2 를 나타내도록 공식화 할 수 있습니다 . 여기서 d ( ) 는 하강 횟수입니다. 이것은 r ( α ) r ( π ) / 2 ⌉에 해당합니다.απd(α1)d(π1)/2d()r(α)r(π)/2, thus proving one direction of my conjecture. The other direction is easier, and was already outlined above: we simply take every second run and push these runs to the right to get a permutation αα satisfying r(α)=r(π/2)r(α)=r(π/2).


You are taking out several rounds of balls at once, I understand that isn't allowed.
vonbrand

1
I'm taking them in the order they appear in the permutation. That is legal.
Yuval Filmus

i am bit confused. can you please explain min number of operations required to sort [6 5 4 3 2 1] and also you mentioned like "Take every second run, i.e. 234,678, and move these numbers to the right to get 51627384" can you please explian this with detail and also how to calculate r(π) efficently?
user6709

1) r(654321)=6, so you would need 3 operations. For example, 654321531|64251|62341234|56.
Yuval Filmus

2) You take all the numbers belonging to these runs (in the order they appear in the permutation), and move them to the right. In this case, you take 627384 and move them to the right, leaving 51 to the left.
Yuval Filmus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.