Étant donné un tube avec des boules numérotées (aléatoire). Le tube a des trous pour retirer une balle. Considérez les étapes suivantes pour une opération:
- Vous pouvez choisir une ou plusieurs balles dans les trous et vous souvenir de l'ordre dans lequel vous avez choisi les balles.
- Vous devez incliner le tuyau vers le côté gauche afin que les billes restantes dans le tuyau se déplacent vers la gauche et occuper l'espace vide créé en retirant les billes.
- Vous n'êtes pas censé changer l'ordre dans lequel vous avez choisi les boules numérotées du tuyau. Maintenant, vous les remettez dans le tuyau en utilisant l'espace libre créé par le mouvement des balles.
Les étapes 1 à 3 sont considérées comme une seule opération.
Découvrez les opérations minimales requises pour trier les boules numérotées dans l'ordre croissant.
Par exemple: Si le tube contient:
Ensuite, nous pouvons retirer et 5 et 6 , et si nous inclinons le tuyau vers la gauche, nous obtenons [ 1 2 3 ] , et nous insérons ( 4 5 6 ) dans cet ordre à la fin du tuyau pour obtenir [ 1 2 3 4 5 6 ] .
Donc, le nombre minimum d'étapes requises est 1. J'ai besoin de trouver des opérations minimales pour trier le tuyau.
Des idées ou des conseils sur la façon de résoudre ce problème?
sorting
permutations
rakesh
la source
la source
Réponses:
Définissez le numéro d' exécution-partition d'une permutation , notée r ( π ) , en utilisant le processus suivant. Soit k l'entier maximal tel que les nombres min ( π ) , … , k apparaissent en ordre croissant dans π . Supprimez-les de et répétez le processus. Le nombre de tours qu'il faut pour consommer la permutation entière estπ r(π) k min(π),…,k π r ( π )π r(π) .
Par exemple, calculons . Nous avons d'abord mis de côté , pour obtenir . Ensuite, nous avons mis de côté , pour obtenir . Ensuite, nous avons mis de côté , pour obtenir . Enfin, nous avons mis de côté pour obtenir la permutation vide. Cela prend quatre tours, donc1 6273584 234 6758 5 678 678 r ( 62735814 ) = 4r(62735814) 1 6273584 234 6758 5 678 678 r(62735814)=4 .
En quoi cette représentation est-elle utile pour trier ? Effectuez toutes les secondes, soit , et déplacez ces nombres vers la droite pour obtenir (modifier: dans l'ordre où ils apparaissent dans la permutation, soit ). Maintenant, il n'y a que deux exécutions, à savoir , et nous pouvons trier la liste en déplaçant vers la droite.234 , 678 51627384 627384 1234 , 5678 567862735814 234,678 51627384 627384 1234,5678 5678
Permettez-moi maintenant de faire la conjecture suivante: Pour une permutation , soit l'ensemble de toutes les permutations qui sont accessibles à partir de en un seul mouvement. Alors .Π π min α ∈ Π r ( α ) = ⌈ r ( π ) / 2 ⌉π Π π minα∈Πr(α)=⌈r(π)/2⌉
Compte tenu de cette conjecture, il est facile de montrer que le nombre minimal de mouvements nécessaires pour trier une permutation est , et j'ai vérifié cette formule pour toutes les permutations dans pour .⌈ log 2 r ( π ) ⌉ S n n ≤ 8π ⌈log2r(π)⌉ Sn n≤8
Edit: Voici une interprétation différente du numéro de la partition d'exécution qui donne un algorithme de temps linéaire pour le calculer, et me permet d'esquisser une preuve de ma conjecture, vérifiant ainsi la formule .⌈log2r(π)⌉
Considérez à nouveau la permutation . La raison pour laquelle la première exécution se termine par est que apparaît avant . De même, la deuxième manche se termine en puisque apparaît avant , et ainsi de suite. Par conséquent, le numéro de partition d'exécution d'une permutation est le nombre de s tel que apparaisse avant .1 2 1 4 5 4 i i + 1 i62735814 1 2 1 4 5 4 i i+1 i
Nous pouvons le dire plus succinctement si nous regardons l'inverse de la permutation. Considérez à nouveau . Prenez . Cette permutation a trois descentes: (une descente est une position plus petite que la précédente). Chacune des descentes correspond au début d'une nouvelle descente. Donc est égal à un plus le nombre de descentes dansπ - 1 = 72485136 7 2 48 5 1 36 r ( π ) π - 1π=62735814 π−1=72485136 72485136 r(π) π−1 .
À quoi ressemble l'opération en termes de ? soit l'ensemble des nombres que nous déplaçons vers la droite, et l'ensemble des nombres qui restent à gauche. Nous remplaçons les nombres dans par une permutation sur représentant leur ordre relatif, et remplaçons les nombres dans par une permutation sur . Par exemple, considérons le mouvement . En termes de permutations inverses, c'est . Donc, correspondait à B A A { 1 , … , | A | } B { | A | + 1 , … , | A | + | B | } 6273 5 8 1 4 ↦ 51 627384 7 248 5 136 ↦ 2 468 1 357 75 21 248 136 468 357π−1 B A A {1,…,|A|} B {|A|+1,…,|A|+|B|} 62735814↦51627384 72485136↦24681357 75 21 et248136 a été mappé sur468357 .
Une descente dans π - 1 est perdu après l'opération que si x ∈ A et y ∈ B . Inversement, en termes de π - 1 , la partition en A et B correspond aux A- run et B- run; chaque fois qu'une course B se termine et qu'une course A commence, il y a une descente. Pour "tuer" une descente, nous devons passer d'un A- run à un B…xy… π−1 x∈A y∈B π−1 A B A B B A A B -courir. Si nous tuons deux descentes, nous serons passés au milieu d'un run à un AB A run, entraînant une descente.
Cet argument peut être formalisé pour montrer que si provient de via une opération, alors , où est le nombre de descentes. Cela équivaut à , prouvant ainsi une direction de ma conjecture. L'autre direction est plus facile, et a déjà été décrite ci-dessus: nous prenons simplement chaque seconde course et poussons ces courses vers la droite pour obtenir une permutation satisfaisant r ( α ) = ⌈ r ( π / 2 ) ⌉α π d(α−1)≥⌊d(π−1)/2⌋ d(⋅) r(α)≥⌈r(π)/2⌉ α r(α)=⌈r(π/2)⌉ .
la source