วิธีการพิสูจน์อัลกอริทึมโลภถูกต้อง


29

ฉันมีอัลกอริทึมโลภที่ฉันสงสัยว่าอาจถูกต้อง แต่ฉันไม่แน่ใจ ฉันจะตรวจสอบว่ามันถูกต้องได้อย่างไร เทคนิคใดที่ใช้ในการพิสูจน์อัลกอริทึมโลภที่ถูกต้อง? มีรูปแบบหรือเทคนิคทั่วไปบ้างไหม?

ฉันหวังว่านี่จะกลายเป็นคำถามอ้างอิงที่สามารถใช้ชี้ผู้เริ่มต้น; ดังนั้นขอบเขตที่กว้างกว่าปกติ โปรดใช้ความระมัดระวังในการให้คำตอบทั่วไปที่นำเสนอโดยไม่ได้ตั้งใจซึ่งแสดงอย่างน้อยหนึ่งตัวอย่าง แต่อย่างไรก็ตามยังครอบคลุมหลาย ๆ สถานการณ์ ขอบคุณ!



เราสามารถพิสูจน์ได้ว่าอัลกอริทึมโลภถูกต้องโดยใช้ matroid หรือ greedoid หรือไม่?
zdm

คำตอบ:


24

ในที่สุดคุณจะต้องมีหลักฐานทางคณิตศาสตร์ของความถูกต้อง ฉันจะไปหาเทคนิคการพิสูจน์สำหรับข้างล่างนี้ แต่ก่อนอื่นก่อนที่จะลงไปให้ฉันช่วยคุณประหยัดเวลา: ก่อนที่คุณจะหาหลักฐานลองทดสอบแบบสุ่ม

การทดสอบแบบสุ่ม

เป็นขั้นตอนแรกฉันขอแนะนำให้คุณใช้การทดสอบแบบสุ่มเพื่อทดสอบอัลกอริทึมของคุณ เป็นเรื่องที่น่าทึ่งว่ามันมีประสิทธิภาพแค่ไหน: จากประสบการณ์ของฉันสำหรับอัลกอริธึมโลภการทดสอบแบบสุ่มดูเหมือนว่าจะมีประสิทธิภาพเกินสมควร ใช้เวลา 5 นาทีเขียนอัลกอริทึมของคุณและคุณอาจช่วยตัวเองหนึ่งหรือสองชั่วโมงพยายามพิสูจน์

แนวคิดพื้นฐานง่าย ๆ : ใช้อัลกอริทึมของคุณ นอกจากนี้ให้ใช้อัลกอริธึมอ้างอิงที่คุณรู้ว่าถูกต้อง (เช่นพยายามใช้ความเป็นไปได้ทั้งหมดอย่างละเอียดรอบคอบและดีที่สุด) ไม่เป็นไรถ้าอัลกอริทึมการอ้างอิงของคุณไม่มีประสิทธิภาพแบบ asymptotically เนื่องจากคุณจะเรียกใช้สิ่งนี้ในกรณีที่เกิดปัญหาเล็กน้อย จากนั้นสร้างอินสแตนซ์ปัญหาเล็ก ๆ หนึ่งล้านสุ่มเรียกใช้อัลกอริทึมทั้งสองในแต่ละครั้งและตรวจสอบว่าอัลกอริทึมผู้สมัครของคุณให้คำตอบที่ถูกต้องในทุกกรณีหรือไม่

สังเกตุถ้าอัลกอริทึมผู้สมัครของคุณโลภไม่ถูกต้องโดยทั่วไปแล้วคุณมักจะค้นพบสิ่งนี้ในระหว่างการทดสอบแบบสุ่ม หากดูเหมือนว่าจะถูกต้องในทุกกรณีการทดสอบคุณควรไปยังขั้นตอนถัดไป: ค้นหาข้อพิสูจน์ทางคณิตศาสตร์ของความถูกต้อง

หลักฐานทางคณิตศาสตร์ของความถูกต้อง

ตกลงดังนั้นเราต้องพิสูจน์อัลกอริทึมโลภของเราว่าถูกต้อง: มันส่งออกทางออกที่ดีที่สุด (หรือถ้ามีทางออกที่ดีที่สุดหลายอย่างที่ดีเท่า ๆ กันมันส่งหนึ่งในนั้น)

หลักการพื้นฐานคือหลักการง่าย ๆ :

หลักการ:ถ้าคุณไม่มีทางเลือกที่ไม่ดี

