Elemanları tam olarak indeksleri olmayan sayma permütasyonları ± M


13

Son zamanlarda algoritmik bir röportajda bu soruyu sordum ve çözemedim.

İki değer N ve M verildiğinde, permütasyondaki herhangi bir sayı ile permütasyondaki konumu arasındaki mutlak fark M'ye eşit olmayacak şekilde N uzunluğundaki permütasyon sayısını (1'den N'ye kadar sayıları kullanarak) saymanız gerekir.

Örnek - N = 3 ve M = 1 ise, 1 2 3 ve 3 2 1 geçerli permütasyonlardır, ancak 3 sayısı 2 konumunda ve farkları = M olduğu için 1 3 2 geçersizdir.

NxM Dinamik programlamayı denedim ancak tekrarları saymayan bir yineleme oluşturamadım.


İçerme-hariç tutma yöntemini kullanarak bir formül alabilirsiniz. Örnek klasik olarak bilinen bozukluklar . M=0
Yuval Filmus

1
Bu, iki bölümlü grafiklerde mükemmel eşleşmelerin sayılmasının özel bir örneğidir; bu, olan bir sorundur . Tabii ki, bu özel durum daha kolay olabilir. #P
Yuval Filmus

İçerme-hariç tutma özelliğini zaten denedim ancak ilerleme kaydetmedim.
Gena

Düzensizlikleri sayma yöntemlerini uyarlamayı deneyebilirsiniz . Seni bir yere götürüp götürmeyeceğini bilmiyorum. Ayrıca M = 1 (diyelim) sabitlemeyi, N (N = 1,2,3,4,5,6,7,8) küçük değerlerinin sayısını kaba kuvvetle hesaplamayı ve ardından karşılık gelen diziyi aramayı deneyebilirsiniz. içinde OEIS umuduyla faydalı bir şey bulmak.
DW

Ayarladığınız özyineleme nedir? "Sayım tekrarları" ile ne demek istiyorsun?
Raphael

Yanıtlar:


2

Bu soru verildiğinde soracağım ilk şey,

Polinom zaman algoritması ister misiniz?

ve umarım cevap 'hayır' olur. Aşağıdaki nedenden dolayı bu sorunun NP-zor olduğundan şüpheleniyorum:

Bu soruna doğal yaklaşım, ilk sayının yerleşimini dikkate almak ve diğerlerini yerleştirmek için özyinelemeli bir formül elde etmektir. Her sayının yalnızca bir 'yasadışı' konumu olduğundan, ilk sayıyı hangi konuma yerleştirdiğinizin önemi olmadığı için bu, durumu (yani, düzenleme sayısını saymak) için iyi çalışır. Başka bir deyişle, bu yaklaşım bağımsız alt problemlere yol açmaktadır.M=0

For şimdi var gibi, bu, o kadar basit değil Bazı sayılar için yasadışı pozisyonları. Bu pozisyonlardan hangisinin alt problemde kaldığı artık alt problemin çözümü ile ilgilidir. Sadece 'yasadışı' konumların sayısının dikkate alınması yeterli değildir, çünkü o alt problemin alt problemlerinin yapısını belirlemek için yasadışı bir konumu paylaşan sayıların 'zincirleri' gereklidir. Dolayısıyla, bu yaklaşım temel olarak aşağıdaki alt probleme yol açar:2M>02

Verilen bir dizi , bir dizi en boyutta iki ve bir doğal sayı , bipartit grafikte mükemmel eşleşmeleri sayısını , burada ve yalnızca . B N N M ( A , B , E ) ( a , b ) E | a - b | MANBNNM(A,B,E)(a,b)E|ab|M

Bu sorun zor görünüyor. Gördüğüm bu soruna tek yaklaşım, bir polinom zaman algoritmasına yol açmayacak olan dahil etme / hariç tutmadır.

Sayıların yinelemeli yerleşimine dayanmayan yaklaşımları düşünebiliriz, ancak bunu nasıl yapacağınıza dair hiçbir fikrim yok. (özellikle röportaj sırasında!)

Tabii ki, tüm bunlar sadece bir spekülasyon ve zekice bir hile polinom zaman çözümü verebilir, ancak umarım bu hilenin gerçekten çok akıllı olması gerektiğine ikna edici bir iddiada bulundum.

Belki de bu problemi # 2-SAT'a düşürerek NP sertliğini göstermek mümkündür (yasadışı pozisyonları paylaşan sayıların 'zincirleri', bir doğruluk değeri seçimi ile eşleştirilebilecek önemsiz bir seçim gibi görünür), ancak Şimdilik bunu yapmanın bariz bir yolunu görmedim.


Görüşmeci aslında üstel bir zaman algoritmasından memnun kalacaksa, bu özel durumu dışlamak için bir permütasyon oluşturmak için özyinelemeli bir geri izleme algoritmasını uyarlayarak tüm olası çözümleri üretirdim.


Üstel zaman algoritması verebileceğimi söyledim, ancak N <= 1000 olduğunda çalışan bir polinom zaman çözümü istendi.
Gena

