ปัญหาของการพิจารณาว่าโปรแกรมนั้นมี 'ประสิทธิภาพการเพิ่มประสิทธิภาพ' หรือ 'ประสิทธิภาพการเพิ่มประสิทธิภาพ' B สำหรับนิยามใด ๆ ของ 'ประสิทธิภาพการเพิ่มประสิทธิภาพ' ใด ๆ นั้นไม่สามารถอธิบายได้โดยทั่วไป (หลักฐานด้านล่าง) นี่ก็หมายความว่าไม่มีวิธีการเดียวที่สามารถบอกคุณได้ว่าอัลกอริทึมที่เหมาะสมที่สุดอยู่เสมอ
อย่างไรก็ตามมีวิธีการที่มักใช้เมื่อวิเคราะห์อัลกอริทึมการประมาณ บ่อยครั้งอัลกอริทึมการประมาณจะถูกประเมินโดยการรับประกันว่าโซลูชันนั้นมาจากโซลูชันที่เหมาะสมที่สุดหรือไม่ ฉันจะยกตัวอย่างปัญหาและการประมาณค่าซึ่งฉันจะพิสูจน์โดยใช้วิธี 'ขอบเขตล่าง' ซึ่งเป็นวิธีที่ใช้กันมากในการพิสูจน์อัตราส่วน
ปัญหาที่ถามคือปัญหา 'การโหลดรถบรรทุก': เรามีรถบรรทุกเหมือนกันมากมาย (มากเท่าที่เราต้องการ) แต่ละคนสามารถบรรทุกเครื่องชั่งที่มากที่สุด T เรามีวัตถุ n ที่เราต้องการโหลดในรถบรรทุกเหล่านี้สำหรับ ขนส่ง. วัตถุทุกชิ้นที่ฉันมีน้ำหนัก w_i โดยที่ w_i <= T (ดังนั้นจึงไม่มีรายการที่ไม่สามารถติดตั้งบนรถบรรทุกได้ด้วยตัวเอง) รายการไม่สามารถแบ่งออกเป็นชิ้นส่วน เราต้องการเติมรถบรรทุกให้มากที่สุดเท่าที่จะเป็นไปได้ ปัญหานี้เป็นปัญหาที่สมบูรณ์
มีอัลกอริทึมการประมาณที่ง่ายมากสำหรับปัญหานี้ เราเพียงแค่เริ่มโหลดรถบรรทุกพร้อมสิ่งของจนกว่ารถบรรทุกจะเต็มจนว่ารายการต่อไปจะไม่พอดี จากนั้นเราจะนำรถบรรทุกคันอื่นและบรรทุกรถบรรทุกคันนี้ด้วยของที่ไม่เหมาะกับรถบรรทุกคันก่อน เราไม่โหลดรายการใด ๆ เพิ่มเติมบนรถบรรทุกคันนี้: แต่เราจะนำรถบรรทุกใหม่มาเราเติมด้วยจำนวนมากอีกครั้งจนกว่ามันจะไม่เหมาะสมใส่รายการสุดท้ายในรถบรรทุกของตัวเองอีกครั้งและอื่น ๆ
อัลกอรึทึมนี้เป็นสิ่งที่เรียกว่าการประมาณ 2 ครั้งสำหรับปัญหา: ใช้รถบรรทุกมากที่สุดสองเท่าของวิธีแก้ปัญหาที่เหมาะสมที่สุด 'มากที่สุด' เป็นสิ่งสำคัญ: เราอาจโชคดีและค้นหาวิธีแก้ปัญหาที่ดีที่สุด แต่อย่างน้อยเราก็จะไม่ทำแย่เกินไป
เพื่อพิสูจน์สิ่งนี้ก่อนอื่นเราต้องกำหนดขอบเขตล่างของจำนวนรถบรรทุกที่เหมาะสมที่สุดที่เราต้องการ สำหรับเรื่องนี้ลองจินตนาการว่าเราได้รับอนุญาตให้ตัดชิ้นส่วนออกเป็นชิ้น ๆ : จากนั้นเราสามารถเติมรถบรรทุกทุกคันได้อย่างง่ายดาย แต่สุดท้ายจะสมบูรณ์ จำนวนรถบรรทุกที่เราต้องการถ้าเราทำนั่นคือขอบเขตที่ต่ำกว่าสำหรับจำนวนรถบรรทุกที่เราต้องการสำหรับคำถามดั้งเดิม: ในกรณี 'ดีที่สุด' ทางออกที่ดีที่สุดจะเติมรถบรรทุกทุกคันให้สมบูรณ์ซึ่งในกรณีนี้คือจำนวนรถบรรทุก มีค่าเท่ากัน แต่ถ้าวิธีแก้ปัญหาที่ดีที่สุดทำให้รถบรรทุกไม่ได้บรรจุจนเต็มก็สามารถทำได้เพียงต้องการรถบรรทุกเพิ่ม
ตอนนี้เราดูอัลกอริทึมการประมาณของเรา โปรดทราบว่าในทุกขั้นตอนเรา (บางส่วน) เติมรถบรรทุกสองคัน นอกจากนี้โปรดทราบว่าวิธีการทำงานของอัลกอริทึมรายการในรถบรรทุกคันแรกและรายการในรถบรรทุกคันที่สองเข้าด้วยกันไม่สามารถใส่ในรถบรรทุกคันแรกได้ดังนั้นผลรวมของพวกเขาคืออย่างน้อย T ซึ่งหมายความว่าทุกขั้นตอนเราโหลดอย่างน้อยเต็ม มูลค่ารถบรรทุกของรายการในรถบรรทุกสองคัน ตอนนี้เปรียบเทียบสิ่งนี้กับขอบเขตล่างของเรา: ในกรณีนี้เราโหลดรถบรรทุกเต็มคันมูลค่าสินค้าหนึ่งคัน กล่าวอีกนัยหนึ่งอัลกอริทึมการประมาณของเราคำนวณ (ในเชิงเส้นเวลา) โซลูชันที่ดูเหมือนว่า 'การแก้ปัญหา' ขอบเขตล่างของเรามาก แต่ใช้รถบรรทุกสองคันแทนที่จะเป็นหนึ่งคัน ดังนั้นเราจึงใช้รถบรรทุกเป็นจำนวนมากเป็นสองเท่าของอัลกอริธึมที่เหมาะสมที่สุดเพราะเราใช้รถบรรทุกมากที่สุดเป็นสองเท่าตามขอบเขตล่างของอัลกอริธึมที่เหมาะสม
อัลกอริทึมนี้ให้การประมาณด้วยปัจจัยคงที่: อย่างน้อยที่สุด 2 เท่าของวิธีที่ดีที่สุด ตัวอย่างบางส่วนของมาตรการอื่น ๆ : ที่ C มากที่สุดเกินกว่าวิธีที่ดีที่สุด (ข้อผิดพลาดเพิ่มเติม, ค่อนข้างผิดปกติ), c log n เท่าที่ดีที่สุดเท่าที่ทางออกที่ดีที่สุด, cn ครั้งมากที่สุดเท่าที่ดีที่สุด, c 2 มากที่สุด ^ (dn) เวลาไม่ดีเท่าทางออกที่ดีที่สุด (เลวร้ายมากตัวอย่างเช่น TSP ทั่วไปยอมรับเฉพาะอัลกอริทึมที่มีการรับรองประเภทนี้)
แน่นอนถ้าคุณต้องการให้แน่ใจว่าปัจจัยที่คุณพิสูจน์นั้นเป็นปัจจัยที่ดีที่สุดที่คุณสามารถพิสูจน์ได้คุณควรพยายามค้นหาอินสแตนซ์ที่โซลูชันอัลกอริทึมของคุณให้นั้นแย่มากอย่างที่ควรจะเป็น
นอกจากนี้โปรดทราบว่าบางครั้งเราใช้อัลกอริทึมโดยประมาณสำหรับปัญหาที่ไม่ได้เป็นปัญหา
ฉันเรียนรู้สิ่งนี้ (ในจำนวนมากขึ้น) ในหลักสูตรอัลกอริทึมการประมาณที่มหาวิทยาลัยของฉัน
การพิสูจน์ undecidability: ให้ P เป็นปัญหาและ A และ B เป็นขั้นตอนวิธีการประมาณสำหรับ P โดยที่ A และ B ไม่มี 'optimality' เหมือนกันสำหรับคำจำกัดความที่สมเหตุสมผลของ 'optimality' และเวลาทำงานของ A และ B เป็นทั้งโอเมก้า (1) (ช้ากว่าเวลาคงที่อย่างเข้มงวดนั่นคือจะช้าลงสำหรับอินสแตนซ์ที่ใหญ่กว่า) และเมื่อ A และ B หยุดทั้งสองเสมอ
ให้ D เป็นโปรแกรมที่อ้างว่าสามารถคำนวณสิ่งต่อไปนี้ได้: เนื่องจากโปรแกรม C บางตัวคำนวณการประมาณสำหรับ P ตัดสินใจว่ามันดีเท่า A หรือดีเท่า B สำหรับอินพุตที่มีขนาดใหญ่พอ (คุณสามารถใช้สิ่งนี้เพื่อจัดหมวดหมู่โปรแกรม ตามความเหมาะสมของพวกเขา)
จากนั้นเราสามารถใช้ D เพื่อแก้ปัญหาการหยุดชะงัก ให้ E เป็นโปรแกรมและ F เป็นอินพุตสำหรับโปรแกรมนี้ เราจะใช้ D เพื่อตัดสินใจว่า E จะหยุดที่อินพุต F หรือไม่
เราออกแบบโปรแกรม G ที่ทำสิ่งต่อไปนี้: รับอินพุต S สำหรับปัญหา P, มันรัน E บน F และ A บน S ในแบบขนาน: มันรัน E ชั่วขณะหนึ่ง, จากนั้น A, แล้ว E อีกครั้งและต่อ ๆ ไป ถ้า E หยุดการทำงานของ F มันจะหยุดการทำงาน A และแทนที่จะรัน B บน S และส่งคืนผลลัพธ์ของ B ถ้า A หยุดก่อนที่ E จะหยุดมันจะส่งคืนผลลัพธ์ของ A
การใช้ D บน G จะตัดสินว่า E หยุดทำงานกับ F: หรือไม่ถ้า E หยุดทำงานบน F จากนั้นสำหรับอินพุตที่มีขนาดใหญ่พอ S, E หยุดทำงานที่ F ก่อน A หยุดทำงานบน S (เพราะเวลาที่ใช้เพื่อหยุด E ไม่ขึ้นกับขนาดของ อินพุตไม่เหมือนกับ A) ดังนั้นรายงานว่า G มีคุณสมบัติ optimality ของ B ถ้า E ไม่หยุดอยู่กับ F, D จะรายงานว่า G มีคุณสมบัติ optimality ของ A