มีวิธีสำหรับการวิเคราะห์อัลกอริธึมอัตโนมัติหรือไม่?


10

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

ฉัน googled "การวิเคราะห์อัลกอริทึมอัตโนมัติ" ซึ่งทำให้ผมนี้แต่มันเป็น Mathy เกินไป ฉันแค่ต้องการตัวอย่างง่ายๆใน psuedocode ที่ฉันเข้าใจ อาจจะเฉพาะเจาะจงเกินไป แต่ฉันคิดว่ามันคุ้มค่ากับการยิง


ฉันล้มเหลวที่จะเห็นว่าการเน้นระหว่าง "ใด ๆ " และ "การ" ทำให้ชัดเจนว่าคุณเป็นอย่างไร หากขั้นตอนการตัดสินใจบางอย่างผูกพันกับอัลกอริทึมเฉพาะ B ดังนั้นจะไม่มีการป้อนข้อมูลจริงและคำตอบนั้นเหมือนกันเสมอ ฉันคิดว่าสิ่งที่คุณต้องการถามคือถ้า 'อัลกอริทึมใด ๆ ภายในอัลกอริทึมบางคลาส' ซึ่งคลาสนั้นผูกพัน / รู้ (แก้ไข: นี่เป็นการชี้ให้เห็นความคิดเห็นของฉันด้วย)
Nicholas Mancuso

2
ความคลุมเครือในการใช้ "an" และ "any" ของคุณนั้นเป็นเหตุผลที่ว่าทำไมการประดิษฐ์ปริมาณจึงถูกคิดค้นขึ้น
Nate Eldredge

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

คำตอบ:


12

COSTAเครื่องมือที่ไม่เพียงแค่นี้แม้ว่าจะล้มเหลวในหลายกรณีที่คุณสามารถจินตนาการเนื่องจากปัญหาการคำนวณ มีเอกสารมากมายเกี่ยวกับเรื่องนี้ การวิเคราะห์ต้นทุนของ Java Bytecodeโดย E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini เป็นจุดเริ่มต้นที่ดี

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


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

12

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


2
คำถามของฉันไม่ได้เกี่ยวข้องกับอัลกอริทึมที่ป้อนเองซึ่งถ้าเป็นเช่นนั้นคำตอบของคุณจะถูกต้องเนื่องจากปัญหาการหยุดทำงาน คุณจะถูกต้องหากคำถามของฉันถูกใช้คำว่า: "มีอัลกอริทึม A ที่ใช้ในอัลกอริธึม B ใด ๆ หรือไม่แล้วจึงแสดงเวลาความซับซ้อนของอัลกอริธึม B"
Nathvi

6
หากอัลกอริทึม B ได้รับการแก้ไขแล้วให้แน่ใจว่ามีอัลกอริทึม A พอเพียงที่จะมีอัลกอริทึมที่ไม่ทำอะไรเลยนอกจากพิมพ์ "O (n)" หรือความซับซ้อนใด ๆ ที่สอดคล้องกับบีถ้ามีเพียงอินพุตที่เป็นไปได้ จากนั้นเราต้องการเพียงหนึ่งเอาต์พุต
mhum

5
@ Nathvi มันก็ไม่ชัดเจนสำหรับฉัน - ฉันยังเข้าใจคำถามว่า "มีอัลกอริทึมสำหรับการค้นหาความซับซ้อนของอัลกอริทึมอื่น ๆ " และฉันยังไม่เข้าใจคำถามจริงของคุณ หากคุณนับจำนวนผู้โหวตขึ้นอย่างเห็นได้ชัด> 2 คนตีความอย่างนั้น ในกรณีที่เกิดความสับสนเป็นความคิดที่ดีที่จะแก้ไขคำถามของคุณมิฉะนั้นเฉพาะคนที่อ่านบทสนทนานี้ (แทนที่จะเป็นทุกคนที่อ่านคำถาม) จะเข้าใจสิ่งที่คุณถามและให้คำตอบที่ดี ดูเหมือนว่าคุณรู้สึกว่าคำตอบของ DW นั้นไม่เป็นมิตร - FWIW ฉันไม่คิดว่ามันตั้งใจจะเป็น ..
jkff

