Vertical Stick mücadelesine nasıl yaklaşılır?


23

Bu sorun, görüşmeci.com'dan alınmıştır.

Biz tamsayı dizisi verilmiştir Y={y1,...,yn} temsil hattı segmentleri ve bu tür parça son noktaları bu olan ve . Her bir parçanın üstünden yatay bir ışının sola doğru çekildiğini ve bu ışının başka bir parçaya dokunduğu veya y eksenine çarptığı zaman durduğunu hayal edin. , , n tamsayıları dizisini oluştururuz , burada , segmentinin tepesinden ışın çekim uzunluğuna eşittir . Bu tanımlar .nben(i,0)(i,yi)v1,...,vnvbeniV(y1,...,yn)=v1+...+vn

Örneğin, eğer , sonra , aşağıdaki resimde gösterildiği gibi:[ h 1 , . . . , v 8 ] = [ 1 , 1 , 3 , 1 , 1 , 3 , 1 , 2 ]Y=[3,2,5,3,3,4,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2]

görüntü tanımını buraya girin

Her bir permütasyon için ve , biz hesaplayabilir . Bir homojen rastgele permütasyon tercih durumunda ve , beklenen değeri ne ?[ 1 , . . . , N ] V ( Y p 1 , . . . , Y p , n ) p [ 1 , . . . , N ] V ( Y p 1 , . . . , Y p , n )p[1,...,n]V(yp1,...,ypn)p[1,...,n]V(yp1,...,ypn)

Bu problemi saf yaklaşımı kullanarak çözersek, verimli olmayacak ve pratik olarak için sonsuza dek çalışacak . Her bir çubuk için beklenen değerini bağımsız olarak hesaplayarak bu soruna yaklaşabileceğimize inanıyorum, ancak yine de bu sorun için etkili bir yaklaşım olup olmadığını bilmem gerekiyor. Her bir çubuk için beklenen değeri hangi temelde bağımsız olarak hesaplayabiliriz?V in=50vben


Beklentinin doğrusallığını kullanabilirsiniz. Bu soru muhtemelen matematikte daha uygundur.SE

Yanıtlar:


23

Farklı bir sorun düşünün: n çubuklara eşit yükseklikte çubuklar yerleştirmeniz gerekiyorsa, çubuklar arasında beklenen mesafe (ve ilk çubuk ile bir kavramsal yuva 0 arasındaki beklenen mesafe ve son çubuk ile bir işaret arasındaki beklenen mesafe yuva n + 1 ) n + 1kn0n+1 ,n+1uzunluğuna sığacakk+1boşluklar olduğundan.n+1k+1k+1n+1

Bu soruna dönersek, belirli bir çubuk kaç tane çubuğun (kendisi de dahil) daha yüksek veya daha yüksek olduğu ile ilgilenir. Bu sayı ise, sola doğru beklenen boşluk da n + 1 olur.k .n+1k+1

Dolayısıyla, algoritma basitçe her bir çubuk için bu değeri bulmak ve beklentiyi arttırmaktır. Örneğin, yüksekliklerinden başlayarak, daha büyük veya eşit yüksekliğe sahip olan çubukların sayısı [ 5 , 7 , 1 , 5 , 5 , 2 , 8 , 7 ] bu yüzden beklenti 9[3,2,5,3,3,4,1,2][5,7,1,5,5,2,8,7].96+98+92+96+96+93+99+98=15.25

Bu programlamak kolaydır: örneğin R'de tek bir satır

V <- function(Y){ (length(Y) + 1) * sum( 1 / (rowSums(outer(Y, Y, "<=")) + 1) ) }

Orjinal problemde örnek çıktıdaki değerleri verir

> V(c(1,2,3))
[1] 4.333333
> V(c(3,3,3))
[1] 3
> V(c(2,2,3))
[1] 4
> V(c(10,2,4,4))
[1] 6
> V(c(10,10,10,5,10))
[1] 5.8
> V(c(1,2,3,4,5,6))
[1] 11.15