อัลกอริทึมโลภมักจะเกี่ยวข้องกับลำดับของตัวเลือก กลยุทธ์การพิสูจน์พื้นฐานคือเราจะพยายามพิสูจน์ว่าอัลกอริทึมไม่เคยทำให้เลือกไม่ถูกต้อง อัลกอริทึมโลภไม่สามารถย้อนกลับได้ - เมื่อพวกเขาเลือกแล้วพวกเขาจะทำและจะไม่ยกเลิกตัวเลือกนั้น - ดังนั้นจึงเป็นเรื่องสำคัญที่พวกเขาจะไม่ตัดสินใจเลือกที่ไม่ดี

อะไรจะนับเป็นทางเลือกที่ดี หากมีวิธีการแก้ปัญหาที่ดีที่สุดเพียงอย่างเดียวมันเป็นเรื่องง่ายที่จะเห็นสิ่งที่เป็นตัวเลือกที่ดี: ตัวเลือกใด ๆ ที่เหมือนกันกับโซลูชันที่ดีที่สุด กล่าวอีกนัยหนึ่งเราจะพยายามพิสูจน์ว่าในขั้นตอนใดของการดำเนินการของขั้นตอนวิธีโลภลำดับของตัวเลือกที่ทำโดยอัลกอริทึมจนถึงตรงกับคำนำหน้าของโซลูชันที่ดีที่สุด หากมีวิธีแก้ปัญหาที่ดีที่สุดที่ดีเท่า ๆ กันหลายตัวเลือกที่ดีคือสิ่งที่สอดคล้องกับ optima อย่างน้อยหนึ่งรายการ กล่าวอีกนัยหนึ่งถ้าลำดับการเลือกของอัลกอริทึมตรงกับคำนำหน้าของหนึ่งในโซลูชั่นที่ดีที่สุดทุกอย่างก็ดี (ไม่มีอะไรผิดพลาดไป)

เพื่อลดความยุ่งยากในชีวิตและกำจัดสิ่งรบกวนให้เรามุ่งเน้นไปที่กรณีที่ไม่มีความสัมพันธ์กัน: มีวิธีแก้ปัญหาที่ดีที่สุดที่ไม่เหมือนใคร เครื่องจักรทั้งหมดจะถูกส่งต่อไปยังกรณีที่มี optima ที่ดีเท่า ๆ กันหลายตัวโดยไม่มีการเปลี่ยนแปลงพื้นฐาน แต่คุณต้องระวังให้มากขึ้นเกี่ยวกับรายละเอียดทางเทคนิค เริ่มต้นโดยไม่สนใจรายละเอียดเหล่านั้นและมุ่งเน้นไปที่กรณีที่ทางออกที่ดีที่สุดไม่เหมือนใคร ที่จะช่วยให้คุณจดจ่อกับสิ่งที่จำเป็น

มีรูปแบบการพิสูจน์ทั่วไปที่เราใช้ เราจะทำงานอย่างหนักเพื่อพิสูจน์คุณสมบัติของอัลกอริทึมดังต่อไปนี้:

การอ้างสิทธิ์:ให้เป็นเอาต์พุตโซลูชันด้วยอัลกอริธึมและOเป็นโซลูชันที่เหมาะสมที่สุด ถ้าSจะแตกต่างจากOแล้วเราสามารถปรับแต่งOที่จะได้รับการแก้ปัญหาอีกO *ที่แตกต่างจากOอย่างเคร่งครัดและดีกว่าOSOSOOOOO

สังเกตว่าทำไมสิ่งนี้ถึงมีประโยชน์ หากการอ้างสิทธิ์เป็นจริงจะเป็นไปตามขั้นตอนวิธีที่ถูกต้อง นี่เป็นข้อพิสูจน์โดยความขัดแย้ง ทั้งเป็นเช่นเดียวกับOหรือมันแตกต่างกัน ถ้ามันเป็นความแตกต่างกันแล้วเราสามารถหาวิธีอื่นO *ที่เคร่งครัดดีกว่าO - แต่ที่ขัดแย้งในขณะที่เรากำหนดOจะเป็นทางออกที่ดีที่สุดและมีไม่สามารถจะแก้ปัญหาใด ๆ ที่ดีกว่านั้น ดังนั้นเราจึงถูกบังคับให้สรุปว่าSไม่สามารถแตกต่างจากO ; Sต้องเท่ากับOเสมอSOOOOSOSOกล่าวคืออัลกอริทึมโลภมักจะแสดงผลลัพธ์ที่ถูกต้องเสมอ หากเราสามารถพิสูจน์การอ้างสิทธิ์ข้างต้นได้เราก็พิสูจน์แล้วว่าอัลกอริทึมของเราถูกต้อง

