การวิเคราะห์ประสิทธิภาพของอัลกอริธึม (Performance Analysis) Apirada Thadadech
Performance Analysis แบ่งออกเป็น 2 ส่วน วิเคราะห์หน่วยความจำที่ใช้ในการประมวลผล (Space Complexity) วิเคราะห์เวลาที่ใช้ในการประมวลผล (Time Complexity )
วิเคราะห์หน่วยความจำที่ใช้ในการประมวลผล (Space Complexity) ช่วยให้เราทราบว่า อัลกอริธึม นั้นๆสามารถรองรับข้อมูลที่ใช้ในการประมวลผลได้ใหญ่สุดขนาดไหน การประมวลผลบนระบบเครือข่าย หน่วยความจำ เป็นเรื่องสำคัญ พิจารณาสเป็กเครื่องที่ใช้ ประกอบกับ อัลกอริธึมของงาน
องค์ประกอบของ Space Complexity ประกอบด้วย 3 ส่วน Instruction Space: memory for compiler use Data Space: memory for Data each type, constant and variable Static memory Dynamic memory Environment Stack Space: Processing result memory and return back to next process.
Example for Space Complexity Swap between 2 values Procedure Swap (num1, num2 : integer); var temp : integer; Begin temp := num1; num1 := num2; num2 := temp; end
Function Factorial by recursive Function Factorial ( n : integer): integer; Begin If n = 0 then factorial := 1 Else Factorial := n * Factorial ( n -1) End;
วิเคราะห์เวลาที่ใช้ในการประมวลผล(Time Complexity ) สามารถประมาณเวลาที่ใช้ในการประมวลผลได้ เพิ่มประสิทธิภาพ จะได้พิจารณาเฉพาะส่วนที่ใช้ เวลาในการประมวลผล
องค์ประกอบของ Time Complexity เครื่องที่มีความเร็วสูง ขนาดของ Program code ขนาดของตัวแปร เวลาที่ใช้ Compile time Run time/execute time
Operation counts 1. Linear Loops การเพิ่มค่า ในลูปแบบคงที่ ทำให้ Time complexity มีค่า = จำนวนรอบของลูป นั้นคือ f(n) = nเช่น I = 1 loop ( I <= 2000) ….. I = I +1
Operation counts (cont.) 2. Logarithmic Loops: เป็นอัลกอริธึมที่มีการเพิ่ม ลดค่า ในลูปแบบเท่าตัว ทำให้ Time complexity มีค่า = จำนวนรอบของลูป นั้นคือ f(n) = [log2n] เช่น I = 1000 loop ( I >= 1) … I = I / 2 I = 1 loop ( I <= 2000) ... … I = I * 2
จำนวนรอบการประมวลผลของ Logarithmic Loop การคูณ การหาร รอบที่ ค่าของ i 1 2 3 4 5 6 7 8 9 10 End 16 32 64 128 256 512 1024 end 1000 500 250 125 62 31 15
Operation counts (cont.) 3. Nested Loops: เป็นอัลกอริธึมที่มี loop ซ้อนใน loop ทำให้ Time complexity มีค่า = จำนวนลูปทั้งหมดที่ต้องประมวลผล # รอบทั้งหมด = # loop ชั้นนอก x # loop ชั้นใน Linear Logarithmic Dependent Quadratic Quadratic I =1 Loop (I <= 20) j =1 loop ( j <= 10) another code j = j* 2 I = I + 1 Loop (I <= 10) k =1 loop ( k <= i) k = k + 1 loop ( k<= 10) k = k+ 1 F(n) = [nlog2n] F(n) = n((n+1)/2) F(n) = n2
สภาวะประสิทธิภาพของอัลกอริธึม Best-Case: อัลกอริธึมที่ใช้เวลาในการประมวลผลน้อยที่สุด Worst-Case: อัลกอริธึมที่ใช้เวลาในการประมวลผลมากที่สุด Average-Case: อัลกอริธึมที่ใช้เวลาในการประมวลผลเฉลี่ยมีค่าประมาณที่สามารถระบุได้