Problema interessante sull'ordinamento


14

Dato un tubo con palline numerate (casuali). Il tubo ha fori per rimuovere una palla. Considerare i seguenti passaggi per un'operazione:

  1. Puoi scegliere una o più palline dai fori e ricordare l'ordine in cui le hai raccolte.
  2. È necessario inclinare il tubo verso il lato sinistro in modo che le sfere rimanenti nel tubo si spostino verso sinistra e occupino lo spazio vuoto creato rimuovendo le sfere.
  3. Non dovresti cambiare l'ordine in cui hai scelto le palle numerate dalla pipa. Ora li rimetti nel tubo usando lo spazio vuoto creato dal movimento delle palle.

I passaggi da 1 a 3 sono considerati come un'unica operazione.

Scopri le operazioni minime necessarie per ordinare le palline numerate in ordine crescente.

Ad esempio: se la provetta contiene: [1 4 2 3 5 6]

Poi possiamo estrarre e 5 e 6 , e se ci inclinazione tubo a sinistra, si ottiene [ 1 2 3 ] , e inserire ( 4 5 6 ) in questo ordine e la fine del tubo per ottenere .456[1 2 3](4 5 6)[1 2 3 4 5 6]

Quindi il numero minimo di passaggi richiesto è 1. Devo trovare le operazioni minime per ordinare il tubo.

Qualche idea o suggerimento su come risolvere questo problema?


Se arrivano nell'ordine inverso, devi eliminare 2, 3, ... in ordine e aggiungere alla fine, per n operazioni in tutto. Questo è chiaramente il caso peggiore.
vonbrand,

2
8.7,6,5,4,3,2,1 -> 75318642 -> 51627384 -> 12345678 prendendo sempre posizioni dispari.
adrianN,

Riassumendo la mia risposta: il numero minimo di operazioni richieste per ordinare una permutazione è log 2 ( d ( π - 1 ) + 1 ) , dove d ( )πlog2(d(π1)+1)d() è il numero di discese.
Yuval Filmus,

Mi piace pensarci in termini di rimozione delle inversioni. Con ogni operazione, è possibile rimuovere le inversioni tra qualsiasi set e S - X (dove SXSXS è l'intero set di sfere). Quindi, devi solo scegliere i tuoi set con attenzione. X
Joe,

Risposte:


10

Definire il numero della partizione di marcia di una permutazione , indicata con r ( π ) , utilizzando il seguente processo. Sia k il numero intero massimo tale che i numeri min ( π ) , ... , k compaiano in ordine crescente in ππr(π)kmin(π),,kπ . Rimuovili da e ripeti il ​​processo. Il numero di round necessari per consumare l'intera permutazione è r ( π ) .πr(π)

Ad esempio, calcoliamo . Prima mettiamo da parte 1 , per ottenere 6273584 . Quindi mettiamo da parte 234 , per ottenere 6758 . Quindi mettiamo da parte 5 , per ottenere 678 . Infine, abbiamo messo da parte 678 per ottenere la permutazione vuota. Questo richiede quattro round, quindi r ( 62735814 ) = 4 .r(62735814)1627358423467585678678r(62735814)=4

In che modo questa rappresentazione è utile per l'ordinamento ? Prendi ogni secondo, cioè 234 , 678 , e sposta questi numeri a destra per ottenere 51627384 (modifica: nell'ordine in cui compaiono nella permutazione, cioè 62738462735814234,67851627384627384 ). Ora ci sono solo due esecuzioni, ovvero , e possiamo ordinare l'elenco spostando 5678 a destra.1234,56785678

Ora lasciami fare la seguente congettura: Per una permutazione , lascia che Π sia l'insieme di tutte le permutazioni che sono raggiungibili da π in una mossa. Quindi min α Π r ( α ) = r ( π ) / 2 .πΠπminαΠr(α)=r(π)/2

Data questa congettura, è facile dimostrare che il numero minimo di mosse necessarie per ordinare una permutazione è log 2 r ( π ) e ho verificato questa formula per tutte le permutazioni inπlog2r(π) per n 8 .Snn8