ละเอียด. ดังนั้นเราจะพิสูจน์ข้อเรียกร้องได้อย่างไร เราคิดว่าวิธีการแก้ปัญหาเป็นเวกเตอร์( S 1 , ... , S n )ซึ่งสอดคล้องกับลำดับของnทางเลือกที่ทำโดยอัลกอริทึมและในทำนองเดียวกันเราคิดว่าทางออกที่ดีที่สุดOเป็นเวกเตอร์( O 1 , ... , O n )ที่สอดคล้องกับลำดับของตัวเลือกที่จะนำไปสู่O ถ้าSจะแตกต่างจากOต้องมีดัชนีบางฉันที่S ฉันS(S1,,Sn)nO(O1,,On)OSOi ; เราจะมุ่งเน้นไปที่ดังกล่าวมีขนาดเล็กที่สุดฉัน จากนั้นเราจะปรับแต่ง Oโดยการเปลี่ยน Oเล็กน้อยในตำแหน่งที่ iเพื่อจับคู่ S iนั่นคือเราจะปรับแต่งโซลูชันที่ดีที่สุด Oโดยเปลี่ยนตัวเลือก i th เป็นตัวเลือกที่เลือกโดยอัลกอริทึมโลภแล้ว เราจะแสดงให้เห็นว่าสิ่งนี้นำไปสู่ทางออกที่ดียิ่งขึ้น โดยเฉพาะอย่างยิ่งเราจะนิยาม O ว่าเป็นสิ่งที่ต้องการSiOiiOOiSiOiO

O=(O1,O2,,Oi1,Si,Oi+1,Oi+2,,On),

ยกเว้นว่าบ่อยครั้งที่เราจะต้องแก้ไขส่วนเล็กน้อยเพื่อรักษาความสอดคล้องระดับโลก ส่วนหนึ่งของกลยุทธ์การพิสูจน์เกี่ยวข้องกับความฉลาดในการกำหนดO อย่างเหมาะสม จากนั้นเนื้อของการพิสูจน์จะใช้ข้อเท็จจริงเกี่ยวกับอัลกอริธึมและปัญหาเพื่อแสดงว่าO ดีกว่าOอย่างเคร่งครัดOi+1,Oi+2,,OnOOO; นั่นคือสิ่งที่คุณจะต้องมีข้อมูลเชิงลึกเฉพาะปัญหา ในบางจุดคุณจะต้องดำน้ำในรายละเอียดของปัญหาเฉพาะของคุณ แต่นี่ให้ความรู้สึกถึงโครงสร้างของการพิสูจน์ความถูกต้องทั่วไปสำหรับอัลกอริทึมโลภ

ตัวอย่างง่ายๆ: ชุดย่อยที่มีผลรวมสูงสุด

สิ่งนี้อาจจะง่ายต่อการเข้าใจโดยการทำงานผ่านตัวอย่างที่ละเอียด ลองพิจารณาปัญหาต่อไปนี้:

อินพุต:ชุดของจำนวนเต็ม, จำนวนเต็มkเอาต์พุต:ชุดS Uของขนาดkซึ่งผลรวมมีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้Uk
SUk

มีอัลกอริทึมโลภธรรมชาติสำหรับปัญหานี้:

  1. ชุดS:=
  2. สำหรับ : i:=1,2,,k
    • ให้เป็นจำนวนมากที่สุดในยูที่ไม่ได้รับเลือกเลย (เช่นฉัน TH จำนวนที่ใหญ่ที่สุดในU ) เพิ่มx ฉันจะSxiUiUxiS

การทดสอบแบบสุ่มแสดงให้เห็นว่านี่เป็นวิธีแก้ปัญหาที่ดีที่สุดเสมอดังนั้นเรามาพิสูจน์อย่างเป็นทางการว่า โปรดทราบว่าทางออกที่ดีที่สุดนั้นไม่เหมือนใครดังนั้นเราจึงไม่ต้องกังวลเกี่ยวกับความสัมพันธ์ เรามาพิสูจน์การอ้างสิทธิ์ที่กล่าวถึงข้างต้น:

