รากฐานทางทฤษฎีของการแบ่งแยกและการพิชิต


22

เมื่อพูดถึงการออกแบบอัลกอริธึมมักใช้เทคนิคต่อไปนี้:

  • การเขียนโปรแกรมแบบไดนามิก
  • กลยุทธ์โลภ
  • แบ่งและพิชิต

ในขณะที่วิธีการสองวิธีแรกมีรากฐานทางทฤษฎีที่รู้จักกันดีคือหลักการของ Bellman Optimality และ matroid (resp. greedoid) ทฤษฎีฉันไม่สามารถหากรอบทั่วไปสำหรับอัลกอริธึมตาม D&C

ประการแรกฉันตระหนักถึงบางสิ่งบางอย่างที่เรา (หรือมากกว่าผู้เชี่ยวชาญ) ที่แนะนำในคลาสการเขียนโปรแกรมใช้งานได้เรียกว่า "โครงกระดูกอัลกอริทึม" ที่เกิดขึ้นในบริบทของ combinators ตัวอย่างของที่นี่เราให้โครงกระดูกดังกล่าวสำหรับอัลกอริธึม D&C ดังนี้:

คำนิยาม : ปล่อยให้เป็นเซตที่ไม่ว่างเปล่า เราเรียกองค์ประกอบของโซลูชั่นและองค์ประกอบของ (นั่นคือส่วนย่อยของ) จะเรียกว่าเป็นปัญหา จากนั้นD & C- โครงกระดูกคือ tuple 4โดยที่:SA,SS AP:=P(A)A(Pβ,β,D,C)

  • Pβเป็นกริยามากกว่าชุดของปัญหาและเราบอกว่าปัญหาที่เกิดขึ้นเป็นพื้นฐาน IFFถือpPβ(p)
  • βเป็นการแมปที่กำหนดวิธีแก้ปัญหาสำหรับปัญหาพื้นฐานแต่ละข้อPβS
  • Dคือการแมป ที่แบ่งแต่ละปัญหาออกเป็นชุดย่อยของปัญหาPP(P)
  • Cคือการทำแผนที่ที่เข้าร่วมการแก้ปัญหา (ขึ้นอยู่กับชนิดของ "ปัญหาการหมุน") ของปัญหาย่อยเพื่อสร้างทางออกP×P(S)S

จากนั้นสำหรับโครงกระดูกและปัญหาฟังก์ชันทั่วไปต่อไปนี้คำนวณวิธีแก้ปัญหา (ในรูปแบบเป็นทางการ ความรู้สึก) สำหรับ :p f s : P S ps=(Pβ,β,D,C)pfs:PSp

fs(p)={β(p)if p is basicC(p,f(D(p)))otherwise

ที่ในบรรทัดที่สองเราจะใช้สัญกรณ์สำหรับย่อยของโคโดเมนของการทำแผนที่ฉX ff(X):={f(x):xX}Xf

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

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

คำตอบ:


5

การรักษาอย่างเป็นทางการ (ค่อนข้างคล้ายกับแบบจำลองที่เสนอในคำถาม) ของเรื่องโดยใช้สิ่งที่เรียกว่าหลอก - มอร์ฟิซึ่มส์ (นั่นคือฟังก์ชั่นที่เกือบจะ morphisms ด้วยก่อนและหลังการคำนวณเสร็จ) เช่นเดียวกับการพิจารณาความซับซ้อน การวิเคราะห์และการใช้อัลกอริธึมแบบขนานนั้นมีให้ใน:

แบบจำลองเชิงพีชคณิตสำหรับการหารและพิชิตและความเท่าเทียมโดย Zhijing G. Mou และ Paul Hudak (ในสมุดบันทึกของ Supercomputing , เล่มที่ 2, ฉบับที่ 3, 257-278, พฤศจิกายน 1988)


1

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

ยกตัวอย่างเช่น เริ่มจากอินพุต, อาร์เรย์ขององค์ประกอบหนึ่งสามารถกำหนดโครงสร้างของอาร์เรย์ซ้ำดังนี้:n

  • สำหรับอาร์เรย์จะว่างเปล่าn=0
  • สำหรับอาร์เรย์เป็นองค์ประกอบเดี่ยวn=1
  • สำหรับอาร์เรย์คือการต่อเชื่อมของอาร์เรย์ขนาด ( ซ้าย ) และขนาด ( ขวา )nn>1nn2n2

จากนั้นเราจะเข้าใกล้อัลกอริทึม mergesort ด้วยแล้วการทำแผนที่การจัดเรียงโครงสร้างนี้ เคสพื้นฐานโดยที่ถูกเรียงลำดับเล็กน้อย กรณี recursive เริ่มต้นด้วยซ้ำการเรียงลำดับข้อมูลที่เป็น recursiveคือซ้ายและขวา จากนั้นเราก็พบว่ามีการแทนที่concatenateซึ่งจะเป็นการรวมเข้าด้วยกัน ดังนั้นขอให้สังเกตว่าโดยทั่วไปเราเพิ่งนำโครงสร้างแบบเรียกซ้ำของข้อมูลและแมปนั้นไปยังโซลูชันแบบเรียกซ้ำ n1

สิ่งสำคัญคือต้องทราบว่าสิ่งนี้ไม่ได้นำไปสู่สิ่งที่คุณคาดหวังจากอัลกอริทึม D&C เราสามารถกำหนดโครงสร้างอาร์เรย์ดังนี้

  • สำหรับอาร์เรย์จะว่างเปล่าn=0
  • สำหรับอาร์เรย์เป็นองค์ประกอบเดียวตัดแบ่งไปยังอาร์เรย์ของขนาดn-1 n - 1n>0n1

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

ขณะนี้มีทฤษฎีบทหลักสำหรับการวิเคราะห์อัลกอริธึม D&C และสิ่งนี้แสดงให้เห็นถึงความคาดหวังด้านประสิทธิภาพสำหรับส่วนประกอบย่อยของอัลกอริทึม D&C ด้วยประสิทธิภาพโดยรวมที่เฉพาะเจาะจง


ตัวอย่างที่คุณให้เข้ากับบริบททั่วไปที่ฉันให้ไว้ในคำถามของฉัน (และในความเป็นจริงมันอาจเป็นประโยชน์ที่คุณจะให้ใบสมัครที่เป็นรูปธรรม) อย่างไรก็ตามคำถามของฉันคือว่ามีเกณฑ์ (เช่น BOP หรือโครงสร้าง matroid) สำหรับปัญหาที่จะแก้ไขได้โดยอัลกอริทึมที่เหมาะสมกับรูปแบบนี้
แบรนด์คอร์นีเลียส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.