Modifica: Ecco una diversa interpretazione del numero di partizione di corsa che fornisce un algoritmo di tempo lineare per il suo calcolo e mi permette di tracciare una prova della mia congettura, verificando così la formula .log2r(π)

Considera di nuovo la permutazione . Il motivo per cui la prima esecuzione termina con 1 è che 2 appare prima di 1 . Allo stesso modo, la seconda corsa termina in 4 poiché 5 appare prima di 4 e così via. Pertanto il numero della partizione di marcia di una permutazione è il numero di i62735814121454i tale che appare prima di i .i+1i

Possiamo affermarlo in modo più succinto se osserviamo l'inverso della permutazione. Considera di nuovo . Prendi π - 1 = 72485136 . Questa permutazione ha tre discese: 7 2 48 5 1 36 (una discesa è una posizione più piccola della precedente). Ciascuna delle discese corrisponde all'inizio di una nuova corsa. Quindi r ( π ) è uguale a uno più il numero di discese in π - 1 .π=62735814π1=7248513672485136r(π)π1

Come appare l'operazione in termini di ? lascia che B sia l'insieme di numeri che spostiamo a destra e A che sia l'insieme di numeri che rimangono a sinistra. Sostituiamo i numeri in A con una permutazione su { 1 , , | A | } che rappresenta il loro ordine relativo e sostituisce i numeri in B con una permutazione su { | A | + 1 , , | π1BAA{1,,|A|}B{|A|+1,,|A|+|B|}. Ad esempio, considera la mossa . In termini di permutazioni inverse, è 7 248 5 1362 468 1 357 . Quindi 75 è stato mappato su 21 e 248136 è stato mappato su 468357 .627358145162738472485136246813577521248136468357

Una discesa in π - 1 è perso dopo l'operazione solo se x A e y B . Viceversa, in termini di π - 1 , la partizione in A e B corrisponde a A- runs e B -runs; ogni volta che un B estremità -Run e un A -run inizia, c'è una discesa. Per "uccidere" una discesa, dobbiamo passare da una A- corsa a una Bxyπ1xAyBπ1ABABBAAB-correre. Se uccidiamo due discese, saremmo passati nel mezzo da una run a una A- run, sostenendo una discesa.BA

Questo argomento può essere formalizzato per mostrare che se deriva da π tramite un'operazione, allora d ( α - 1 ) d ( π - 1 ) / 2 , dove d ( ) è il numero di discese. Ciò equivale a r ( α ) r ( π ) / 2 απd(α1)d(π1)/2d()r(α)r(π)/2, dimostrando così una direzione della mia congettura. L'altra direzione è più semplice ed è già stata delineata sopra: facciamo semplicemente ogni secondo giro e spingiamo questi giri a destra per ottenere una permutazione / 2 ) .αsoddisfacente r(α)=r(π/2)


Stai eliminando diversi round di palline contemporaneamente, capisco che non è permesso.
vonbrand,

1
Li sto prendendo nell'ordine in cui appaiono nella permutazione . Questo è legale.
Yuval Filmus,

sono un po 'confuso. puoi per favore spiegare il numero minimo di operazioni richieste per ordinare [6 5 4 3 2 1] e hai anche detto come "Prendi ogni secondo giro, cioè 234.678, e sposta questi numeri a destra per ottenere 51627384" puoi per favore spiegarlo con dettaglio e anche come calcolare r (π) in modo efficace?
user6709,

1) , quindi occorrerebbero 3 operazioni. Ad esempio, 654321 531 | 642 51 | 6234 1234 | 56 . r(654321)=6654321531|64251|62341234|56
Yuval Filmus,

2) Prendi tutti i numeri appartenenti a queste corse (nell'ordine in cui compaiono nella permutazione) e le sposti a destra. In questo caso, prendi e spostali a destra, lasciando 51 a sinistra. 62738451
Yuval Filmus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.