Sıralama konusunda ilginç bir problem


14

Numaralı topları olan bir tüp verildi (rastgele). Tüpün bir topu çıkarmak için delikleri vardır. Bir işlem için aşağıdaki adımları göz önünde bulundurun:

  1. Deliklerden bir veya daha fazla top seçebilir ve topları seçtiğiniz sırayı hatırlayabilirsiniz.
  2. Borudaki kalan topların sola doğru kayması ve topların çıkarılmasıyla oluşturulan boş alanı işgal etmesi için boruyu sol tarafa doğru eğmeniz gerekir.
  3. Numaralandırılmış topları borudan aldığınız sırayı değiştirmenize gerek yoktur. Şimdi topların hareketiyle yaratılan boş alanı kullanarak tekrar boruya koydunuz.

1-3 arası adımlar bir işlem olarak kabul edilir.

Numaralı topları artan düzende sıralamak için gereken minimum işlemleri öğrenin.

Örneğin: Tüp aşağıdakileri içeriyorsa:[1 4 2 3 5 6]

Sonra ve ve çıkarabiliriz ve boruyu sola yatırırsak, alırız ve almak için borunun sonuna ekleriz .5 6 [ 1 2 3 ] ( 4 5 6 ) [ 1 2 3 4 5 6 ]456[1 2 3](4 5 6)[1 2 3 4 5 6]

Minimum adım sayısı 1'dir. Boruyu sıralamak için minimum işlemleri bulmam gerekiyor.

Bu sorunun nasıl çözüleceğine dair herhangi bir fikir veya ipucu var mı?


Ters sırayla gelirlerse, sırayla operasyonları için 2, 3, ... çıkarmanız ve sonunda eklemeniz gerekir . Bu en kötü durumdur. n
vonbrand

2
8,7,6,5,4,3,2,1 -> 75318642 -> 51627384 -> 12345678 her zaman tek pozisyon alarak.
adrianN

Cevabımı Özetlersek: operasyonların en az sayıda bir permütasyon sıralamak için gerekli olduğunu , inişlerin sayısıdır. log 2 ( d ( π - 1 ) + 1 ) d ( )πlog2(d(π1)+1)d()
Yuval Filmus

Tersleri kaldırma açısından düşünmeyi seviyorum. Her işlemle, herhangi bir ve seti arasındaki terslemeleri kaldırabilirsiniz (burada , topların tamamıdır). Yani, setlerinizi dikkatlice seçmelisiniz . S - X S XXSXSX
Joe

Yanıtlar:


10

Tanımlama çalıştırma bölüm numarasını bir permütasyon arasında , gösterilen , aşağıdaki işlem kullanılarak,. Let numaralama şekilde tamsayı maksimal olması düzeni artan görünür . Bunları kaldırın ve işlemi tekrarlayın. Tüm permütasyonu tüketmek için gereken tur sayısı .πr(π)kmin(π),,kππr(π)

Örneğin, hesaplayalım . Biz ilk kenara olsun, . Sonra kenara almak için, . Sonra almak için kenara . Sonunda boş permütasyonu almak için kenara bıraktık. Bu dört tur sürer, bu nedenle .r(62735814)1627358423467585678678r(62735814)=4

Bu gösterim sıralamak için nasıl faydalıdır ? Her ikinci koşuyu, yani alın ve almak için bu sayıları sağa hareket ettirin (düzenle: permütasyonda göründükleri sırayla, yani ). Şimdi orada yani sadece iki çalışır vardır olup kaçmaya göre sıralayabilirsiniz sağa.62735814234,678516273846273841234,56785678

Şimdi şu varsayımı yapmama izin verin: , , bir hamlede erişilebilen tüm permütasyonlar kümesi olsun . Sonra .πΠπminαΠr(α)=r(π)/2

Bu varsayım göz önüne alındığında, bir permütasyon sıralamak için gereken hamle minimum sayıda olduğunu göstermek kolaydır edilir ve ben tüm permütasyon için bu formülü doğruladıktan için .πlog2r(π)Snn8

Düzenleme: İşte onu hesaplamak için doğrusal bir zaman algoritması veren ve böylece benim tahmin bir kanıt çizmek, böylece formül doğrulamak çalışma bölümü numarasının farklı bir yorum .log2r(π)

permütasyonunu tekrar düşünün . İlk çalıştırma uçları nedeni olmasıdır önce görünür . Benzer şekilde, ikinci çalışma sona erer, çünkü önce görünür ve bu böyle devam eder. Bu nedenle, bir permütasyon çalıştırma bölüm numarası sayısıdır s şekilde önce görüntülenen .62735814121454ii+1i

Permütasyonun tersine bakarsak, bunu daha özlü bir şekilde ifade edebiliriz. Tekrar düşünün . Al . Bu permütasyonun üç inişi vardır: (iniş, öncekinden daha küçük bir konumdur). Her iniş yeni bir koşunun başlangıcına karşılık gelir. Yani bir artı artı deki iniş sayısına eşittir .π=62735814π1=7248513672485136r(π)π1

İşlem açısından neye benziyor ? let sağa doğru hareket ettiklerini sayıların kümesi ve sayıların kümesi sola kalmak söyledi. Biz numaraları yerine üzerinde bir permütasyon ile göreli düzeni temsil ve sayıları yerine üzerinde bir permütasyon ile . Örneğin, . Ters permütasyonlar açısından, . Yani , ile eşlendiπ1BAA{1,,|A|}B{|A|+1,,|A|+|B|}627358145162738472485136246813577521ve haritası çizilmiştir .248136468357

Bir iniş içinde işleminden sonra kaybolur sadece ve . Tersine, cinsinden, ve bölme runlarına ve -runlarına karşılık gelir ; her bir koşusu bittiğinde ve bir koşusu başladığında, bir iniş vardır. Bir inişi "öldürmek" için run'dan -run'a geçmek zorundayız . İki inişi öldürürsek, ortasından run'dan run'a geçip inişe geçeceğiz .xyπ1xAyBπ1ABABBAABBA

Bu tez, eğer göstermek için şekilsel olarak doğar bir işlem ile, daha sonra , iniş sayısıdır. Bu, , böylece varsayımımın bir yönünü kanıtlar. Diğer yön daha kolaydır ve yukarıda ana hatlarıyla belirtilmiştir: sadece her ikinci koşuyu alırız ve bu çalışmaları tatmin edici almak için sağa doğru .απd(α1)d(π1)/2d()r(α)r(π)/2αr(α)=r(π/2)


Aynı anda birkaç top atıyorsunuz, bunun izin verilmediğini anlıyorum.
vonbrand

1
Onları permütasyonda göründükleri sırayla alıyorum . Bu yasal.
Yuval Filmus

Biraz kafam karıştı. Lütfen [6 5 4 3 2 1] 'i sıralamak için gereken minimum işlem sayısını açıklayabilir misiniz ve ayrıca "Her ikinci koşuyu, yani 234,678 al ve 51627384 almak için bu sayıları sağa taşıyın" şeklinde bahseder misiniz? detay ve ayrıca nasıl r (π) etkili hesaplamak için?
user6709

1) , bu yüzden 3 işleme ihtiyacınız olacak. Örneğin, . r(654321)=6654321531|64251|62341234|56
Yuval Filmus

2) Bu koşulara ait tüm sayıları (permütasyonda göründükleri sırayla) alır ve sağa taşırsınız. Bu durumda, alıp sağa doğru hareket , sola . 62738451
Yuval Filmus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.