2
อัลกอริธึมเชิงเส้นเวลาสำหรับการค้นหาค่าสูงสุดที่เลื่อน
สมมติว่าเราได้รับอาร์เรย์ที่มีจำนวนเต็มไม่ใช่ค่าลบ (ไม่จำเป็นต้องแตกต่างกัน)A[1..n]A[1..n]A[1..n] ให้เป็นเรียงตามลำดับที่ไม่เพิ่มขึ้น เราต้องการคำนวณ BBBAAAm=maxi∈[n]B[i]+i.m=maxi∈[n]B[i]+i.m = \max_{i\in [n]} B[i]+i. วิธีการแก้ปัญหาที่เห็นได้ชัดคือการเรียงลำดับแล้วคำนวณเมตร สิ่งนี้ให้อัลกอริทึมที่ทำงานในเวลาO (n \ lg n)ในกรณีที่แย่ที่สุดAAAmmmO(nlgn)O(nlgn)O(n \lg n) เป็นไปได้ไหมที่จะทำได้ดีกว่า เราสามารถคำนวณmmmในเวลาเชิงเส้นได้หรือไม่? คำถามหลักของฉันคือคำถามข้างต้น แต่มันน่าสนใจที่จะทราบเกี่ยวกับการวางนัยทั่วไปของปัญหา ให้BBBเป็นAAAเรียงตามการเปรียบเทียบ oracle ≤≤\leq และfffฟังก์ชั่นที่กำหนดโดย oracle ให้AAAและ oracles สำหรับ≤≤\leqและfffเราสามารถพูดอะไรเกี่ยวกับเวลาที่ต้องใช้ในการคำนวณm=maxi∈[n]f(B[i],i)m=maxi∈[n]f(B[i],i)m = \max_{i \in [n]} f(B[i],i) ? เรายังสามารถคำนวณmmmในO(nlgn)O(nlgn)O(n \lg n)เวลา แต่เราสามารถพิสูจน์ขอบเขตล่างสุดของเส้นตรงสำหรับกรณีทั่วไปนี้ได้หรือไม่? ถ้าคำตอบคือใช่ขอบเขตล่างถูกพักไว้หรือไม่ถ้าเราคิดว่าเป็นคำสั่งปกติของจำนวนเต็มและคือฟังก์ชัน "ดี" (โมโนโทน, พหุนาม, เชิงเส้น ฯลฯ )?f≤≤\leqfff