Farklı çubuklardan eşit çubukların kesilmesi


10

You have n ille ayrılmaz değil, rasgele uzunlukta sopa.

Bazı çubukları keserek (bir kesim bir çubuğu keser, ancak istediğimiz kadar kesebiliriz), k<n çubukları almak istersiniz :

  • Tüm bu çubukları aynı uzunlukta;k
  • Tüm çubukları en az diğer çubuklar kadar uzun.k

kesimleri yaptıktan sonra çubukları elde ettiğimizi unutmayın .n+CC

Hangi algoritmayı gerekli kesim sayısının minimum olacağı şekilde kullanırsınız? Peki bu sayı nedir?

Örnek olarak, ve herhangi bir . Aşağıdaki algoritma kullanılabilir:k=2n2

  • Çubukları, azalan uzunluk sırasına göre sipariş .L1L2Ln
  • Eğer sonra kesilen çubuk iki eşit parçaya # 1. Artık en az çubuk uzunluğu olduğu sürece, uzunluğunda iki çubuk vardır .L 1 / 2 2 ... nL12L2L1/22n
  • Aksi takdirde ( ), 1 numaralı çubuğu ve boyutlarında eşit olmayan iki parçaya . Şimdi uzunluğunda iki çubuk var , bu da daha uzun ve diğer çubuklar .L 2 L 1 - L 2 L 2 L 1 - L 2 3 nL1<2L2L2L1L2L2L1L23n

Her iki durumda da, tek bir kesim yeterlidir.

Bunu daha büyük genellemeye çalıştım , ancak dikkate alınması gereken birçok durum var gibi görünüyor. Zarif bir çözüm bulabilir misiniz?k

Yanıtlar:


6

Bu problemi çözmenin ilk temel gözlemi, bir kesme uzunluğu ,l

,Feasible(l)=[i=1nLilk]

parçalı sabit, sol sürekli ve cinsinden artmaz . Gerekli kesim sayısı benzer şekilde davrandığından, optimum uzunluğu bulmak sadecel

.l=max{lFeasible(l)}

Ayrıca, diğer cevapların önerdiği gibi, tüm sıçrama süreksizlikleri biçimindedir . Bu da bizi ikili aramaya uygun sınırlı, tek boyutlu bir arama problemine bırakıyor (sınırlı sayıda adayı sıraladıktan sonra).Li/j

Ayrıca, yalnızca k-en büyük olandan daha kısa olan dikkate almamız gerektiğine dikkat edin , çünkü bu her zaman mümkündür.Lik

Daha sonra, üzerindeki farklı sınırlar farklı verimlilik algoritmalarına yol açar.j

  • , ikinci dereceden ( k )cinsinden bir arama alanına neden olur,1jkk
  • (varsayılarak linearithmic birinde L i boyutu azaltılarak sıralanır) ve1jk/iLi
  • lineer olana biraz daha dahil olan sınırlar.

Bu kullanarak, zaman içinde önerilen sorunu çözebilir ve uzay İçeride ISTV melerin RWMAIWi'nin ( n + k ) .Θ(n+klogk)Θ(n+k)

Bir başka gözlem de toplamı yani yetişen l ile 1 , her bir aday için L i / j "kabul", sayma çoğaltır. Bunu kullanarak, binar arama yerine sıralama seçimini kullanabilir ve zaman ve mekanda çalışan bir algoritma elde edebiliriz Θ ( n ) , bu da en uygunudur.Feasiblel1Li/jΘ(n)

Ayrıntıları En Az Kesikli Envy-Free Stick Bölümü için Verimli Algoritmalar (Reitzig ve Wild, 2015).


Sonuç olarak, kesme çubuklarına yaklaşımımızdan gelen fikirler, daha genel bir soruna veya (orantılı) paylaştırmaya , pratik bir ilişki sorununa; bu konudaki kısa makalemize bakın .
Raphael

4

@RandomA'nın önerdiği gibi, iki aşamada ilerleyeceğiz: Önce kesilecek çubuk setini buluruz ve sonra kesim sayısını en aza indiririz.

Sorudaki özel durumda olduğu gibi, çubukları sıralıyoruz / adlandırıyoruz . Bu O ( n log n ) zaman alır.L1L2LnO(nlogn)

User1990169 işaret @ gibi, bir parça kesmek zorunda asla .ik

İlk aşamada , 1 s k sayısını bulmak için bir ikili arama kullanırız , böylece 1 , , s çubukları en az k boyutunda L parçalarına kesilebilirs1sk1,,sk (artı bazı küçük parçalara), ancak 1 , , s - 1 çubukları L s - 1 boyutunda k parçalarakesilemez. Bu O ( k log k ) zamanalacaktır.Ls1,,s1kLs1O(klogk)

Eğer , bu değer en uygun boyutu ve faz iki atlayabilir.Ls1=Ls

Aksi takdirde en uygun boyutun tatmin L s - 1 > O L ler ve eğer o > L s , sonra o eşit büyüklükte parçalar halinde çubukları en az bir kesme sonuçları. Aşama iki belirleyecek o :oLs1>oLso>Lsoo

