เวลาที่คาดหวังและเวลาเฉลี่ยของอัลกอริทึมหมายถึงอะไร


17

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

"เวลาที่คาดหวัง" คืออะไร ในกรณีใดบ้างที่มีประโยชน์ในการค้นหาเวลาที่คาดหวังแทนเวลาที่เลวร้ายที่สุด?

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


1
สันนิษฐานว่าพวกเขาหมายถึงกรณีเฉลี่ย ..
Martijn Pieters

4
คาดว่าค่าตัวของฟังก์ชันการแจกแจงความน่าจะเป็นคำอธิบายที่เป็นหนึ่งของ x * f (x) จากเชิงลบจะไม่มีที่สิ้นสุดในเชิงบวก เวลาที่คาดหวังจะได้รับโดยการพิจารณาการกระจายความน่าจะเป็นของเวลาที่เป็นไปได้ทั้งหมดแล้วรับค่าที่คาดหวัง การดำเนินการนี้เป็นที่รู้จักกันทั่วไปว่าเป็นการคำนวณค่าเฉลี่ยหรือการคำนวณค่าเฉลี่ย
Joel Cornett

1
@JoelCornett: นั่นจะทำให้คำตอบที่ดีถ้าคุณโพสต์มัน ..
Martijn Pieters

@MartijnPieters: ไม่กรณีโดยเฉลี่ยทำให้สมมติฐานเกี่ยวกับการแจกแจงความน่าจะเป็นของอินพุทกรณีที่คาดหวังไม่ได้
Jörg W Mittag

@ JörgWMittag: ใช่ถ้าคุณรู้ว่าการแจกแจงความน่าจะเป็นโลกแห่งความเป็นจริงของอินพุตของคุณคุณสามารถเพิกเฉยกับค่าเฉลี่ยกรณี กล่าวอีกอย่างคือกรณีที่คาดหวังคือเวลาที่อัลกอริทึมของคุณให้การกระจายความน่าจะเป็นของชุดอินพุตที่คาดหวัง
Martijn Pieters

คำตอบ:


15

เวลาที่คาดว่าจะเป็นเพียงเฉลี่ยคาดว่าเวลาการทำงานของอัลกอริทึมโดยใช้จุดมุ่งหมายการป้อนข้อมูล

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

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

บางทีอาจจะเป็นตัวอย่างที่ดีที่จะเป็นขั้นตอนวิธี quicksort คลาสสิกซึ่งมีกรณีที่แย่ที่สุดเวลาการทำงานของ O (n²) แต่คาดว่าเวลาทำงานเฉลี่ย O (n log n) โดยไม่คำนึงถึงการป้อนข้อมูล นี่เป็นเพราะอัลกอริทึมที่ใช้ (หรือค่อนข้างอาจใช้ขึ้นอยู่กับการใช้งาน) การสุ่ม ดังนั้นจึงเป็นสิ่งที่เรียกว่าอัลกอริทึมแบบสุ่ม มันทำงานแตกต่างกันเล็กน้อยกับการเรียกใช้ทุกครั้งแม้จะมีอินพุตเดียวกัน. ดังนั้นอินพุทที่ไม่เป็นกรณีที่เลวร้ายที่สุดของสากลสำหรับการนำไปใช้เนื่องจากอินพุทกรณีที่แย่ที่สุดนั้นขึ้นอยู่กับวิธีที่อัลกอริทึมเลือก pivot เพื่อแบ่งอินพุทที่กำหนด และด้วยเหตุนี้จึงไม่มีใครสามารถจัดหาอินพุตที่กำหนดไว้ล่วงหน้าบางอย่างทำให้เวลาใช้งานกรณีที่เลวร้ายที่สุด นี่เป็นกรณีที่เกิดขึ้นกับอัลกอริธึมแบบสุ่มซึ่งมีจุดมุ่งหมายสำหรับเวลาที่คาดว่าจะดีขึ้นโดยเฉลี่ยโดยไม่คำนึงถึงอินพุต

มันคือทั้งหมดที่เกี่ยวกับการใช้อัลกอริทึมที่เหมาะสมสำหรับอินพุตในมือ


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

4

เวลาทำงานที่คาดหวังของอัลกอริทึมแบบสุ่มเป็นแนวคิดที่ดีเช่นเดียวกับเวลาทำงานที่เลวร้ายที่สุด หากอัลกอริทึมถูกสุ่มเวลาทำงานก็จะสุ่มซึ่งหมายความว่าเราสามารถกำหนดค่าที่คาดหวังของเวลาทำงาน

ตัวอย่างที่รู้จักกันดีคือ Quicksort: ถ้าเราเลือก pivots โดยการสุ่มเราสามารถพิสูจน์ได้ว่าเวลาทำงานที่คาดว่าจะกลายเป็น O (n log n) แม้ว่าเวลาที่เลวร้ายที่สุดของการรันยังคงเป็น O (n ^ 2) ตัวอย่างที่การสุ่มมีประสิทธิภาพมากคือปัญหาวงกลมล้อมรอบที่เล็กที่สุด: มีอัลกอริทึมแบบง่ายซึ่งเวลาทำงานที่แย่ที่สุดคือ O (n ^ 3) แต่ในความคาดหมายเวลาทำงานของมันคือ O (n) เท่านั้น

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

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

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

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