1
PPenguin'in cevabının önerdiği gibi soruyu yanlış hatırlamadığınız / yanlış yorumlamadığınız sürece, bu sorunun ya çok talepkar görüşmeciler, soruyu yanlış anlayan görüşmeciler tarafından sorulduğunu veya belki de kimsenin çözmesini beklemedikleri bir soru olarak sorulduğunu düşünüyorum. . Bu soru hesaplama açısından zor olmasa bile, büyük olasılıkla röportaj yapmak zordur.
Ayrık kertenkele

Görünüşe göre M = 1 yapılabilir (ve muhtemelen diğerleri), bu yüzden kaçırdığımız bir şey var. M = 1 vakasını anlamama / değerlendirmeme yardımcı olabilir misiniz? Bunun için ayrı bir soru yaptım cs.stackexchange.com/questions/74674/…
PPenguin

2

Belirli ayrıntıları yanlış hatırlamanız veya soruyu yanlış yorumlamanız mümkün mü?

Senin açıklamada, eleman pozisyon içinde sınırlıdır . Ancak farkın kısıtlandığı anlamına geldiyse: , O zaman sorun izlenebilir görünüyor.b a - b ± M a - b Mabab±M
abM


Bu daha basit problemi çözdüm ve daha büyük problemi çözmede biraz özgürlük vereceğini umduğum şekilde genelleştirmeye çalıştım. Ama bu benim için nihayet tartıştığım özyinelemeli bir yaklaşımın işe yarama olasılığının düşük olduğunu açıkladı.

İşlevi göz önünde 1 ila etiketli elemanlar bir liste permütasyon sayısını verir elemanı, pozisyon içinde tatmin (ilk konum 1) ve .f(N,M,P)NababMbaP

Bunu görselleştirmek için, onu iki kısıtlamaya ayırmak ve bu kısıtlamaları ayrı olarak değiştirmesine izin verir .MP

1 2 3 4 5  M=0, restricted values for each position
. . . . .  (positions in list)
1 2 3 4 5  P=0, restricted values for each position

3 4 5      M=2, restricted values for each position
. . . . .  (positions in list)
  1 2 3 4  P=1, restricted values for each position

Kolaylık için , permütasyonlara kısıtlama getirmeyecek şekilde tanımlayın . Benzer şekilde, olduğunda , böylece permütasyonlara herhangi bir kısıtlama getirmez.PNg(N,M)=f(N,M,P)g(N,P)=f(N,M,P)MN

Özel durumda , ve gelen kısıtlama eşdeğerdir, bu yüzden göz ardı edilebilir ve : cinsinden yazmamıza izin verirM=P=0MPfg

f(N,0,0)=g(N,0).

Problemin simetrisinden:

f(N,M,P)=f(N,P,M)

Önce için çözelim ve sonra daha genel başa çıkalım .g(N,M)f(N,M,P)

İçin , her bir eleman bir yerleşim kısıtlaması vardır (ve kısıtlamalar farklıdır). Yani bir element seçerek , onu bir pozisyon . Orada seçimi için farklı olasılıklar .M=0ijN1j

Bu seçim, eleman için kısıtlı konumu kaldırırken, diğer elemanların hala bir kısıtlaması vardır. Biz yerleşimini kırabilir iki seçenek haline:j(N2)j

  1. Yer . Bu, diğer tüm öğeleri tek bir kısıtlamayla bırakır, bu nedenle kalan yerleştirme sorunu şimdi düşürülür .ig(N2,0)

  2. Bir konuma yerleştirin . Bu, şimdi için bir yerleşim kısıtlaması verir ve bu nedenle her öğenin bir kısıtlaması vardır ve kalan yerleşim sorunu düşürülür.ijg(N1,0)

Bu özyinelemeli formülü verir:

g(N,0)=(N1)[g(N2,0)+g(N1,0)]

Ve basit durumlara elle bakarak, temel vakaları alabilirsiniz.

g(1,0)=0,  g(2,0)=1

Bu olağan düzensizlik özyinelemeli formüldür.

Birinin bu noktada geldiğini hayal edemesem de, bunun için kapalı bir form çözümü olduğu ortaya çıkıyor (ayrıntılar için düzensizlik wiki makalesine bakın).

g(N,0)=n!e+12

İçin , yerleşimler herhangi bir sınırlama vardır:MN

(MN)g(N,M)=N!

İle , birinci elemanlarının herhangi bir kısıtlama olacaktır ve geri kalan elemanlar, bir yerleşim sınırlama söz konusu olacaktır. Pozisyonlar açısından, son pozisyonları tüm sayılara izin verecektir.0<M<NMM

