DAA - การวิเคราะห์อัลกอริทึม
ในการวิเคราะห์ทางทฤษฎีของอัลกอริทึมเป็นเรื่องปกติที่จะประเมินความซับซ้อนของมันในแง่ที่ไม่แสดงอาการกล่าวคือเพื่อประมาณฟังก์ชันความซับซ้อนสำหรับอินพุตขนาดใหญ่โดยพลการ ระยะ"analysis of algorithms" ได้รับการประกาศเกียรติคุณโดย Donald Knuth
การวิเคราะห์อัลกอริทึมเป็นส่วนสำคัญของทฤษฎีความซับซ้อนเชิงคำนวณซึ่งให้การประมาณเชิงทฤษฎีสำหรับทรัพยากรที่จำเป็นของอัลกอริทึมเพื่อแก้ปัญหาการคำนวณเฉพาะ อัลกอริทึมส่วนใหญ่ออกแบบมาเพื่อทำงานกับอินพุตที่มีความยาวโดยพลการ การวิเคราะห์อัลกอริทึมคือการกำหนดระยะเวลาและทรัพยากรพื้นที่ที่ต้องใช้ในการดำเนินการ
โดยปกติประสิทธิภาพหรือเวลาทำงานของอัลกอริทึมจะระบุเป็นฟังก์ชันที่เกี่ยวข้องกับความยาวอินพุตกับจำนวนขั้นตอนที่เรียกว่า time complexityหรือปริมาณหน่วยความจำที่เรียกว่า space complexity.
ความจำเป็นในการวิเคราะห์
ในบทนี้เราจะพูดถึงความจำเป็นในการวิเคราะห์อัลกอริทึมและวิธีการเลือกอัลกอริทึมที่ดีกว่าสำหรับปัญหาหนึ่ง ๆ เนื่องจากปัญหาการคำนวณหนึ่ง ๆ สามารถแก้ไขได้ด้วยอัลกอริทึมที่แตกต่างกัน
เมื่อพิจารณาอัลกอริทึมสำหรับปัญหาเฉพาะเราสามารถเริ่มพัฒนาการจดจำรูปแบบเพื่อให้สามารถแก้ไขปัญหาประเภทเดียวกันได้โดยใช้อัลกอริทึมนี้
อัลกอริทึมมักจะแตกต่างกันมากแม้ว่าวัตถุประสงค์ของอัลกอริทึมเหล่านี้จะเหมือนกันก็ตาม ตัวอย่างเช่นเราทราบว่าชุดของตัวเลขสามารถจัดเรียงได้โดยใช้อัลกอริทึมที่แตกต่างกัน จำนวนการเปรียบเทียบที่ดำเนินการโดยอัลกอริทึมหนึ่งอาจแตกต่างกันไปสำหรับอินพุตเดียวกัน ดังนั้นความซับซ้อนของเวลาของอัลกอริทึมเหล่านั้นอาจแตกต่างกัน ในเวลาเดียวกันเราต้องคำนวณพื้นที่หน่วยความจำที่ต้องการโดยแต่ละอัลกอริทึม
การวิเคราะห์อัลกอริทึมเป็นกระบวนการวิเคราะห์ความสามารถในการแก้ปัญหาของอัลกอริทึมในแง่ของเวลาและขนาดที่ต้องการ (ขนาดของหน่วยความจำสำหรับการจัดเก็บขณะใช้งาน) อย่างไรก็ตามข้อกังวลหลักของการวิเคราะห์อัลกอริทึมคือเวลาหรือประสิทธิภาพที่ต้องการ โดยทั่วไปเราทำการวิเคราะห์ประเภทต่อไปนี้ -
Worst-case - จำนวนก้าวสูงสุดที่ดำเนินการกับอินสแตนซ์ขนาดใดก็ได้ a.
Best-case - จำนวนขั้นต่ำที่ดำเนินการกับอินสแตนซ์ขนาดใดก็ได้ a.
Average case - จำนวนขั้นตอนโดยเฉลี่ยในอินสแตนซ์ขนาดใดก็ได้ a.
Amortized - ลำดับของการดำเนินการที่ใช้กับการป้อนขนาด a เฉลี่ยตามช่วงเวลา
ในการแก้ปัญหาเราจำเป็นต้องพิจารณาเวลาและความซับซ้อนของพื้นที่เนื่องจากโปรแกรมอาจทำงานบนระบบที่หน่วยความจำมี จำกัด แต่มีพื้นที่เพียงพอหรืออาจกลับกันได้ ในบริบทนี้ถ้าเราเปรียบเทียบbubble sort และ merge sort. การจัดเรียงบับเบิ้ลไม่จำเป็นต้องใช้หน่วยความจำเพิ่มเติม แต่การเรียงลำดับการผสานต้องใช้พื้นที่เพิ่มเติม แม้ว่าความซับซ้อนของเวลาในการเรียงลำดับฟองจะสูงกว่าเมื่อเทียบกับการเรียงลำดับการผสาน แต่เราอาจต้องใช้การเรียงลำดับฟองหากโปรแกรมจำเป็นต้องทำงานในสภาพแวดล้อมที่หน่วยความจำมี จำกัด มาก