Her bir çubuk için , 1 i s , aşağıdaki gibi, bir aday boyutlarda kümesinin saptanması: boyutu parçalar halinde kesilmesi durumunda L s sarımlarına çubuk r i (varsa, tek bir kısa dahil olmak üzere), daha sonra aday adet sopa tüm değerler L ii1isLsri , buradajriveLiLijjri. (Bunlarınneden yalnızca aday boyutlarolduğuna ilişkin @ user1990169'un cevabınabakın.)Lij<Ls1

Her aday boyutu için, ne sıklıkta gerçekleştiğini koruyun. Dengeli bir arama ağacı kullanılarak, toplam aday boyutu sayısı i r i2 k ile sınırlandığından , içinde yapılabilir .O(klogk)iri2k

Şimdi en sık meydana gelen ve geçerli bir kesime yol açan aday büyüklüğü, bize en uygun çözümü veren boyuttur. Ayrıca, herhangi bir aday boyutu geçerli bir kesime yol açarsa, daha küçük herhangi bir boyut da geçerli bir kesime yol açacaktır.

Böylece, da geçerli bir kesime yol açan en büyük aday uzunluğunu bulmak için tekrar ikili arama yapabiliriz . Sonra bu eşik değerine kadar aday uzunlukları setini yineliyoruz ve O ( k ) 'da aralarında en büyük çokluğa sahip olanı buluyoruz .O(klogk)O(k)

İlk sıralamayı yoksayarsak (veya yapmak zorunda kalmazsak ) toplamda veya O ( k log k ) içinde bir çalışma zamanı elde ederiz.O(nlogn)O(klogk)


"Sopa eğer ikili arama adımda, tam olarak nasıl kontrol edebilirim en azından içine kesilmiş olabilir k boyutu parçaları L s "? 1,,skLs
Erel Segal-Halevi

İçin işlem L i / L s . Bu değerlerin toplamı alabileceğiniz parça sayısıdır. 1isLi/Ls
FrankW

"en sık ortaya çıkan aday boyutu ... bize en uygun çözümü veren boyuttur" - neden?
Erel Segal-Halevi

Her meydana geldiğinde, t - 1 kesimli parçaları veren bir çubuğumuz var . tt1
FrankW

1
Toplam kesim sayısı En iyi durumda 2 (kk2Eşit uzunlukta 2 çubuk, diğer tüm çubuklar bu kadar uzun ve gördüğüm kadarıyla aslak-1'denfazla olmayacaktır. (Kesinlikle asla daha fazla olmayacakk2k1 her kesim sağ uzunluğu ve bir kalanının bir sopa verir gibi. Ama biz her zaman bir boyut seçebilir, görünüyor ki en az bir kesik yapraklar yüzden doğru uzunlukta bir kalanı. I don Yine de bunun için bir kanıt yok.)k
FrankW

1

Çubukları uzunluklarına göre azalan sırada sipariş ettikten sonra, bir çubuk sadece tüm çubuklar L 1 , L 2 ise kesilecektirLi kesildi.L1,L2,...Li1

Şimdi beri , L k çubuklarında herhangi bir kesim yapmayacağızk<nLk hep olabileceğinden, itibaren uzunluğu ile sopa L k .kLk

Şimdi yerine, sadece k - 1 çubuklarla (muhtemelen bir bütün olarak k- stik çubuğu ekliyoruz ) ve en kötü durumda gereken maksimum kesme sayısı = k - 1 ile ilgileniyoruz .nk1k=k1

Ayrıca, optimum kesim sayısı , o zaman1 orijinal çubuktan<k1k1(parça olarak veya 1 parça halinde)alınacak k - 1 çubuklarıarasında en az bir çubuk setibulunacaktır.yani, bu orijinal çubuğun hiçbir kısmı 'kullanılmayacaktır'. Bunun nedeni,güvercin deliğiprensibine göre, 1'den fazla geçerli çubuk üretmek zorunda kalacak en az 1 kesim olmalıdır.

Daha sonra döngüler için iç içe iki işlem yapabilirsiniz (ikisi de kadar ). Dış halka, tüm parçaları alınması gereken çubuk numarasını i , iç halka ise parça sayısını belirtirkio çubuktan yapılan j. Her boyut için L ij
Lij çubuklarını sırayla keserek uygulanabilir k çubukları alıp alamayacağınızı kontrol edin ve eğer mümkünse, gerekli olan mevcut sayı daha azsa, gereken minimum kesimi güncelleyin.L1

Yukarıdaki algoritmanın toplam karmaşıklığı O(nlog(n)+k3)


1

Üst düzey fikir ikili arama olacaktır.

İstenen k çubuklarının her birinin boyutu en azından en küçük çubuk ve en büyük çubuk olacaktır. Bu nedenle, orta çubuğun boyutunda ikili aramayı kullanarak ilerliyoruz, hangi sayısını elde edebileceğimizi görüyoruz, eğer bu k verilen k'dan daha fazlaysa, yeni referans adayı boyutu seçmemiz gerektiğini biliyoruz. Bu yüzden yeni referans çubuğu kullanarak büyüyüp küçülüyoruz. K olduğunda dururuzkkkk den az olan k

Uygun referans çubuğunu bulduktan sonra, boyutu daha da hassaslaştırmamız gereken bir köşe kutusu var. Tüm kesim çubuklarını üzerlerindeki kesim sayısına ve çubuğun boyutuna göre sıralayabiliriz. En az sayıda kesime ve en az boyuta sahip olanı seçin. Bu çubuktaki kesim sayısını 1 azaltın ve bunun tüm alt çubuklarını eşit boyutta yapın. Bu yeni referans boyutu olacak, bu yeni boyutun kabul edilebilir yol açıp açmayacağını kontrol edin . İtiraf ediyorum, bu durumda çalışma süresini nasıl sınırlayacağımı bilmiyorum.k

Umarım, diğer cevaplardan faydalı bir şey görebilirim.


2
Bence yaklaşımınızın temel fikri işe yarayacak. Ancak algoritma açıklamanız emin olmak için yeterince açık değil. Daha ayrıntılı sahte kod ekleyebilir misiniz?
FrankW

@FrankW Çalışma süresi hakkında çok emin değilim. Başkalarının neler olduğunu göreceğim, bu sorulacak oldukça ilginç bir soru.
InformedA
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.