ݺߣ

ݺߣShare a Scribd company logo
บทที่ 5
การวิเคราะห์อัลกอ
ริทึม
(Algorithm
Analysis)
• การวิเคราะห์อัลกอริทึม มีเป้าหมายเพื่อหา
ประสิทธิภาพของอัลกอริทึม นั่นคือการประมาณ
ค่าทรัพยากรที่จำาเป็นต้องใช้ในการทำางาน เช่น
เวลา หรือ หน่วยความจำา อัลกอริทึมส่วนใหญ่ถูก
ออกแบบมาเพื่อให้สามารถรองรับจำานวนอินพุท
ได้ไม่จำากัด ปกติแล้วประสิทธิภาพ หรือความซับ
ซ้อนของอัลกอริทึมจะวัดจากความสัมพันธ์ของ
จำานวนอินพุทกับเวลาที่ใช้ในการทำางาน หรือ
พื้นที่หน่วยความจำาที่ใช้ (ในระยะหลังเรื่องของ
พื้นที่ไม่ถูกพิจารณามากนักเนื่องจากความ
ก้าวหน้าในการพัฒนาหน่วยความจำา)
• การออกแบบอัลกอริทึมเพื่อแก้ปัญหาใด ๆ
Asymptotic notationAsymptotic notation
เครื่องหมายที่ใช้อธิบายการเติบโตของฟัง
ก์ชั่น โดยในการวิเคราะห์อัลกอริทึมจะนำา
เครื่องหมายนี้มาใช้ในการระบุ
ประสิทธิภาพของอัลกอริทึม มีหลาย
สัญลักษณ์ ดังนี้
Big-O NotationBig-O Notation
• เครื่องหมาย บิ๊ก-โอ ใช้ในการระบุ
ทรัพยากรที่ใช้ในการทำางานของอัลกอริ
ทึมเมื่อขนาดของอินพุทเปลี่ยนไป
• ปกติแล้วทรัพยากรดังกล่าวจะหมายถึง
เวลา นั่นคือ ความสัมพันธ์ระหว่าง เวลา
กับ ขนาดของอินพุท
• อาจกล่าวง่าย ๆ ว่า หากอินพุทมีขนาดใด
ขนาดหนึ่ง เวลาที่ใช้ในการทำางานมาก
ที่สุด (upper bound) จะเป็นเท่าใด บิ๊ก-
โอ เป็นฟังก์ชั่นที่นิยมใช้มากที่สุดในการ
• ตัวอย่าง
• ความหมายของ O(n) คือ ฟังก์ชั่นนั้น ๆ ใช้
เวลาทำางานช้าที่สุด ≤ n
• เช่น อัลกอริทึม a1 มีประสิทธิภาพเป็น O(n2
)
ถ้า n = 10 แล้ว a1 จะใช้เวลาทำางานช้าที่สุด
100 หน่วยเวลา (รับประกันว่าไม่ช้าไปกว่านี้ -
แต่อาจจะเร็วกว่านี้ได้)
• เขียนได้ว่า f(n) є O(g(n)) เพื่อบอกว่า f(n) เป็น
ฟังก์ชันที่ไม่โตเร็วกว่า g(n)
•
Big-O NotationBig-O Notation
f(n) є O(g(n))
f(n) ≤(g(n))
Big-O NotationBig-O Notation
Big-O NotationBig-O Notation
โอเมก้าใหญ่ (Big-Omega
notation : Ω)
• โอเมก้าใหญ่ จะใช้สำาหรับบอกถึงเวลาที่ใช้
น้อยที่สุด(lower bound) เมื่ออัลกอริทึมนั้น
ๆ ทำางานกับอินพุทขนาดใดขนาดหนึ่ง
• ตัวอย่าง
• ความหมายของ Ω(n) คือ ฟังก์ชั่นนั้น ๆ ใช้
เวลาทำางานเร็วที่สุด ≥ n
• เช่น อัลกอริทึม a1 มีประสิทธิภาพเป็น Ω(n)
ถ้า n = 10 แล้ว a1 จะใช้เวลาทำางานเร็ว
ที่สุด 10 หน่วยเวลา (รับประกันว่าไม่เร็วไป
กว่านี้ - แต่อาจจะช้ากว่านี้ได้)
• เขียนได้ว่า f(n) є Ω(g(n)) เพื่อบอกว่า f(n)
เป็นฟังก์ชันที่ไม่โตไม่ช้ากว่า g(n)
• เราสามารถหาค่าคงตัวบวก C ที่ Cg(n) ≤
f(n)
โอเมก้าใหญ่ (Big-Omega
notation : Ω)
f(n) є Ω(g(n))
Cg(n) ≤ f(n)
โอเมก้าใหญ่ (Big-Omega
notation : Ω)
เตต้าใหญ่ (Big-Teta notation :
Ө)
• f(n) = Ө(g(n)) ก็ต่อเมื่อ f(n) = O(g(n)) และ
f(n) = Ω(g(n))
• นั่นคือขอบบนและขอบล่างเป็นฟังก์ชั่นเดียวกัน
เตต้าใหญ่ (Big-Teta notation :
Ө)
f(n) є Ө(g(n))
C1g(n) ≤ f(n) ≤ C2g(n)
รูป 2.1 ความสัมพันธ์ระหว่างเวลาที่ใช้ กับจำานวน
อินพุท ของฟังก์ชั่น 10n ฟังก์ชั่น 5n+4 และ 3n
สังเกตว่า ขอบบน กับ ขอบล่าง เป็นฟังก์ชั่นเดียวกัน
สัมประสิทธิ์ต่างกัน ความหมายของเตต้าคือ ใช้เวลา
เตต้าใหญ่ (Big-Teta notation :
Ө)
โอเล็ก (Little-o : o)
•Little-o คือฟังก์ชั่นที่ไม่แตะขอบบน นั่น
คือ ฟังก์ชั่นนี้ ทำางานช้าที่สุด < n
•คือ o(g(n)) คือเซตของฟังก์ชันที่โต
ช้ากว่า g(n)
•เช่น หากเรามี t(n) = n0.98 + 0.05√n
เราสามารถเขียนได้เป็น O(n) หรือ o(n)
• แต่หากระบุเป็น Little-o จะเน้นให้เห็น
ชัดว่าไม่ถึง n (เพราะค่ากำาลังของ n คือ
โอเมก้าเล็ก (Little-omega : ω)
Little-omega คือฟังก์ชั่นที่ไม่แตะขอบ
ล่าง
นั่นคือ ฟังก์ชั่นนี้ทำางานเร็วที่สุด > n
คือ ω(g(n)) คือเซตของฟังก์ชันที่โต
เร็วกว่า g(n)
เปรียบเทียบ ลักษณะของฟังก์ชั่
นของแต่ละสัญลักษณ์
2 สรุปเชิงเปรียบเทียบ ลักษณะของฟังก์ชั่นของแต่ละสัญล
≤ n
<n
≥ n
>n
การหาเทอมที่โตเร็วที่สุดในฟัง
ก์ชั่น
• คือ อัตราการเจริญเติบโตของ
ฟังก์ชัน ที่แทนประสิทธิภาพของอัลกอริ
ทึม
• รูปแบบของฟังก์ชั่นที่มักพบบ่อยได้แก่
• exponential อยู่ในรูป an
• polynomial อยู่ในรูป na
(n ยก
กำาลังค่าคงที่) เช่น n3
• Linear อยู่ในรูป n
• logarithmic อยู่ในรูป logan
• ทั้ง 4 รูปแบบ จะมีอัตราการเติบโตเรียง
จากมากไปหาน้อย
n a
อัตราการเจริญเติบโตของ
ฟังก์ชัน
0
10
20
30
40
50
60
70
1 2 3 4 5 6
n
2^n
n^2
log 2 n
2n
n2
n
log2n
รูป 2.3 กราฟแสดงการเติบโตของฟังก์ชั่น
อัตราการเจริญเติบโตของ
ฟังก์ชัน
อัตราการ๶ติบโตྺองฟังก์ชัน
อัตราการ๶ติบโตྺองฟังก์ชัน
• ตามประสิทธิภาพของอัลกอริธึมจากมากสุด(คือใช้
เวลาน้อยที่สุด)
ไปหาน้อยสุด
• C > logN > Log2
N > √N > N > N log N >
N2
> N3
…Nk
> 2n
, cn
> N!
อัตราการเจริญเติบโตของ
ฟังก์ชัน
•ตย1
•จงเรียงลำาดับฟังก์ชันต่อไปนี้ตาม
อัตราการเจริญเติบโต
•0.5n
, 1 , log n , n , 10n
•จะได้ว่า
•0.5n
< 1 < log n < n < 10n
•ตย 2
•จงเปรียบเทียบอัตราการเจริญ
เติบโตของ n10
, 2n
•จะได้ว่า
•n10
< 2n
อัตราการเจริญเติบโตของ
ฟังก์ชัน
ตาราง 2.1 เปรียบเทียบเวลาการ
ทำางานกับจำานวนอินพุท
พิจารณาตารางจะพบว่า O(1) เป็นฟังก์ชั่นที่ให้
ประสิทธิภาพดีที่สุด นั่นคือ เวลาที่ใช้ในการทำางานไม่ขึ้น
กับจำานวนอินพุท ในขณะที่ O(n) จะให้ประสิทธิภาพใน
ระดับกลาง นั่นคือ อัตราการเติบโตของเวลาจะเป็นเส้น
ตรง เมื่ออินพุทมากขึ้น ก็จะใช้เวลามากขึ้น ในสัดส่วนที่เท่า
2
ประสิทธิ
ภาพสูง
ตำ่า
การวิเคราะห์ประสิทธิภาพขอ
งอัลกอริทึม
• เราสามารถวิเคราะห์ประสิทธิภาพได้จาก
ปริมาณคำาสั่งที่ถูกใช้งานในโปรแกรม อาศัย
เครื่องหมายที่กล่าวมาข้างต้นเป็นตัวกำากับ โดย
การนับคำาสั่งทั้งที่เป็นคำาสั่งมูลฐาน และคำาสั่ง
มาตรเวลา ซึ่งจะทำาให้ได้ฟังก์ชั่นที่มีความ
ละเอียดสูง จากนั้นจะค่อย ๆ ลดความซับซ้อนลง
โดยดูจากเทอมที่ใหญ่ที่สุดของฟังก์ชั่น
ในกรณีที่ต้องการกำากับด้วย บิ๊ก-โอ
Ө(n2
)
Ө(n log n)
เวลาในการทำางานทั้งหมดถูก
กำาหนดโดยส่วนที่ 1 เพราะมัน
โตเร็วกว่า
การวิเคราะห์ประสิทธิภาพขอ
งอัลกอริทึม
f(n) = O(n)f(n) = O(n)
การวิเคราะห์ประสิทธิภาพขอ
งอัลกอริทึม
•ตย
•อัลกอริทึม 1
Sum := 0;
for I:=1 to n do
Sum := Sum+I;
f(n) = O(1)f(n) = O(1)
• ตย.
• อัลกอริทึม 3
Sum := (1+n)*n/2;
การวิเคราะห์ประสิทธิภาพขอ
งอัลกอริทึม
การวิเคราะห์อัลกอริทึม(algorithm analysis)
n4
+ n2
+ n
n4
O(f(n)) =O(f(n)) =
การหาค่า Big-Oh
• หาได้โดยนำา f(n) มากระทำาดังนี้
1. ตัดสัมประสิทธิ์ของแต่ละเทอมทิ้ง
2. เลือกเทอมที่ใหญ่สุดเก็บไว้เป็นคำาตอบ
• ตัวอย่างเช่น
f(n) = 3n4
+ 2n2
+ n
เมื่อพิจารณาจาก f(n) จะพบว่า
• อัลกอริทึม 1
f(n) = n
• อัลกอริทึม 2
f(n) = n-1
• อัลกอริทึม 3
f(n) = 1
ประสิทธิภาพประสิทธิภาพตำ่าสุดตำ่าสุด
ประสิทธิภาพประสิทธิภาพดีสุดดีสุด
การหาค่า Big-Oh
•ตย จงหาค่า Big-o ของ n3
+2n3
+10
• 1. ตัดสัมประสิทธิ์ของแต่ละเทอมทิ้ง
จะได้ n3
+n3
• 2. เลือกเทอมที่ใหญ่สุดเก็บไว้เป็นคำาตอบ
O(f(n)) =O(f(n)) = OO((n3
))
การหาค่า Big-Oh
• ตย จงหาค่า Big-o ของ 100
•F(n) = 100
• O(f(n)) =O(f(n)) = O(O(1)1)
• ตย จงหาค่า Big-o ของ 100N+1
•F(n) = 100N+1
• O(f(n)) =O(f(n)) = O(O(N)N)
การหาค่า Big-Oh
• ตย จงหาค่า Big-o ของ
20nlogn+5n = O(nlogn)
•F(n) = 20nlogn+5n
•F(n) = nlogn+n
• O(f(n)) =O(f(n)) = = O(nlogn)
• สมมติให้แต่ละโปรแกรมใช้เวลาในการทำางาน
เป็นดังนี้
• prg1 = 3n2
+2n
• prg2 = 2log2n+6n+n
• prg3 = n+nlog2n+4n+9
• จงแสดง Big-O ของแต่ละโปรแกรมพร้อมทั้ง
เรียงลำาดับประสิทธิภาพของโปรแกรมจากดีสุด
ไปหาช้าสุด
• 2Log2n < nlog2n < 3n2
• จะได้ 1. prg2 2. prg3 3.prg1
การวิเคราะห์ประสิทธิภาพขอ
งอัลกอริทึม
แบบฝึกหัด
1. ให้ลำาดับอัตราการเติบโตของ
ฟังก์ชันจากน้อยไปมาก
•n log n, n3
, 2n
, n, n!, log n,
100, n2
2.จงหาค่า Big-o ของ
12nlogn+0.05n2
3. จงหาค่า Big-o ของ n1/2
+3nlogn
4. ให้ลำาดับอัตราการ๶ติบโตྺองฟังก์ชัน
5. จงวิเคราะห์ประสิทธิภาพของอัลกอริทึม
ดังต่อไปนี้
for (j=1; j<n;j++){
sum = sum + j;
print sum;
}
for (i=1; i<n;i++){
for (j=1; j<n;j++){
sum = sum + j;
}
print sum;
}
6. จงวิเคราะห์ประสิทธิภาพของอัลกอริทึม
ดังต่อไปนี้
For i = 1 To n
i = i + 1
Next i
For j = 1 To n
j = j + 1
Next j
คำาคมสำาหรับวัȨี้

More Related Content

การวิเคราะห์อัลกอริทึม(algorithm analysis)