การอ้างสิทธิ์:ให้เป็นเอาต์พุตโซลูชันด้วยอัลกอริธึมนี้ในอินพุตU , kและO ซึ่งเป็นโซลูชันที่เหมาะสมที่สุด ถ้าS Oแล้วเราสามารถสร้างวิธีอื่นO *ที่มีผลรวมแม้จะมีขนาดใหญ่กว่าOSU,kOSOOO

พิสูจน์ สมมติและปล่อยให้ฉันเป็นดัชนีของซ้ำแรกที่x ฉัน O (เช่นดัชนีฉันต้องมีอยู่เนื่องจากเราสันนิษฐานว่าS Oและตามคำจำกัดความของอัลกอริทึมที่เรามีS = { x 1 , , x k } ) เนื่องจาก (โดยสมมติฐาน) iมีน้อยเราต้องมีx 1 , , x i - 1O , และโดยเฉพาะSOixiOiSOS={x1,,xk}ix1,,xi1Oมีรูปแบบ O = { x 1 , x 2 , , x i - 1แสดงอยู่ในลำดับถัดลงมา ดูวิธีที่อัลกอริทึมเลือก x 1 , , x iO , โดยที่ตัวเลข x 1 , , x i - 1 , x i , , x nO={x1,x2,,xi1,xi,xi+1,,xn}x1,,xi1,xi,,xnx1,,xiเราจะเห็นว่าเราจะต้องมีสำหรับทุกJ ฉัน โดยเฉพาะอย่างยิ่งx ฉัน > x 'ฉัน ดังนั้นกำหนดO = O { x i } { x i }คือเราได้รับO โดยการลบหมายเลขi th ในOxi>xjjixi>xiO=O{xi}{xi}OiOและการเพิ่มฉัน ตอนนี้ผลรวมขององค์ประกอบของO *คือผลรวมขององค์ประกอบของOบวกx ฉัน - x ' ฉันและx ฉัน - x ' ฉัน > 0ดังนั้นO * 's ผลรวมเป็นอย่างเคร่งครัดขนาดใหญ่กว่าO ' s รวม สิ่งนี้พิสูจน์ข้อเรียกร้อง xiOOxixixixi>0O* * * *O

สัญชาตญาณที่นี่คือว่าหากอัลกอริทึมโลภทำให้ตัวเลือกที่ไม่สอดคล้องกับดังนั้นเราสามารถพิสูจน์Oได้ดียิ่งขึ้นหากมีการแก้ไขเพื่อรวมองค์ประกอบที่เลือกโดยอัลกอริทึมโลภในขั้นตอนนั้น เนื่องจากOดีที่สุดจึงไม่มีทางที่จะทำให้ดีขึ้นได้ (นั่นจะเป็นความขัดแย้ง) ดังนั้นความเป็นไปได้ที่เหลืออยู่เพียงอย่างเดียวคือข้อสันนิษฐานของเราผิด: กล่าวอีกนัยหนึ่งอัลกอริทึมโลภจะไม่เลือก ที่ไม่สอดคล้องกับOOOOO

เรื่องนี้มักจะถูกเรียกว่าอาร์กิวเมนต์แลกเปลี่ยนหรือแลกเปลี่ยนแทรก เราพบสถานที่แรกที่ทางออกที่ดีที่สุดแตกต่างจากโซลูชันโลภและเราจินตนาการว่าการแลกเปลี่ยนองค์ประกอบของสำหรับตัวเลือกโลภที่สอดคล้องกัน (แลกเปลี่ยนx iสำหรับx i ) การวิเคราะห์บางอย่างแสดงให้เห็นว่าการแลกเปลี่ยนนี้สามารถปรับปรุงวิธีการแก้ปัญหาที่ดีที่สุดเท่านั้น แต่ตามนิยามแล้วคำตอบที่ดีที่สุดไม่สามารถปรับปรุง ดังนั้นข้อสรุปเดียวคือจะต้องไม่มีสถานที่ใดที่ทางออกที่ดีที่สุดแตกต่างจากโซลูชันโลภ หากคุณมีปัญหาอื่นให้มองหาโอกาสที่จะใช้หลักการแลกเปลี่ยนนี้ในสถานการณ์เฉพาะของคุณOxผม'xผม


นี่เป็นคำถามเก่า แต่เป็นผลลัพธ์แรกใน Google สำหรับฉัน บรรทัดthen we can tweak O to get another solution O∗ that is different from O and strictly better than Oทำให้ฉันงง หากมีวิธีการแก้ปัญหาที่ดีที่สุดหลายอย่างเป็นไปได้ที่จะมีS != Oและทั้งสองยังคงดีที่สุด; เราสามารถปรับแต่ง O ให้เป็น "เหมือน" S (สร้าง O ∗) มากขึ้นและยังทำได้ดี (ไม่strictly better than) O.
citelao

@citelao ฉันขอโทษที่ได้ยินว่าคุณสับสน อนิจจาฉันไม่แน่ใจว่าจะอธิบายให้ชัดเจนยิ่งขึ้นได้อย่างไร ใช่อาจมีวิธีแก้ไขปัญหาที่ดีที่สุดหลายรายการด้วยมูลค่าเท่ากัน ถูกต้อง. สิ่งที่คุณเขียนและสิ่งที่ฉันเขียนนั้นใช้ได้ทั้งคู่ ไม่มีความขัดแย้ง ความแตกต่างคือสิ่งที่คุณเขียนไม่ได้ช่วยพิสูจน์ว่าขั้นตอนวิธีโลภถูกต้อง สิ่งที่ฉันเขียนทำ ฉันสามารถแนะนำให้ทำในสิ่งที่ฉันเขียนอีกครั้งเท่านั้นและดูว่าคุณสามารถเข้าใจได้อย่างไรว่าสิ่งที่ฉันเขียนนั้นมีประโยชน์หรือไม่ หากวิธีนี้ไม่ได้ผลอาจพบว่ามีบทความอื่น ฉันรู้ว่ามันยุ่งยากและสับสน
DW

1
ขอบคุณสำหรับการตอบสนองอย่างรวดเร็ว! a single, unique optimal solutionฉันพลาดจุดที่คุณมุ่งเน้นไปที่การพิสูจน์อัลกอริทึมหากมีเพียง เนื่องจากคำถามนี้เป็นเรื่องเกี่ยวกับการพิสูจน์ใด ๆธึมที่ถูกต้องผมอยากจะให้คำตอบสำหรับกรณีที่การแก้ปัญหาที่ดีที่สุดหลายคนสามารถที่มีอยู่ เป็นเวลานานแล้วที่ฉันได้ศึกษาทั้งหมดนี้ แต่ก็ไม่เพียงพอที่จะพิสูจน์ว่าคุณสามารถแลกเปลี่ยนแต่ละองค์ประกอบ O_i ในวิธีการแก้ปัญหาที่ดีที่สุด O ที่แตกต่างจาก alg solution S กับ S_i และยังมีทางออก O 'ที่ไม่เลวร้ายยิ่งกว่า O?
citelao

@citelao เทคนิคนี้ใช้กับกรณีที่มีวิธีแก้ไขปัญหาที่เหมาะสมหลายอย่าง ฉันแนะนำให้เน้นไปที่กรณีที่วิธีแก้ปัญหาที่ดีที่สุดนั้นไม่เหมือนใครเพราะครั้งแรกที่คุณเห็นสิ่งนี้มันง่ายกว่าที่จะเข้าใจว่าหลักฐานเหล่านี้ทำงานอย่างไรในการตั้งค่า แต่กลยุทธ์เดียวกันนี้ใช้งานได้แม้ว่าจะมีวิธีแก้ไขปัญหาที่ดีที่สุดหลายอย่างก็ตาม ฉันขอแนะนำให้ศึกษาสิ่งนี้ตรวจสอบให้แน่ใจว่าคุณเข้าใจวิธีการทำงานเมื่อมีวิธีแก้ปัญหาที่ดีที่สุดเพียงอย่างเดียวจากนั้นนำไปใช้กับกรณีทั่วไป นอกจากนี้ฉันคิดว่ามันอาจช่วยให้คุณศึกษาตัวอย่างพิสูจน์บางอย่างสำหรับอัลกอริทึมโลภ
DW

เพื่อตอบคำถามหลังของคุณไม่ใช่นั่นไม่เพียงพอ ไม่ได้พิสูจน์ว่า S นั้นดีที่สุด (หากคุณเพียงต้องการให้ O 'ไม่เลวร้ายยิ่งกว่า O มีกรณีที่ S เหมาะสมที่สุด แต่เป็นไปได้ที่จะทำการแลกเปลี่ยนแบบนั้นดังนั้นพิสูจน์ว่าเป็นไปได้ที่จะได้ O' ที่ไม่เลวร้ายยิ่งกว่า O ไม่ได้พิสูจน์อะไรเกี่ยวกับว่า S นั้นดีที่สุดและไม่ได้พิสูจน์อัลกอริทึมโลภที่ถูกต้องฉันขอแนะนำให้ศึกษาวิธีที่อธิบายไว้ในคำตอบอีกเล็กน้อยมันยุ่งยากการพิสูจน์โดยความขัดแย้งมักจะยากที่จะเข้าใจ)
DW

14

ฉันจะใช้อัลกอริทึมการเรียงลำดับแบบง่าย ๆ ต่อไปนี้เป็นตัวอย่าง:

repeat:
  if there are adjacent items in the wrong order:
     pick one such pair and swap
  else
     break

เพื่อพิสูจน์ความถูกต้องฉันใช้สองขั้นตอน

  • ครั้งแรกฉันแสดงให้เห็นว่าอัลกอริทึมมักจะยุติ
  • จากนั้นฉันก็แสดงให้เห็นว่าทางออกที่มันสิ้นสุดลงนั้นเป็นวิธีที่ฉันต้องการ

สำหรับจุดแรกฉันเลือกฟังก์ชั่นค่าใช้จ่ายที่เหมาะสมซึ่งฉันสามารถแสดงได้ว่าอัลกอริทึมนั้นปรับปรุงในทุกขั้นตอน

สำหรับตัวอย่างนี้ฉันเลือกจำนวนผู้รุกรานในรายการอินพุต ผกผันในรายการคือคู่ของรายการ[ ผม] , [ J ]เช่นว่า[ ผม] > [ J ]แต่ฉัน< J จำนวนการผกผันไม่ใช่การลบเสมอและรายการที่เรียงมี 0 การผกผันAA[ผม]A[J]A[ผม]>A[J]ผม<J

เห็นได้ชัดว่าการแลกเปลี่ยนสองรายการที่อยู่ติดกัน[ ผม] , [ ฉัน+ 1 ]ที่อยู่ในลำดับที่ไม่ถูกเอาผกผัน[ ผม] , [ ฉัน+ 1 ]แต่ใบผกผันอื่น ๆ ได้รับผลกระทบ ดังนั้นจำนวนผู้รุกรานจะลดลงในทุกรอบซ้ำA[ผม]A[ผม+1]A[ผม],A[ผม+1]

นี่เป็นการพิสูจน์ว่าอัลกอริทึมสิ้นสุดลงในที่สุด

จำนวนผู้รุกรานในรายการที่เรียงลำดับคือ 0 หากทุกอย่างไปได้ดีอัลกอริทึมจะลดจำนวนผู้รุกรานลงเหลือ 0 เราเพียง แต่ต้องแสดงว่ามันไม่ติดขัดในระดับต่ำสุดในท้องถิ่น

ฉันมักจะพิสูจน์เรื่องนี้ด้วยความขัดแย้ง ฉันคิดว่าอัลกอริทึมหยุดทำงาน แต่วิธีแก้ไขไม่ถูกต้อง ในตัวอย่างนี้หมายถึงรายการยังไม่ได้เรียง แต่ไม่มีรายการติดกันในลำดับที่ไม่ถูกต้อง

หากไม่มีการเรียงลำดับรายการจะต้องมีอย่างน้อยสองรายการที่ไม่ได้อยู่ในตำแหน่งที่ถูกต้อง ให้และA [ j ]A[ผม]A[J] , , A [ i ] > A [ j ]เป็นสองรายการดังกล่าวความแตกต่างระหว่างiและjนั้นน้อยที่สุด ตั้งแต่ขั้นตอนวิธีการก็ไม่ได้หยุดพวกเขาจะไม่อยู่ติดกันเพื่อให้ฉัน+ 1 < J เพราะเราคิดว่ามีค่าน้อยที่สุด A [ i ] < A [ผม<JA[ผม]>A[J]ผมJผม+1<Jและ A [ i + 1 ] < A [ j ]แต่หลังจากนั้น A [ i ] < A [ j ]และเรามีข้อขัดแย้งA[ผม]<A[ผม+1]A[ผม+1]<A[J]A[ผม]<A[J]

นี่เป็นการพิสูจน์ว่าอัลกอริทึมจะหยุดก็ต่อเมื่อมีการเรียงลำดับรายการ และด้วยเหตุนี้เราจึงเสร็จสิ้น


เทคนิคที่อธิบายนั้นเป็นเรื่องทั่วไปจนแทบไม่มีอะไรเป็นพิเศษเกี่ยวกับอัลกอริทึมโลภหัวข้อของคำถามนี้
Apass.Jack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.