Aşağıdaki gözlemle başlayalım:
Let max göstermek dizisi maksimum a1,...,an ve izin min göstermektedirler onun minimum. Eğer a1=max ardından seçerek b1=b2=...=bn=⌊(max+min)/2⌋ isimli optimum.
Neden böyle? Dizi maksimumla başladığından, ya b1 ve dizinin minimum değerinden büyük bir sapmaya maruz kalırız (sonraki b_i'nin b_1'denbi büyük veya ona eşit olması b1 ) ya da b1 ve için sapma max . Ortalama, maksimum sapmayı en aza indirir.
Şimdi bu gözlemi a_1, ..., a_n genel dizilerinde kullanmak üzere genelleştirmeye çalışabiliriz a1,...,an. Örneğin, herhangi bir diziyi alt dizilere ayırabiliriz, böylece her biri ilgili alt dizinin maksimum değeriyle başlar.
Örnek: , , ve .( 2 ) ( 6 , 4 , 1 , 5 , 2 ) ( 8 , 7 , 5 , 1 )(2,6,4,1,5,2,8,7,5,1)(2)(6,4,1,5,2)(8,7,5,1)
Bu bölümleme göz önüne alındığında, şimdi bu her bir alt ayrı ayrı çözebilir ve atamasını alabiliriz , ancak azalan durumu ihlal edebilir. Bu, iyimserliği kaybetmeden düzeltilebilir.bi
Son alt dizinin her zaman tüm dizinin maksimum içerdiğini gözlemleyin (aksi halde, bundan sonra başka bir alt dizilim olacaktır). Let biz atanan değerler subsequences. Şimdi, ulaşmak için arkadan ve öne doğru çalışıyoruz. Eğer daha büyüktür , biz sadece set . Eğer daha küçükse, saklıyoruz. Ardından, ile ve benzerlerini karşılaştırmaya devam ediyoruz . Herhangi bir değerini değerinew , 1 , w , 2 , . . . , A k k a 1 , . . . , A k a k a k - 1 ağırlık k a k - 1 : = ağırlık k ağırlık k - 2 ağırlık k - 1 ağırlık ı w i + 1maxw1,w2,...,wkkw1,...,wkwkwk−1wkwk−1:=wkwk−2wk−1wiwi+1 ile atanan maksimum değer her zaman ile atanan maksimum değerin altında olduğundan, sapmayı asla arttırmaz .w i + 1wiwi+1
Bu algoritmanın doğru olması gerektiğini düşünüyorum. Çalışma süresi ile ilgili olarak, önemli bir adım mümkündür alt sıralar için artan maxima, işlem olup ? Emin değilim nerede katkıda bulunur.lO(n)l