การพูดว่า“ มีประสิทธิภาพมากกว่าแบบเชิงเส้นกำกับ” หมายความว่าอย่างไร


12

มันหมายความว่าอย่างไรเมื่อเราบอกว่าอัลกอริทึมเป็น asymptotically ประสิทธิภาพมากขึ้นกว่า ?XY

  • Xจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตทั้งหมด
  • Xจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตทั้งหมดยกเว้นอินพุตขนาดเล็ก
  • Xจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตทั้งหมดยกเว้นอินพุตขนาดใหญ่
  • Yจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตขนาดเล็ก

ลิงค์สำหรับคำถามนี้อยู่ที่นี่

http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/


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


การป้อนขนาดใหญ่จะทำให้คอขวดในอัลกอริทึม เป็นสิ่งที่ฉันจะใส่ในแง่วิศวกรรม
อภิวัฒน์จันทวิบูลย์

คำตอบ:


14

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

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

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

ถ้อยคำยังไม่ดีนัก ก่อนอื่นมีอีกหลายปัจจัยที่ตัดสินใจว่าอัลกอริธึมคือ "ทางเลือกที่ดีกว่า" แต่ฉันจะให้พวกเขาเห็นว่าเจตนาชัดเจนในกรณีนี้ ปัญหาที่แท้จริงคือ "เล็ก" และ "ใหญ่" หนึ่งในเอกสารที่ฉันโปรดปรานคืออัลกอริทึมที่เร็วที่สุดและสั้นที่สุดสำหรับปัญหาที่กำหนดไว้ทั้งหมด กระดาษนี้จะอธิบายขั้นตอนวิธีการที่ได้รับการใด ๆคุณสมบัติของฟังก์ชั่นและหลักฐานที่จะสามารถคำนวณได้ในเวลาพหุนามฟังก์ชั่นจะคำนวณว่าในที่ดีที่สุดเวลาซับซ้อนภายในปัจจัยของบวกระยะสารเติมแต่ง ตัวอย่างเช่นถ้าฉันให้การใช้งานการเรียงลำดับฟองเป็นข้อมูลจำเพาะของฟังก์ชันและหลักฐานง่าย ๆ ว่าเป็น5O(n2)ก็จะก่อให้เกิดการเรียงลำดับขั้นตอนวิธีการที่เป็นLG) ในความเป็นจริงมันจะสร้างอัลกอริธึมที่เป็นโดยที่คือปัจจัยคงที่ของอัลกอริธึมที่เหมาะสมที่สุดแบบอะซีพโททีที* มันอัศจรรย์มาก. มีเพียงปัญหาเดียว: คำคงที่ - ซ่อนอยู่ในO(nlgn)5cnlgn+o(nlgn)co(nlgn)ในตัวอย่างนี้ - ทำให้อัลกอริทึมเกือบจะเป็นไปไม่ได้อย่างสมบูรณ์สำหรับปัญหาจริงใด ๆ ฉันหมายถึงอะไรโดย "infeasible อย่างสมบูรณ์" ฉันหมายถึงความตายอันร้อนแรงของเอกภพจะเกิดขึ้นหลายครั้งก่อนที่อัลกอริธึมจะเสร็จสมบูรณ์ อย่างไรก็ตามสำหรับอินพุท "ใหญ่" ที่เหมาะสมจะเร็วกว่าการเรียงฟอง ประเด็นของฉันคือมันแทบจะเป็นไปไม่ได้เลยที่จะเขียนด้วยวิธีการใด ๆ ที่เป็นอินพุต "ที่มีขนาดใหญ่พอสมควร" ให้คำนวณเพียงอย่างเดียว

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

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


2

สิ่งที่ผู้คนมักจะหมายถึงเมื่อพวกเขาพูดอะไรเช่นนี้คือ:

ถ้า TA และ TB เป็นฟังก์ชั่นต้นทุนสองขั้นตอนของอัลกอริธึม A และ B ในรุ่น X ตามลำดับจากนั้น TAo(TB).

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

โดยเฉพาะอย่างยิ่งไม่มีข้อความใดที่คุณเสนอให้ติดตามแม้ว่าผู้คนมักจะแนะนำข้อความที่สอง

น่าเศร้าที่ชุมชนที่กว้างขึ้นของผู้คนที่เกี่ยวข้องกับอัลกอริธึมได้รวบรวมคำศัพท์ที่ล้อมรอบด้วยความว่างเปล่าเพื่อความเรียบง่าย (การสร้างข้อความที่แม่นยำและเป็นประโยชน์เกี่ยวกับอัลกอริทึมนั้นยาก!)

คุณอาจจะสนใจในคำถามการอ้างอิงของเรา


อัลกอริทึม X ถูกกล่าวว่าเป็น asymptotically ดีกว่า Y ถ้า X ใช้เวลาน้อยกว่า y สำหรับขนาดอินพุตทั้งหมด n ใหญ่กว่าค่า n0 โดยที่ n0> 0

โปรดสังเกตว่านี่ไม่ใช่คำจำกัดความปกติ! ถ้าTA(n)=n+1 และ TB(n)=nเราจะไม่บอกว่ามันเป็น "asymptotically better" เมื่อพิจารณาจากการวิเคราะห์ทั้งหมดที่ทำให้ประสิทธิภาพของอัลกอริทึมลดลงไปเป็นเลขตัวเดียวจึงไม่มีการอ้างว่าเป็น "ดี" กว่าที่อื่น ๆ

ฉันขอแนะนำให้คุณเรียนรู้วิทยาการคอมพิวเตอร์จากแหล่งข้อมูล CS ไม่ใช่จากโปรแกรมเมอร์ผู้อ่านสิ่งต่างๆบน Wikipedia เพียงครั้งเดียว (ใช่มันแย่มาก แต่ฉันเคยเห็นความเท็จมากเกินไปที่แพร่กระจายในแวดวงโปรแกรมเมอร์แม้แต่ใน SO)


2

"Asymptotically มีประสิทธิภาพมากขึ้น" หมายถึง "มีประสิทธิภาพมากขึ้นสำหรับปัญหาทั้งหมดที่มีขนาดใหญ่กว่า" ไม่ได้บอกว่า "ขนาดที่แน่นอน" คืออะไรและไม่ได้บอกว่าจะเกิดอะไรขึ้นก่อนหน้านั้น "ขนาดที่แน่นอน"

ดังนั้นคำตอบทั้งหมดยกเว้นคำตอบที่สองนั้นผิดเพราะ "Asymptotically มีประสิทธิภาพมากกว่า" ไม่ได้พูดอะไรเลยเกี่ยวกับขนาดอินพุตเล็ก ๆ เลย แต่อันที่สองก็เป็นปัญหาเช่นกัน

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

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

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