39
บทที5 การวิเคราะห์อัลกอ ริทึม (Algorithm Analysis)

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

  • Upload
    tumetr

  • View
    517

  • Download
    0

Embed Size (px)

Citation preview

บทที่ 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)

• เราสามารถหาค่าคงตัวบวก C ที่ f(n) ≤ Cg(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

สังเกตว่า ขอบบน กับ ขอบล่าง เป ็นฟงัก ์ช ั่นเดยีวก ัน สัมประสิทธ์ิต่างกัน ความหมายของเตต้าคือ ใช้เวลา

ทำางาน = n

เตต ้าใหญ่ (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 คอื

1 แต่ในฟงัก์ชั่น t(n) คา่กำาลังของ n คือ0.98)

โอเมกา้เล ็ก (Little-omega : ω)

Little-omega คอืฟังก์ชั่นที่ไม ่แตะขอบล่าง

นั่นคือ ฟงัก์ชัน่นี้ ทำางานเร ็วท ี่สดุ > n

คอื ω(g(n)) คือเซตของฟังก ์ชนัท ี่โต เร ็วกว ่า g(n)

เปร ียบเท ียบ ล ักษณะของฟังก ์ช ั่นของแต่ละส ัญลักษณ์

ร ูป 2.2 สร ุปเช ิงเปร ียบเทยีบ ล ักษณะของฟงักช์ ั่นของแต่ละส ัญลักษณ์

≤ n

<n

≥ n

>n

การหาเทอมที่โตเร ็วท ี่ส ุดในฟังก ์ช ั่น

• คอื อ ัตราการเจร ิญเต ิบโตของ ฟังก ์ชนั ท ี่แทนประสทิธภิาพของอ ัลกอร ิ

ท ึม• ร ูปแบบของฟังก ์ช ัน่ท ี่มกัพบบอ่ยได้แก ่• exponential อยูใ่นร ูป an

• polynomial อยู่ในร ูป na (n ยกกำาล ังคา่คงที่) เชน่ n3

• Linear อยู่ในร ูป n• logarithmic อยูใ่นร ูป logan• ทั้ง 4 ร ูปแบบ จะมอี ัตราการเต ิบโตเร ียงจากมากไปหานอ้ย

• an > na > n > logan

อตัราการเจร ิญเต ิบโตของฟังกช์ ัน

0

10

20

30

40

50

60

70

1 2 3 4 5 6

n

2^n

n^2

log 2 n

2n

n2

nlog2n

ร ูป 2.3 กราฟแสดงการเต ิบโตของฟงัก ์ช ัน่

อัตราการเจร ิญเต ิบโตของฟังก ์ช ัน

อตัราการเต ิบโตของฟงัก ์ชนั

อตัราการเต ิบโตของฟงัก ์ชนั• ตามประสิทธิภาพของอัลกอริธมึจากมากสดุ(คือใช้

เวลาน้อยที่สดุ)

ไปหานอ้ยสุด• C > logN > Log2N > √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) จะใหป้ระส ิทธ ิภาพในระดับกลาง นั่นคือ อัตราการเติบโตของเวลาจะเป็นเส้น

ตรง เมื่ออินพทุมากข้ึน กจ็ะใช้เวลามากข้ึน ในสัดส่วนทีเ่ทา่ กัน แต่ O(n2) จะมอี ัตราการเต ิบโตของเวลาส ูงมาก

เม ือ่อ ินพทุมขีนาดใหญ่ข ึน้

จากตารางประส ิทธ ิภาพจะเร ียงล ำาดบัจากสูงไปหาตำ่า

ประส ิทธ ิภาพสงู

ต ำ่า

การว ิเคราะห ์ประส ิทธ ิภาพของอ ัลกอร ิท ึม

• เราสามารถวิเคราะห์ประสทิธิภาพได้จาก ปริมาณคำาสั่งที่ถูกใชง้านในโปรแกรม อาศัย

เครื่องหมายที่กล่าวมาข้างต้นเป็นตัวกำากับ โดย การนับคำาสั่งทั้งที่เป็นคำาสั่งมูลฐาน และคำาสั่ง

มาตรเวลา ซึ่งจะทำาให้ได้ฟังก์ชัน่ที่มีความ ละเอียดสูง จากนั้นจะคอ่ย ๆ ลดความซับซ้อนลง

โดยดูจากเทอมที่ใหญท่ ี่สดุของฟังก ์ช ัน่ ในกรณีท ี่ต ้องการกำาก ับด ้วย บ ิก๊ -โอ

Ө(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;

การว ิเคราะห ์ประส ิทธ ิภาพของอ ัลกอร ิท ึม

n4 + n2 + n

n4O(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)) = O O((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+3nlogn4. ให้ลำาดับอัตราการเตบิโตของฟงักช์นั

จากน้อยไปมาก•√N , N , logN , Log2N, N log N

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 ni = i + 1

Next iFor j = 1 To n

j = j + 1Next j

คำาคมสำาหรับวันนี้