อลิซนักเรียนทำการบ้านมากมายในสัปดาห์หน้า การบ้านแต่ละรายการจะใช้เวลาหนึ่งวัน แต่ละรายการมีกำหนดเวลาและผลกระทบทางลบต่อผลการเรียนของเธอ (สมมติว่าเป็นจำนวนจริงคะแนนโบนัสสำหรับการเปรียบเทียบเท่านั้น) หากเธอพลาดกำหนดเวลา
เขียนฟังก์ชั่นที่ให้รายการของ (กำหนดเวลาผลกระทบระดับคะแนน) กำหนดตารางเวลาสำหรับการทำการบ้านในวันที่ลดผลรวมของผลกระทบที่ไม่ดีต่อเกรดของเธอ
การบ้านทั้งหมดจะต้องทำในที่สุด แต่ถ้าเธอพลาดกำหนดเวลาสำหรับรายการมันไม่สำคัญว่าเธอจะเปิดช้าแค่ไหน
ในสูตรทางเลือก:
ACME corp ต้องการส่งน้ำให้กับลูกค้า พวกเขาทั้งหมดอาศัยอยู่ตามถนนสายเดียว ACME มีหลุมหลายแห่งกระจายอยู่ตามถนน แต่ละบ่อมีน้ำเพียงพอสำหรับลูกค้าหนึ่งราย ลูกค้าเสนอราคาเป็นจำนวนเงินที่แตกต่างกัน น้ำไหลลงเขาเท่านั้น เพิ่มรายได้ให้สูงสุดด้วยการเลือกลูกค้าที่จะจัดหา
เราสามารถจัดเรียงกำหนดเวลาโดยใช้การจัดเรียงกลุ่ม (หรือสมมติว่าเราได้เรียงลำดับตามกำหนดเวลาแล้ว)
เราสามารถแก้ปัญหาได้อย่างง่ายดายด้วยอัลกอริธึมโลภหากเราจัดเรียงโดยการกระทบจากระดับสูงสุดก่อน ทางออกนั้นจะไม่ดีไปกว่า O (n log n)
ได้รับแรงบันดาลใจจากMedian of MediansและอัลกอริทึมSpanning Tree แบบขั้นต่ำแบบเส้นตรงฉันสงสัยว่าเราสามารถแก้ปัญหาการตั้งเวลา / การไหลแบบง่าย ๆ ของฉันในเวลาเชิงเส้น (แบบสุ่ม?) ได้เช่นกัน
ฉันกำลังมองหา:
- อัลกอริทึมเวลาเชิงเส้น (อาจสุ่ม)
- หรือมิฉะนั้นก็โต้แย้งว่าไม่สามารถใช้เวลาเชิงเส้นได้
ในฐานะที่เป็นหินก้าว:
- ฉันได้พิสูจน์แล้วว่าเพิ่งรู้ว่ารายการใดที่สามารถทำได้ก่อนกำหนดเวลาของพวกเขาเพียงพอที่จะสร้างตารางเวลาที่สมบูรณ์ในเวลาเชิงเส้น (ข้อมูลเชิงลึกนั้นเป็นรากฐานของสูตรที่สองที่ฉันถามเกี่ยวกับใบรับรองเท่านั้น)
- โปรแกรมเชิงเส้นตรง (integral!) สามารถจำลองปัญหานี้ได้
- การใช้สองโปรแกรมนี้สามารถตรวจสอบวิธีการแก้ปัญหาที่เสนอโดยผู้สมัครในเวลาเชิงเส้นสำหรับการเพิ่มประสิทธิภาพหากมีการให้โซลูชั่นในโปรแกรมคู่ (โซลูชันทั้งสองสามารถแสดงเป็นจำนวนบิตแบบเส้นตรง)
เป็นการดีที่ฉันต้องการที่จะแก้ปัญหานี้ในรูปแบบที่ใช้การเปรียบเทียบระหว่างผลกระทบของเกรดเท่านั้นและไม่ถือว่ามีตัวเลข
ฉันมีสองวิธีในการแก้ไขปัญหานี้ - หนึ่งโดยใช้ treaps โดยใช้กำหนดเวลาและผลกระทบ QuickSelect อื่น ๆ ที่คล้ายกันขึ้นอยู่กับการเลือกองค์ประกอบสาระสำคัญแบบสุ่มและแบ่งพาร์ทิชันรายการโดยผลกระทบ ทั้งสองกรณีมีกรณีที่แย่ที่สุดที่บังคับให้ O (n log n) หรือประสิทธิภาพแย่ลง แต่ฉันไม่สามารถสร้างเคสพิเศษแบบง่าย ๆ ที่ทำให้ประสิทธิภาพของทั้งคู่แย่ลง