1
Çok ilginç. Çubuklar arasında beklenen mesafenin neden ; net olmadığı gibi (en azından benim için) nasıl hesaplandığı. Teşekkür ederim. (n+1)/(k+1)
M. Alaggan

İlk eşit yükseklik çubuğumda, k + 1 boşluklarla doldurulacak n + 1 bir uzunluk var, bu nedenle ortalama boşluk birbirinden bölerek geliyor. Bu, herhangi bir belirli çubuktan önce (ve son çubuktan n + 1'e kadar ) beklenen boşluktur (veya yatay ışın ). Herhangi bir özel çubuktan daha yüksek veya daha yüksek olan çubukları hesaba katarak orijinal soruya geçer. kn+1k+1n+1
Henry

Çok hoş. Bu benim çözümümüzü tamamlıyor; Tüm yükseklikler farklı ise . E[V]=k=1nn+1k+1=(n+1)(Hn+11)=(n+1)Hnn
JeffE

2
@ Henry: k eşit yükseklikte, n yuva probleminde, ortalama uzunluk için nedeniniz neydi? (N + 1) / (k + 1)? Eğer k çubuklarım varsa ve n çubuklardaki k çubuklarının her permütasyonundaki o çubuklardan birinin ortalama ışın uzunluğunu bilmek istiyorsam, bu aslında sonucunuzu eşitliyor ama nedenini anlamıyorum. Mantık var mı yoksa matematiksel olarak 1 çubuk ve n yuvası, sonra 2 çubuk ve n, yuva, ... k çubuk, n yuvası ve eşit olduğuna dikkat edin (n + 1) / ( k + 1)? Bir n + 1 yuvası eklemekten bahsediyorsunuz. Bu çok karşı sezgisel görünüyor.
Alexandre

3
Bu daha önce ele aldığım bir soru. Yuvarlak masa, koltuk ve k + 1 kişi ile başlayın ve rastgele oturtun. Bireyler arasındaki mesafeler açıkça orta ( n + 1 ) / ( k + 1 ) ile tanımlanır . Şimdi n + 1. kişiden masayı kırın , o kişiyi ve koltuğunu çıkarın ve masayı düzeltin. Şimdi burada n koltuklu ve k kişilik, ancak aynı mülk ve aynı anlama gelen soru var . ( Ayın nadir tekerlemesini bulun )n+1k+1(n+1)/(k+1)n+1thnk
Henry,

11

Henry'nin çözümü bundan daha basit ve daha geneldir!


, randomize hızlı erişim noktası tarafından gerçekleştirilen beklenen karşılaştırma sayısının kabaca yarısı kadardır.E[V]

Çubukların farklı yükseklikleri olduğunu varsayarsak, için aşağıdaki gibi kapalı formlu bir çözüm elde edebiliriz .E[Y]

Herhangi bir endeks için , izin X i j = 1 ise , Y J = maks { Y, I , . . . , Y, j } ve X, i j = 0 , aksi. (Unsurları durumunda Y olan olmayan tat, o zaman X, i j = 1 olduğu anlamına gelir , Y j olduğunu kesinlikle her eleman daha büyük { Y iijXij=1Yj=max{Yi,...,Yj}Xij=0YXij=1Yj .){Yi,,Yj1}

Sonra herhangi bir indeksi için , v j = j i = 1 X i j (nedenini görüyor musunuz?) Ve dolayısıyla V = n j = 1 v j = n j = 1 j i = 1 X i j .jvj=i=1jXij

V=j=1nvj=j=1ni=1jXij.

Beklenti doğrusallığı hemen

E[V]=E[1ijnXij]=1ijnE[Xij].

Çünkü ya olup 0 ya da 1 , elimizdeki E [ X i j ] = Pr [ X- ı j = 1 ] .Xij01E[Xij]=Pr[Xij=1]

Son olarak-ve bu da önemli bir bit için değerler olan farklı ve eşit sırası değiştirilebilir, alt setinin her eleman { Y, I , . . . , Y j } , bu alt kümedeki en büyük eleman olarak eşit derecede muhtemeldir . Böylece, Pr [ X ı j = 1 ] = 1Y{Yi,...,Yj} . (Y'ninelementlerifarklı değilse, halaPr[Xij=1]1'esahibiz.Pr[Xij=1]=1ji+1Y )Pr[Xij=1]1ji+1

Ve şimdi sadece biraz matematik var.

E[V]=j=1ni=1jE[Xij][linearity]=j=1ni=1j1ji+1[uniformity]=j=1nh=1j1h[h=ji+1]=h=1nj=hn1h[1hjn]=h=1nnh+1h=((n+1)h=1n1h)(h=1n1)=(n+1)Hnn
Hnn

E[V]O(n)


Does this assume that the sticks are of distinct height?
Aryabhata

Yes, it does assume distinct heights. (Apparently, I misread the question.) The equivalence with randomized quicksort still stands when there are ties, but not the closed-form solution.
JeffE

4

Yorumlarda belirtildiği gibi, Beklenti Doğrusallığı'nı kullanabilirsiniz.

Sırala y: y1y2yn.

For each yi consider the expected value of vi=E[vi].

Then E[i=1nvi]=i=1nE[vi]

One straight-forward and naive way to compute E[vi] would be first fix a position for yi. Say j.

Now compute the probability that at position j1 you have a value yi.

Then the probability that at j1 you have a value <yi and at j2 you have a value yi

and so on which will allow you to compute E[vi].

You can probably make it faster by actually doing the math and getting a formula (I haven't tried it myself, though).

Hope that helps.


3

@Aryabhata'nın cevabını genişleterek:

Düzelt ben, ve öğeyi varsayalım yben pozisyonda j. Yüksekliğin tam değeri önemsizdir, önemli olan, öğelerin eşit veya büyük olması durumudur.ybenya da değil. Bu nedenle öğe kümesini göz önünde bulundurunZ(ben), nerede zk(ben) 1 ise ykyben, ve zk(ben) aksi takdirde 0 olur.

Sette bir permütasyon Z(ben) sette buna karşılık gelen bir permütasyon uyarır Y. Örneğin setin aşağıdaki izinlerini göz önünde bulundurunZ(ben): "01000 (1)...". Eşya zben(ben) biri parantez, pozisyonda jve "ile gösterilenler..."önemli değil.

Değeri vben o zaman 1 artı sadece soldaki muhafazakar sıfırların çalışmasının uzunluğu zben(ben). Bunu takip ediyorE(vben) is actually 1 plus the expected length of consecutive zeors, until the first "1" is met, if we pick at most j1 bits from the set Z(i)zi(i)(without replacement). This is reminiscent of the geometric distribution, except that it would be without replacement (and bounded number of draws). The expectation is to be taken on j as well, as a uniform choice on the set of positions {1,,n}.

Once this is computed (along these lines), we can follow the lines of @Aryabhata's answer.


-2

Gerçekten ne istediğini anlamıyorum, etiketlerden bir algoritma aradığın anlaşılıyor.

öyleyse, beklenen zaman karmaşıklığı nedir? diyerek: "Bu sorunu saf yaklaşımı kullanarak çözersek, verimli olmayacak ve pratik olarak sonsuza dek n = 50 için çalışmayacaktır." bana öyle geliyor ki saf yaklaşımınız bunu üstel bir zamanda çözüyor.

Aklımda bir O (n ^ 2) algoritması var tho.

assume int y[n], v[n] where v[i] initialized with 1; as described in the question
for (i=1;i<n;i++) 
   for ( j=i-1 ; j>=0 && y[j]<y[i] ; j--) v[i]++;
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.