มีอัลกอริธึมอื่น ๆ ที่ใช้เวลาตัวพิมพ์แย่ที่สุดในขณะที่มันใช้งานได้ดีในการฝึกอื่น ๆ มากกว่าอัลกอริทึม Simplex หรือไม่?


9

โดยทั่วไปเราเรียกอัลกอริทึม "อัลกอริทึมที่ดี" ถ้าถึงเวลาที่เหลือคือพหุนามในกรณีที่เลวร้ายที่สุด แต่ในบางกรณี (ตัวอย่างเช่นอัลกอริทึม Simplex) แม้ว่ากรณีที่เลวร้ายที่สุดของอัลกอริทึมนั้นจะเป็นแบบเอ็กซ์โปเนนเชียลมันอาจทำงานได้ดีในทางปฏิบัติ

มีตัวอย่าง (กำหนดขึ้น) สำหรับสถานการณ์นี้นอกเหนือจากอัลกอริธึม Simplex หรือไม่?


1
คุณอาจสนใจคำถามที่เกี่ยวข้อง: cstheory.stackexchange.com/questions/305/…
Radu GRIGore

คำตอบ:


13

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


13

อัลกอริทึม -means สำหรับการจัดกลุ่มเป็นสรรพสิ่งที่ชี้แจงแม้จะอยู่ในระนาบ แต่มันได้ผลดีมากในทางปฏิบัติk


13

การอนุมานแบบ Hindley-Milner นั้นสมบูรณ์แบบ EXPTIME แต่ในโปรแกรมที่คนทั่วไปเขียนมันค่อนข้างใกล้เคียงกับเชิงเส้น


1
มันไม่ได้แตกต่างไปจากนี้หรือ? ความทรงจำของฉันคือการที่เราสามารถกำหนดเงื่อนไขที่จำเป็นสำหรับ Hindley-Milner ที่มีประสิทธิภาพไม่ดี (การใช้งานแบบซ้อนกันอย่างลึก) และดังนั้นเหตุผล HM ที่ดีในทางปฏิบัติคือการทำรังนี้ในทางปฏิบัติมีขอบเขตที่ค่อนข้างต่ำ ลึกเข้าไปในการผูกให้และรู้สึกกังวลในขณะที่เรามุ่งหน้าไปยังขอบขวาสุดของหน้าจอ ... ) ได้รับฉันได้ทำการเรียกร้องจากหน่วยความจำก่อนหน้านี้และเมื่อเร็ว ๆ นี้ฉันไม่สามารถกู้คืนการอ้างอิงได้
Rob Simmons

2
ไม่นั่นไม่ใช่เงื่อนไขที่จำเป็น คุณสามารถให้ลำดับของการโยง (โดยไม่มีการซ้อน!) เพื่อให้มันยกกำลังสองขนาดของประเภทที่อนุมานพร้อมกับแต่ละรายการเพิ่มเติมในลำดับ ดูcstheory.stackexchange.com/questions/2428/…สำหรับตัวอย่าง
Neel Krishnaswami

ตัวอย่างอยู่ใน SML และฉันคุ้นเคยกับวิธีของ OCaml มากขึ้นในการทำสิ่งต่าง ๆ แต่ถ้าลำดับการผูกนั้นเป็น "ปล่อย" ฉันก็คิดว่ามันจะซ้อนกัน มันเป็นเพียงเพราะพวกเขากำหนดฟังก์ชั่นระดับโลกที่พวกเขาไม่ได้ แต่มีการทำรังโดยปริยายที่เกิดขึ้นที่นี่: คำจำกัดความที่กำหนดมีการเข้าถึงคำจำกัดความทั้งหมดข้างต้นมันและไม่มีใครด้านล่าง
amnn

