นี่คือ O(nlogn)สารละลาย. O(n)ทางออกที่ชี้ให้เห็นโดย Willard Zhanต่อท้ายคำตอบสุดท้ายนี้
O(nlogn) สารละลาย
เพื่อความมั่นใจแสดงว่า f(i,j)=(h[j]−h[i])(j−i).
กำหนด l1=1และ li เป็นดัชนีที่เล็กที่สุดเช่นนั้น li>li−1 และ h[li]<h[li−1]. ในทำนองเดียวกันกำหนดr1=nและ ri เป็นดัชนีที่ใหญ่ที่สุดเช่นนั้น ri<ri−1 และ h[ri]>h[ri−1]. ลำดับl1,l2,... และ r1,r2,… ง่ายต่อการคำนวณ O(n) เวลา.
กรณีที่ไม่มี i<j ดังนั้น h[i]<h[j] (เช่น f(i,j)>0) เป็นเรื่องเล็กน้อย ตอนนี้เรามุ่งเน้นกรณีที่ไม่สำคัญ ในกรณีเช่นนี้เพื่อหาคำตอบเราต้องพิจารณาคู่เหล่านั้นเท่านั้น
แต่ละ i<j ดังนั้น h[i]<h[j], ปล่อย u เป็นดัชนีที่ใหญ่ที่สุดเช่นนั้น lu≤iและ v เป็นดัชนีที่เล็กที่สุดเช่นนั้น rv≥jจากนั้น h[lu]≤h[i] (มิฉะนั้น lu+1≤i โดยนิยามของ lu+1จึงขัดแย้งกับคำจำกัดความของ u) และในทำนองเดียวกัน h[rv]≥h[j]. ด้วยเหตุนี้
(h[rv]−h[lu])(rv−lu)≥(h[j]−h[i])(rv−lu)≥(h[j]−h[i])(j−i).
ซึ่งหมายความว่าเราต้องพิจารณาคู่เท่านั้น
(lu,rv) ที่ไหน
lu<rv.
แสดงว่า v(u)=argmaxv: lu<rvf(lu,rv)เรามีบทแทรกดังต่อไปนี้
คู่โดยที่และตำแหน่งที่มีเช่นนั้นและหรือว่าและไม่สามารถเป็นคำตอบสุดท้ายที่เหมาะสม(lu,rv)lu<rvu0u<u0v<v(u0)u>u0v>v(u0)
พิสูจน์ ตามคำจำกัดความของเรามี
หรือ
v(u0)
(h[rv(u0)]−h[lu0])(rv(u0)−lu0)≥(h[rv]−h[lu0])(rv−lu0),
(h[rv]−h[rv(u0)])lu0+h[lu0](rv−rv(u0))+h[rv(u0)]rv(u0)−h[rv]rv(u0)≥0.
ในกรณีที่และให้สังเกตและและยังและเรามี
u<u0v<v(u0)h[rv]−h[rv(u0)]<0rv−rv(u0)>0lu<lu0h[lu]>h[lu0]
> (h[rv]−h[rv(u0)])lu+h[lu](rv−rv(u0))(h[rv]−h[rv(u0)])lu0+h[lu0](rv−rv(u0)).
ซึ่งหมายความว่า
หรือ
(h[rv]−h[rv(u0)])lu+h[lu](rv−rv(u0))+h[rv(u0)]rv(u0)−h[rv]rv(u0)>0,
(h[rv(u0)]−h[lu])(rv(u0)−lu)>(h[rv]−h[lu])(rv−lu).
ดังนั้นเป็นทางออกที่ดีกว่าอย่างเคร่งครัดr_v) หลักฐานอื่น ๆ ที่คล้ายกัน (lu,rv(u0))(lu,rv)■
เราสามารถคำนวณอันดับแรกโดยที่คือความยาวของลำดับจากนั้นคำนวณคำตอบที่ดีที่สุดแบบวนซ้ำในหมู่สำหรับและและทางออกที่ดีที่สุดระหว่างสำหรับและ2) เนื่องจากการแทรกการแก้ปัญหาที่ดีที่สุดทั่วโลกต้องมาจาก\}v(ℓ/2)ℓl1,l2,…o1(lu,rv)u=1,…,ℓ/2−1v=v(ℓ/2),v(ℓ/2)+1,…o2(lu,rv)u=ℓ/2+1,ℓ/2+2,…v=1,…,v(ℓ/2){(lℓ/2,rv(ℓ/2)),o1,o2}
O(n)ทางออก
ให้ถ้าr_v หลักฐานของบทแทรกยังแสดงคุณสมบัติที่สำคัญ: สำหรับและหากจากนั้นr_v) นี่หมายความว่าเมทริกซ์เป็นเมทริกซ์โมโนโทนทั้งหมดโดยที่คือความยาวของลำดับ (ดังนั้นหมายถึงองค์ประกอบ -th จากปลาย) แล้วSMAWK ขั้นตอนวิธีการสามารถนำไปใช้หาค่าต่ำสุดของดังนั้นค่าสูงสุดของฉf(lu,rv)=−∞lu≥rvu>u0v>v0f(lu0,rv0)≥f(lu0,rv)f(lu,rv0)>f(lu,rv)M[x,y]:=−f(lx,rc−y+1)cr1,r2,…rc−y+1yMf