ที่นี่จากการวิเคราะห์เชิงเส้นกำกับฉันถือว่าเราหมายถึงพฤติกรรมของอัลกอริทึมเมื่อขนาดของอินพุตเข้าสู่อนันต์
เหตุผลที่เราใช้การวิเคราะห์เชิงเป็นเพราะ
มันเป็นประโยชน์ในการทำนายพฤติกรรมของขั้นตอนวิธีการในทางปฏิบัติ การคาดการณ์ทำให้เราสามารถตัดสินใจเช่นเมื่อเรามีอัลกอริทึมที่แตกต่างกันสำหรับปัญหาที่เราควรใช้ (การมีประโยชน์ไม่ได้หมายความว่าถูกต้องเสมอ)
คำถามเดียวกันสามารถถามเกี่ยวกับรูปแบบที่เรียบง่ายของโลกแห่งความจริง ทำไมเราถึงใช้แบบจำลองทางคณิตศาสตร์ที่ง่ายขึ้นของโลกแห่งความจริง?
คิดถึงฟิสิกส์ ฟิสิกส์ของนิวตันคลาสสิกนั้นไม่ดีเท่ากับฟิสิกส์เชิงสัมพัทธภาพในการทำนายโลกแห่งความจริง แต่มันก็เป็นแบบอย่างที่ดีพอสำหรับการสร้างรถยนต์ตึกสูงระฟ้าเรือดำน้ำเครื่องบินสะพาน ฯลฯ มีบางกรณีที่มันไม่ดีพอเช่นถ้าเราต้องการสร้างดาวเทียมหรือส่งยานสำรวจอวกาศไปยังพลูโตหรือทำนายการเคลื่อนที่ วัตถุท้องฟ้าขนาดใหญ่เช่นดาวและดาวเคราะห์หรือวัตถุความเร็วสูงเช่นอิเล็กตรอน
สิ่งสำคัญคือต้องรู้ว่าข้อ จำกัด ของแบบจำลองคืออะไร
โดยทั่วไปแล้วจะเป็นการประมาณที่ดีพอสำหรับโลกแห่งความเป็นจริง
ในทางปฏิบัติเรามักจะเห็นว่าอัลกอริทึมที่มีการวิเคราะห์เชิงซีมโทติคที่ดีกว่าทำงานได้ดีกว่าในทางปฏิบัติ มันเป็นกรณีที่อัลกอริทึมมีพฤติกรรม asymptotic ที่ดีกว่าดังนั้นถ้าอินพุตมีขนาดใหญ่พอเรามักจะสามารถพึ่งพาการวิเคราะห์เชิง asymptotic เป็นคำทำนายแรกของพฤติกรรมอัลกอริทึม ไม่ใช่ถ้าเรารู้ว่าอินพุตจะเล็ก ขึ้นอยู่กับประสิทธิภาพที่เราต้องการเราอาจต้องทำการวิเคราะห์อย่างระมัดระวังมากขึ้นเช่นหากเรามีข้อมูลเกี่ยวกับการกระจายของอินพุตอัลกอริทึมจะได้รับเราสามารถทำการวิเคราะห์อย่างระมัดระวังมากขึ้นเพื่อให้บรรลุเป้าหมายที่เรามี (เช่นรวดเร็ว 99 % ของอินพุต) ประเด็นก็คือการวิเคราะห์เชิงซีมโทติคขั้นตอนแรกเป็นจุดเริ่มต้นที่ดี ในทางปฏิบัติเราควรทำการทดสอบประสิทธิภาพ แต่จำไว้ว่ายังมีปัญหาของตัวเอง
มันค่อนข้างง่ายที่จะคำนวณในทางปฏิบัติ
โดยทั่วไปแล้วเราสามารถคำนวณอย่างน้อยขอบเขตที่ดีเกี่ยวกับความซับซ้อนเชิงซีเอ็นเอ็นของอัลกอริทึม เพื่อความง่ายสมมติว่าเรามีอัลกอริทึมที่มีประสิทธิภาพสูงกว่าอัลกอริธึมอื่น ๆ ในทุกอินพุต วิธีที่เราสามารถรู้จะดีกว่าคนอื่น ๆ ? เราสามารถทำวิเคราะห์ asymptotic และเห็นว่าA AAAAมีความซับซ้อนเชิงซีมที่ดีขึ้น ไม่มีสิ่งใดที่ดีไปกว่าสิ่งอื่นในทุกอินพุต จากนั้นจะยุ่งยากมากขึ้นและขึ้นอยู่กับสิ่งที่เราใส่ใจ เราสนใจเกี่ยวกับอินพุตขนาดใหญ่หรืออินพุตเล็กหรือไม่? หากเราสนใจอินพุตที่มีขนาดใหญ่ดังนั้นจึงไม่ใช่เรื่องธรรมดาที่อัลกอริทึมนั้นมีความซับซ้อนเชิงซีมโทติคที่ดีกว่า หากเราสนใจข้อมูลเพิ่มเติมเกี่ยวกับปัจจัยการผลิตเล็กน้อยการวิเคราะห์เชิงชีวติอาจไม่เป็นประโยชน์ เราควรเปรียบเทียบเวลาทำงานของอัลกอริทึมในอินพุตที่เราสนใจ ในทางปฏิบัติสำหรับงานที่ซับซ้อนที่มีความต้องการที่ซับซ้อนการวิเคราะห์เชิงซ้อนอาจไม่เป็นประโยชน์ สำหรับปัญหาพื้นฐานง่ายๆที่ตำราอัลกอริทึมครอบคลุมมันค่อนข้างมีประโยชน์
ในความซับซ้อนเชิง asymptotic สั้น ๆ นั้นค่อนข้างง่ายในการคำนวณความซับซ้อนของอัลกอริทึมจริงสำหรับงานพื้นฐานง่าย ๆ (ปัญหาในตำราเรียนอัลกอริทึม) เมื่อเราสร้างโปรแกรมที่ซับซ้อนมากขึ้นความต้องการด้านประสิทธิภาพก็เปลี่ยนไปและมีความซับซ้อนมากขึ้นและการวิเคราะห์เชิงซ้อนอาจไม่เป็นประโยชน์
เป็นการดีที่จะเปรียบเทียบการวิเคราะห์เชิงเปรียบเทียบกับวิธีการอื่นในการทำนายประสิทธิภาพของอัลกอริทึมและเปรียบเทียบกับมัน วิธีการหนึ่งที่พบบ่อยคือการทดสอบประสิทธิภาพกับอินพุตแบบสุ่มหรือเกณฑ์มาตรฐาน เป็นเรื่องปกติเมื่อคำนวณความซับซ้อนเชิงซีมโทติคนั้นยากหรือไม่สามารถทำได้เช่นเมื่อเราใช้การวิเคราะห์พฤติกรรมในการแก้ SAT อีกกรณีหนึ่งคือเมื่อข้อกำหนดมีความซับซ้อนมากขึ้นเช่นเมื่อประสิทธิภาพของโปรแกรมขึ้นอยู่กับปัจจัยภายนอกและเป้าหมายของเราอาจมีบางสิ่งบางอย่างที่เสร็จสิ้นภายใต้การ จำกัด เวลาคงที่ (เช่นคิดเกี่ยวกับการอัปเดตอินเทอร์เฟซที่แสดงต่อผู้ใช้) ปัจจัยการผลิต
แต่โปรดทราบว่าการวิเคราะห์ประสิทธิภาพยังมีปัญหาอยู่ มันไม่ได้ให้ผู้รับการคำนวณทางคณิตศาสตร์เกี่ยวกับประสิทธิภาพที่น้อยกว่าที่เราเรียกใช้การทดสอบประสิทธิภาพในอินพุตทั้งหมดที่จะได้รับกับอัลกอริทึม (มักจะคำนวณ infeasbile) (และบ่อยครั้งที่มันเป็นไปไม่ได้ที่จะตัดสินอินพุตบางส่วน ถ้าเราทดสอบกับกลุ่มตัวอย่างแบบสุ่มหรือมาตรฐานที่เรากำลังปริยายสมมติบางระเบียบ
เกี่ยวกับประสิทธิภาพของอัลกอริทึมคือขั้นตอนวิธีการจะดำเนินการในทำนองเดียวกันในปัจจัยการผลิตอื่น ๆ ที่ไม่ได้เป็นส่วนหนึ่งของการทดสอบประสิทธิภาพ
ปัญหาที่สองของการทดสอบประสิทธิภาพคือขึ้นอยู่กับสภาพแวดล้อมการทดสอบ เช่นประสิทธิภาพของโปรแกรมไม่ได้พิจารณาจากอินพุตเพียงอย่างเดียว แต่ปัจจัยภายนอก (เช่นประเภทเครื่อง, ระบบปฏิบัติการ, ประสิทธิภาพของอัลกอริธึมการเข้ารหัส, การใช้ประโยชน์จาก CPU, เวลาในการเข้าถึงหน่วยความจำและอื่น ๆ ) ซึ่งบางอย่างอาจแตกต่างกัน การทดสอบบนเครื่องเดียวกัน อีกครั้งที่นี่เราสมมติว่าสภาพแวดล้อมเฉพาะที่การทดสอบประสิทธิภาพดำเนินการคล้ายกับสภาพแวดล้อมจริงยกเว้นว่าเราทำการทดสอบประสิทธิภาพในทุกสภาพแวดล้อมที่เราอาจเรียกใช้โปรแกรมบน (และเราจะทำนายได้อย่างไรว่าเครื่องที่ใครบางคนอาจเรียกใช้การเรียงลำดับ ขั้นตอนวิธีใน 10 ปี?)
เปรียบเทียบสิ่งเหล่านี้กับการคำนวณเวลาการทำงานของ asymptotic ของ MergeSort ( ) และเปรียบเทียบกับเวลาในการพูดของ SelectionSort ( ) หรือ BinarySerch ) พร้อม LinearSearch ( )Θ ( n 2 ) Θ ( lg n ) O ( n )Θ(nlgn)Θ(n2)Θ(lgn)O(n)