6
@ignis คำตอบอาจไม่สมบูรณ์ แต่ประโยคที่ Yuval เขียนนั้นถูกต้องอย่างแน่นอน และปัญหาการหยุดชะงักไม่ใช่บางกรณีที่แปลกใหม่: มันเป็นสาระสำคัญของการคำนวณ
David Richerby

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

9

ฉันรู้ว่าวิธีการหนึ่งที่จะ (กึ่ง) การวิเคราะห์กรณีอัตโนมัติเฉลี่ยคือMaLiJAn ¹ มันคล้ายกับชนิดของการวิเคราะห์ที่ Knuth ใช้ใน TAoCP แนวคิดหลักคือการ

  • ทำโมเดลโปรแกรม (flow) เป็น Markov Chain
  • n
  • n
  • ใช้พีชคณิตคอมพิวเตอร์เพื่อหาค่าเฉลี่ย (wrt ฟังก์ชั่นเหล่านี้)

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

ทุกขั้นตอนยกเว้นการคาดการณ์มีความเข้มงวด [2] และวิธีการดังกล่าวได้รับการสาธิตเพื่อสร้างผลลัพธ์ที่มีชื่อเสียงซึ่งมีความแม่นยำสูง - แน่นอนว่าได้รับตัวอย่างอินพุตที่เหมาะสม ในขณะที่ไม่มีการพิสูจน์หรือแม้แต่การรับรองการประมาณผลลัพธ์ (ขั้นตอนการคาดการณ์คือจนถึงปัจจุบันการวิเคราะห์พฤติกรรม) ผลลัพธ์ที่ได้จากเครื่องมือนี้ให้บริการที่ดีในการทดสอบด้วยอัลกอริธึมที่ยากต่อการวิเคราะห์และกำหนดสมมติฐาน [3,4]


  1. การเปิดเผยอย่างสมบูรณ์: ฉันเป็นสมาชิกของกลุ่มวิจัยนี้และมีส่วนร่วมในการพัฒนาเครื่องมือ
  2. การวิเคราะห์ความน่าจะเป็นสูงสุดของอัลกอริทึมและโครงสร้างข้อมูลโดย U. Laube และ M. Nebel (2010) [ preprint ]
  3. Quicksort Dual Pivot ของ Engineering Java 7 ใช้ MaLiJAnโดย S. Wild et al (2012) [ preprint ]
  4. การวิเคราะห์ความน่าจะเป็นสูงสุดของวิธีฟอร์ด - ฟอล์กเกอร์สันบนกราฟพิเศษโดย U. Laube und M. Nebel (2015) [ preprint ]

เทคนิคเหล่านี้มาพร้อมกับการประเมินความแม่นยำของการวิเคราะห์กรณีโดยเฉลี่ยหรือไม่?
Martin Berger

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

นั่นดูน่าสนใจ. ฉันหวังว่าคุณจะได้ทำงานนี้เพิ่มเติม
Martin Berger

8

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

ฉันไม่มีความเชี่ยวชาญหรือมีความรู้อย่างมีนัยสำคัญในเรื่องนี้โดยฉันได้รู้จักงานบางอย่าง มันเกี่ยวข้องกับการวิเคราะห์ความซับซ้อนโดยเฉลี่ยโดยอัตโนมัติและงานนั้นทำโดย Philippe Flajolet และเพื่อนร่วมงานของเขา

λυ´ω

กระดาษหนึ่งที่ผมพบในเว็บเป็นกระดาษ 1990: การวิเคราะห์ค่าเฉลี่ยกรณีของกลไกอัตโนมัติโดยฟิลิปป์ที่ฟลาโจ เลต พอลซิมเมอบรูโน่ Salvy

ฉันคาดหวังว่าเอกสารในภายหลังจะขยายงานนี้ แต่ฉันไม่รู้จริงๆ งานนี้ได้รับการอ้างถึงค่อนข้างหนักและการค้นหาเว็บควรให้ผลงานล่าสุดในหัวข้อเดียวกัน

ตอนนี้ฉันกลัวว่างานของ Flajolet และเพื่อนร่วมงานของเขาเป็นคณิตศาสตร์อย่างมากและฉันจะไม่คาดหวังว่าจะอ่านง่ายมาก

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