@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.L1≥L2≥⋯≥LnO(nlogn)
User1990169 işaret @ gibi, bir parça kesmek zorunda asla .i≥k
İ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 kesilebilirs1≤s≤k1,…,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,…,s−1kLs−1O(klogk)
Eğer , bu değer en uygun boyutu ve faz iki atlayabilir.Ls−1=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 :oLs−1>o≥Lso>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 ii1≤i≤sLsri , buradaj≤riveLiLijj≤ri. (Bunlarınneden yalnızca aday boyutlarolduğuna ilişkin @ user1990169'un cevabınabakın.)Lij<Ls−1
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 i ≤ 2 k ile sınırlandığından , içinde yapılabilir .O(klogk)∑iri≤2k
Ş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)