1
@amnn การทำรังเรียกว่าได้รับการช่วยให้การทำรังในรูปแบบที่ถูกผูกไว้ - กล่าวคือเมื่อเทียบกับกว่าlet z = (let y = e in e') in e'' let y = e in let z = e' in e''
Neel Krishnaswami

9

เบรนแดนแม็คเคย์nauty (ไม่มี automorphisms ใช่?) โปรแกรมแก้ปัญหาการติดฉลากที่ยอมรับของกราฟ (พร้อมกันแก้ปัญหากราฟมอร์ฟและกราฟ automorphism) และมีการชี้แจงผลการดำเนินงานที่เลวร้ายที่สุด (มิยาซากิ, 1996) อย่างไรก็ตามมันทำงานได้อย่างรวดเร็วสำหรับกราฟส่วนใหญ่

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


ฉันคิดว่า nauty ยังใช้การสุ่มเพื่อช่วยในการปรับแต่ง? ในกรณีนี้สิ่งนี้อาจคล้ายคลึงกับอัลกอริทึมแบบซิมเพล็กซ์ (แม้ว่าจะไม่มีความคิดที่ชัดเจนว่าการวิเคราะห์ที่ราบรื่นสำหรับกราฟมอร์ฟิซึม)
Joshua Grochow

1
มันไม่ได้ใช้การสุ่มเนื่องจากมันจำเป็นต้องสร้างฉลากตามมาตรฐาน อย่างไรก็ตามสามารถใช้ขั้นตอนที่ไม่เปลี่ยนแปลงจุดสุดยอดที่สร้างขึ้นเองเพื่อช่วยในการแบ่งจุดยอด บางครั้งค่าคงที่นี้ดูสุ่มว่าผลิตอย่างไร (บ่อยครั้งมันเป็นฟังก์ชันที่ซับซ้อนในลำดับระยะทาง) แต่นั่นก็เพื่อลดการชน
Derrick Stolee

1
จุดสุดยอดคงที่นี้สามารถนำมาเปรียบเทียบกับกฎการต่อต้านการขี่จักรยานของอัลกอริทึมง่าย ๆ
Derrick Stolee

4

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


1

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


คุณหมายถึงอัลกอริธึม Lemke-Howson หรือไม่?
ราหุลซาวานี

1

ช่องเก็บของ (หลายรูปแบบ) เป็นปัญหาที่มีความซับซ้อนเป็นที่รู้จักกันในชื่อ - ยาก:

http://en.wikipedia.org/wiki/Bin_packing_problem

อย่างไรก็ตามฮิวริสติกจำนวนมากเมื่อนำไปใช้กับเวอร์ชัน "เชิงปฏิบัติ" ทำได้ดีมาก สำหรับช่องเก็บข้อมูลแบบ 1 มิติที่บรรจุฮิวริสติกเหล่านี้ไว้เช่นแรกพอดี ลดลงแบบแรกพอดี; ที่ดีที่สุดพอดี; การลดความเหมาะสมที่สุดนั้นเป็นเรื่องที่น่าสนใจเป็นอย่างมากในการแสดงให้นักเรียนเห็น นักเรียนมักจะสามารถค้นพบฮิวริสติกขั้นพื้นฐานสำหรับตนเอง


มีตัวอย่างมากมายแม้ว่าปัญหาคือ NP-Complete algortihms ง่าย ๆ สามารถจัดการกับมันได้โดยเฉพาะอย่างยิ่งกับอัลกอริทึมโดยประมาณ แต่จริง ๆ แล้วฉันกำลังมองหาอัลกอริธึมแบบเอ็กซ์โปเนนเชียลไทม์ตัวอย่างของคุณเกี่ยวข้องกับปัญหาที่ยากซึ่งแก้ได้ง่ายด้วยอัลกอริธึมแบบง่าย อาจมีอัลกอริธึมเวลาเอ็กซ์โพเนนเชียลในการแก้ปัญหาการบรรจุในช่องเก็บ (หรือปัญหาอื่น ๆ ) อย่างแน่นอน และในทางปฏิบัติมันต้องใช้เวลาพหุนาม
Arman

0

อัลกอริธึมการคงอยู่ (ต้นกำเนิดจาก Edelsbrunner-Letscher-Zomorodian มีการเปลี่ยนแปลงมากมายตั้งแต่) เป็นกรณีที่เลวร้ายที่สุดลูกบาศก์ แต่ดูเหมือนว่าจากการทดลองที่จะทำงานในเวลาเชิงเส้น

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