Son konum için bir eleman seçin . Kalan yerleşimin nasıl göründüğü için iki olasılık vardır:i

  1. Eğer , o zaman hiçbir yerleşim kısıtlamaları vardı, bu yüzden kullanarak herhangi bir pozisyon kısıtlamaları değişmez. Kısıtlama olmaksızın bir konumu da kaldırdık, bu nedenle kalan yerleşim gibi görünüyor .i<Miig(N1,M1)

  2. Eğer , sonra bir yerleştirme kısıtlaması vardı ve biz hiçbir kısıtlama bir konum kaldırıldı. Çünkü yerleştirilir, buna daha sınırlıydı pozisyon kalan sayıların herhangi kabul edebilir. Böylece kalan yerleşim gibi görünür .i>=Miig(N1,M)

Böylece bu özyinelemeli formülü verir:

(0<M<N)g(N,M)=(M1)g(N1,M1)+(NM+1)g(N1,M)

Bu, için özyinelemeli çözümü bitirir .g

Tüm , ilk pozisyonları üzerlerinde tek bir numara kısıtlama olmamakla beraber, son pozisyonları üzerlerinde tek bir numara kısıtlama sahiptir ve orta pozisyonları hiçbir kısıtlama yoktur. Bu tıpkı gibi.M+PNNMNPM+PNg(N,M+PN)

(M+P)Nf(N,M,P)=g(N,M+PN)

Biz hariç şu anda bütün davaları ele sahip ve öyle ki . Burada bazı öğelerin birden fazla kısıtlaması vardır. Çünkü simetri , düşünülebilecek genelliği kaybetmeden.0<M<N0<P<NM+P<Nf0<MP<N

İlk konumları tek bir kısıtlamaya, ardından iki kısıtlamaya sahip konumlarına sahip olacak, daha sonra son konumları tek bir kısıtlamaya sahip olacaktır.PNMPM

Elemanlara bakıldığında, ilk elemanlarının tek bir kısıtlaması olacak, daha sonra elemanlarının iki kısıtlaması olacak, daha sonra son elemanlarının tek bir kısıtlaması olacak.MNMPP

Ancak bu noktada bitmeliyiz. Çünkü bu yöntemle ilerlemenin bir yolu yok.


İki kısıtlamayı ayırdım, çünkü seçilen bir konuma bir sayı yerleştirmenin "+" kısıtlaması ve "-" kısıtlaması için kaç tane tek kısıtlanmış konumun dengesini bozabileceğini görebiliyordum .ab±M

Ancak daha genel bir problemde, içine bir sayı koyarak bir pozisyonu kaldırmak her zaman ile açıklanan bir alt problemle sonuçlanmaz .f(N,M,P)

Permütasyondaki bu kısıtlamaları görselleştirmek için, düğümü, bir kümesi ve diğeri etiketli yönlendirilmiş bir grafik düşünün . Bir yönlendirilmiş kenar eğer var ve yönlendirilmiş kenar eğer var ve .2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)ij=M(Bj,Ai)ji=MM0

düğümleri kümesi, bazı listede izin verdiğimiz sayılar olarak kabul edilebilir ve , olası konumlarını düğümler. Bu grafik kısıtlamaları temsil eder. Grafikte döngü olmayacak. Her zaman ayrık düğümler veya bir veya daha fazla uzunlukta zincirler olacaktır.AB

Bu nedenle, bu kısıtlama grafiğini girdi olarak alan ve kısıtlamaları karşılayan permütasyon sayısını çıkaran bir fonksiyon istiyoruz.

olduğu durumda , grafik sadece ayrık düğümler ve tek kenarlardır. Böylece A ve B düğümlerini kaldırmak, aynı zamanda ayrık düğümler ve tek kenarlar olan bir alt çizgi verecektir.M+PN

Ancak için grafikte uzun zincirler olabilir. Düğümü veya konumu sabitlememize bakılmaksızın, bir sayıyı kullanılabilir bir konuma yerleştirmek için, bunu oluşturmanın olası yollarının tüm alt bölümlerini dikkate almamız gerekir. Zincirleri kırmanın tüm farklı yolları, her turda parçasının sırasına göre bir "özyineleme" ile sonuçlanır ve bu nedenle, tüm kontrol etmeye kıyasla herhangi bir tasarruf varsa çok fazla bekleyemezsinizpermütasyon.N N !0<MP<NNN!

Zincirlere izin verildiğinde çok sayıda alt bölüm olduğu için, izomorfik olmayan kısıtlama grafiklerinin permütasyonların sayısına bir şekilde eşdeğer olduğunu söyleyen akıllı bir ilişki olmadığı sürece, her zamanki özyinelemeli yöntemlerle nasıl çözülebileceğini gerçekten görmüyorum.

Sanırım büyük olasılıkla, soru yanlış yorumlandı. Muhtemelen görüşmeci tarafından bile (cevap ayrıntılarını kendileri unutmuş olabilir).


Kısıtlama grafiğiniz neden yönlendiriliyor? Talimatlar ne anlama geliyor?
Ayrık kertenkele

@Discretelizard İki yön (a-> b vs b-> a), kısıtlamanın nereden geldiğini birbirinden ayırır (kısıtlamanın '+' veya '-' sürümü). Gerçekten gerekli değil, çünkü kısıtlamanın kaynağı önemli değil, olanları görselleştirmemi kolaylaştırdı.
PPenguin
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.