ผลต่างระหว่างรุ่นของ "204512-53/lecture1"
Rtsp (คุย | มีส่วนร่วม) ล |
Jittat (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 8 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน) | |||
แถว 3: | แถว 3: | ||
Algorithm Lecture #1 | Algorithm Lecture #1 | ||
− | + | =Course Information= | |
รายละเอียดวิชาสามารถดูได้ที่ http://www.cpe.ku.ac.th/~jtf/wiki/doku.php?id=01204512-53 | รายละเอียดวิชาสามารถดูได้ที่ http://www.cpe.ku.ac.th/~jtf/wiki/doku.php?id=01204512-53 | ||
− | + | ==เกณฑ์การให้คะแนน== | |
* Homework 15% | * Homework 15% | ||
* Project 15% | * Project 15% | ||
แถว 35: | แถว 35: | ||
====ตัวอย่างปัญหาที่ 1==== | ====ตัวอย่างปัญหาที่ 1==== | ||
การจองอาเรย์ให้เหมาะสมกับขนาดข้อมูลที่บรรจุ โดยกำหนดให้มีขั้นตอน การทำงานดังนี้ | การจองอาเรย์ให้เหมาะสมกับขนาดข้อมูลที่บรรจุ โดยกำหนดให้มีขั้นตอน การทำงานดังนี้ | ||
+ | |||
# จองพื้นที่สำหรับใส่ของ | # จองพื้นที่สำหรับใส่ของ | ||
# นำของไปใส่จนเต็ม | # นำของไปใส่จนเต็ม | ||
# จองพื้นที่เพิ่มสำหรับใส่ของ | # จองพื้นที่เพิ่มสำหรับใส่ของ | ||
− | |||
− | + | =====กรณี 1: จองแบบเพิ่มทีละ 1 ที่===== | |
+ | |||
+ | [[Image:204512-53-01-malloc-table-1.png]] | ||
+ | |||
+ | จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า | ||
* การจองใช้เวลา 1 หน่วย | * การจองใช้เวลา 1 หน่วย | ||
* การคัดลอกต้องคัดลอก i - 1 ตัวดังนั้นใช้เวลา i - 1 หน่วย | * การคัดลอกต้องคัดลอก i - 1 ตัวดังนั้นใช้เวลา i - 1 หน่วย | ||
* การนำข้อมูลใหม่ไปใส่ใช้เวลาอีก 1 หน่วย | * การนำข้อมูลใหม่ไปใส่ใช้เวลาอีก 1 หน่วย | ||
− | จะเห็นได้ว่าในการสร้างอาเรย์เก็บข้อมูล n ตัวจะต้องใช้เวลาทั้งหมด 2+3+4+...+n+n+1 หน่วย | + | จะเห็นได้ว่าในการสร้างอาเรย์เก็บข้อมูล n ตัวจะต้องใช้เวลาทั้งหมด |
− | + | ||
+ | = <math>2 + 3 + 4 + ... + n + n + 1</math> หน่วย | ||
+ | = <math>2 + 3 + 4 + ... + n + n + 1</math> หน่วย | ||
+ | = <math>(1 + 2 + 3 + ... + n) + n</math> หน่วย | ||
+ | |||
+ | ดังนั้นการถ้ามีข้อมูล n ตัวจะได้ว่าต้องใช้ <math>\frac{n*(n+1) + n}{2}</math> หน่วย หรือ O(<math>n^2</math>) | ||
+ | |||
+ | =====กรณี 2: จองแบบเพิ่มทีละ 3 ที่===== | ||
+ | |||
+ | [[Image:204512-53-01-malloc-table-2.png]] | ||
+ | |||
+ | จากภาพการเก็บ สามารถวิเคราะห์ได้ว่าจะยังได้ผลลัพธ์ไม่ต่างจากเดิมมาก คือ O(<math>n^2</math>) โดย n ในที่นี้เทียบได้กับ <math>\frac{n}{3}</math> ของตัวอย่างบน มาจาก <math>n + 3*\frac{n*(n+1)}{2} + 3*n</math> ซึ่งมี factor 3 เพิ่มเข้ามา | ||
+ | |||
+ | =====กรณี 3: จองแบบเพิ่มทีละ <math>2^k</math> ที่===== | ||
+ | |||
+ | ต่อมามีคนเสนอว่าถ้าลองจองเป็นแบบ <math>2^k</math> โดยที่ k หมายถึงการจองครั้งที่ k และค่า k เริ่มต้นจาก 0 เพื่อเป็นการตัดปัญหา ว่ากรณ๊ถ้าจองไม่เต็มจะทำอย่างไร เราจึงสมมุติไปเลยว่าการจองที่ n นั้นจะต้องจอง <math>n = 2^k</math> โดย k นั้นคือเลขจำนวนเต็มใดๆที่มากกว่า 0 ซึ่งถ้า <math>n < 2^k</math> อาจหมายถึงการแถมเวลาให้เต็ม <math>n = 2^k</math> เลยก็ได้ | ||
+ | |||
+ | [[Image:204512-53-01-malloc-table-3.png]] | ||
+ | |||
+ | จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า | ||
+ | * จะได้ว่ามีการจองข้อมูลเกิดขึ้นทั้งหมด k ครั้ง | ||
+ | * มีการเขียนข้อมูล <math>n(2^{k})</math> ครั้ง | ||
+ | * มีการคัดลอกข้อมูล <math>1+2+4+8+...+2^{k-1} = (2^k)-1</math> (มองง่ายๆให้มองเป็นการบวกเลข binary) | ||
+ | |||
+ | ดังนั้นจะได้ k<math> + 2^{k} + 2^{k} -1 = O(n)</math> | ||
+ | |||
+ | ====ตัวอย่างปัญหาที่ 2==== | ||
+ | |||
+ | ในแต่ละ Network (เครือข่าย) ประกอบไปด้วยส่วนหลักๆ คือ Router, Client และ Routing table เราต้องการเรียนรู้การเชื่อมต่อของ Router แต่ละตัวเพื่อบันทึกใน Routing table การคิดวิธีการเพื่อแก้ปัญหา เราจะต้อง Assume (สมมติ) อย่างน้อยว่าการทำงานของระบบจะสำเร็จในสักวัน, ระบบมีความก้าวหน้า, ก้าวหน้ามากพอที่จะสำเร็จในช่วงเวลาที่รับได้ และสมมติฐานในปัจจัยอื่นๆ | ||
+ | |||
+ | การ ออกแบบ Routing table แบบ RIP | ||
+ | |||
+ | * Assume ว่า Router ทุกตัวทำการ Broadcast (กระจายสัญญาณไปหาทุกตัว) พร้อมกัน และ Router ทุกตัวรู้จักตัวเอง ในที่นี้ให้ค่าระยะของเส้นเชื่อม (edge) เท่ากับ 1 หน่วย | ||
+ | * RIP เป็นการหาเส้นเชื่อมระหว่าง Router เพื่อให้สื่อสารถึงกันได้ทั้งหมด โดยมีค่าระยะทางน้อยที่สุด | ||
+ | * ในการคิดครั้งนี้จะคิดโดยใช้ Router A เป็นโหนดตั้งต้น แล้วค้นหา Router ตัวอื่นที่อยู่รอบๆ | ||
+ | |||
+ | กำหนดให้ | ||
+ | |||
+ | * Set ของโหนด ทั้งหมด แทนด้วย V จะได้ว่า V = {A, B, C, ..., H} | ||
+ | * Set ของเส้นเชื่อม ทั้งหมด แทนด้วย E จะได้ว่า E = {(A,D), (A,B), (A,E), ..., (F,H)} | ||
+ | * Set ของโหนด ที่อยู่ในชั้น n (ติดต่อกับ A ด้วยระยะทาง n หน่วย) แทนด้วย Ln | ||
+ | |||
+ | จะได้ว่า | ||
+ | |||
+ | L0 = {A}, L1 = {v e V-L0 | มี node u ที่ u e L0 และ (u,v) e E} | ||
+ | |||
+ | ดังนั้นสำหรับค่า i ใดๆ ที่ i > 0, Li = {v e V - (ตั้งแต่ L0 จน Li - 1) | มี node u ที่ u e Li - 1 และ (u,v) e E} โดย กำหนดให้ L0={A} | ||
+ | |||
+ | ====ตัวอย่างปัญหาที่ 3==== | ||
+ | |||
+ | สำหรับลำดับจำนวนเต็ม i ใดๆ "P(i) ที่ <math>1+3+5+9+...+(2i-1) = i^2</math>" | ||
+ | |||
+ | การพิสูจน์โดยใช้วิธี Induction นั้นแบ่งเป็น 2 ส่วนคือ | ||
+ | |||
+ | # Basic step (Base case) ซึ่งเป็นจุดกำหนิดของตัวแรกของการคิด ส่วนใหญ่คือค่า 0 หรือ 1 โดยส่วนมากมักจะมีค่าจริงอยู่แล้ว | ||
+ | # Inductive step โดยจะสมมติให้ P(i) มีค่าเป็นจริง แล้วต้องพิสูจน์ให้ได้ว่า P(i + 1) นั้นมีค่าเป็นจริง | ||
+ | |||
+ | วิธีการแก้ปัญหาในตัวอย่างนี้ | ||
+ | |||
+ | =====Basic Step===== | ||
+ | |||
+ | <math>P(1) = 1 =1^2</math> มีค่าเป็นจริง | ||
+ | |||
+ | =====Inductive Step===== | ||
+ | |||
+ | ถ้าให้ P(i) ที่ <math>1+3+5+9+...+(2i-1) = i^2</math> เป็นจริงแล้ว ต้องพิสูจน์ว่า <math>P(i+1)</math> ที่ <math>1+3+5+9+...+(2(i+1)-1) = (i+1)^2</math> เป็นจริง | ||
+ | |||
+ | <math>P(i+1) = P(i) + (2(i+1) - 1) = P(i) + 2i + 1</math> | ||
+ | |||
+ | แทนค่า <math>P(i) = i^2</math> จะได้ <math>P(i+1) = i^2 + 2i + 1 = (i+1)^2</math> | ||
+ | |||
+ | แสดงว่า <math>P(i+1)</math> ที่ <math>1+3+5+9+...+(2(i+1)-1) = (i+1)^2</math> เป็นจริง | ||
+ | |||
+ | เพราะฉะนั้นพิสูจน์ ได้ว่า สำหรับลำดับจำนวนเต็ม i ใดๆ "P(i) ที่ <math>1+3+5+9+...+(2i-1) = i^2</math>" เป็นจริง โดยใช้วิธีพิสูจน์แบบ induction | ||
+ | |||
+ | [[Image:Tree.png]] | ||
+ | |||
+ | ====ตัวอย่างปัญหาที่ 4==== | ||
+ | |||
+ | ปัญหาการระบายสี Planar Graph ให้แต่ละเมืองแทนด้วยโหนด และเมืองที่มีอาณาเขตติดกันให้ลากเส้นเชื่อมติดต่อกัน | ||
+ | * ทฤษฎีบท 4 สี - สามารถระบายสีโดยใช้สีไม่เกิน 4 สีบน Planar Graph | ||
+ | * ทฤษฎีบท 5 สี - สามารถระบายสีโดยใช้สีไม่เกิน 5 สีบน Planar Graph | ||
+ | |||
+ | =====การพิสูจน์ทฤษฎีบท 5 สี===== | ||
+ | |||
+ | กำหนดให้ | ||
+ | |||
+ | * n แทนจำนวนโหนดในกราฟ | ||
+ | * m แทนจำนวนเส้นเชื่อมในกราฟ | ||
+ | * f แทนจำนวนหน้า (face) | ||
+ | * degree(v) แทนดีกรีของโหนด v (ดีกรีของโหนด = จำนวนเส้นเชื่อมที่เชื่อมกับโหนดอื่นๆ ไม่นับเส้นเชื่อมวกกลับเข้าหาตัวเอง) | ||
+ | |||
+ | จากความจริงที่ว่า E(v ∈ G) degree(v) = 2*m (ค่ารวมของค่าดีกรีของทุกโหนด จะเป็นสองเท่าของจำนวนเส้นเชื่อมทั้งหมดในกราฟ) | ||
− | + | * Assume: n-m+f = 2 | |
+ | * ลองให้ f = 3; <math>3 * f <= 2m</math>, <math>f <= \tfrac{2*m}{3}</math>, <math>n - m - 2 <= 2*m</math> |
รุ่นแก้ไขปัจจุบันเมื่อ 01:03, 21 มีนาคม 2555
บันทึกคำบรรยายวิชา 204512-53 นี้ เป็นบันทึกที่นิสิตเขียนขึ้น เนื้อหาโดยมากยังไม่ผ่านการตรวจสอบอย่างละเอียด การนำไปใช้ควรระมัดระวัง
จดบันทึกคำบรรยายโดย: (กรุณาใส่ด้วย) Algorithm Lecture #1
เนื้อหา
Course Information
รายละเอียดวิชาสามารถดูได้ที่ http://www.cpe.ku.ac.th/~jtf/wiki/doku.php?id=01204512-53
เกณฑ์การให้คะแนน
- Homework 15%
- Project 15%
- Scribe Note 5%
- Mid-Term 2 Times 20*2%
- Final 25%
Introduction to Algorithm
ทำไมเราต้องวิเคราะห์อัลกอริทึม
- เพื่อความถูกต้องของอัลกอริทึม - ต้องการความแน่ใจ
- เพื่อประสิทธิภาพของอัลกอริทึม
- เวลา (time)
- พื้นที่ (space)
- คุณภาพคำตอบ (quality)
เนื้อหาแต่ละบทที่จะสอน ตามลำดับ
- Data Structure
- Graph Algorithm
- Dynamic Programming
- Linear Programming
- Randomize Algorithm
Data Structure
ตัวอย่างปัญหาที่ 1
การจองอาเรย์ให้เหมาะสมกับขนาดข้อมูลที่บรรจุ โดยกำหนดให้มีขั้นตอน การทำงานดังนี้
- จองพื้นที่สำหรับใส่ของ
- นำของไปใส่จนเต็ม
- จองพื้นที่เพิ่มสำหรับใส่ของ
กรณี 1: จองแบบเพิ่มทีละ 1 ที่
จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า
- การจองใช้เวลา 1 หน่วย
- การคัดลอกต้องคัดลอก i - 1 ตัวดังนั้นใช้เวลา i - 1 หน่วย
- การนำข้อมูลใหม่ไปใส่ใช้เวลาอีก 1 หน่วย
จะเห็นได้ว่าในการสร้างอาเรย์เก็บข้อมูล n ตัวจะต้องใช้เวลาทั้งหมด
= หน่วย = หน่วย = หน่วย
ดังนั้นการถ้ามีข้อมูล n ตัวจะได้ว่าต้องใช้ หน่วย หรือ O()
กรณี 2: จองแบบเพิ่มทีละ 3 ที่
จากภาพการเก็บ สามารถวิเคราะห์ได้ว่าจะยังได้ผลลัพธ์ไม่ต่างจากเดิมมาก คือ O() โดย n ในที่นี้เทียบได้กับ ของตัวอย่างบน มาจาก ซึ่งมี factor 3 เพิ่มเข้ามา
กรณี 3: จองแบบเพิ่มทีละ ที่
ต่อมามีคนเสนอว่าถ้าลองจองเป็นแบบ โดยที่ k หมายถึงการจองครั้งที่ k และค่า k เริ่มต้นจาก 0 เพื่อเป็นการตัดปัญหา ว่ากรณ๊ถ้าจองไม่เต็มจะทำอย่างไร เราจึงสมมุติไปเลยว่าการจองที่ n นั้นจะต้องจอง โดย k นั้นคือเลขจำนวนเต็มใดๆที่มากกว่า 0 ซึ่งถ้า อาจหมายถึงการแถมเวลาให้เต็ม เลยก็ได้
จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า
- จะได้ว่ามีการจองข้อมูลเกิดขึ้นทั้งหมด k ครั้ง
- มีการเขียนข้อมูล ครั้ง
- มีการคัดลอกข้อมูล (มองง่ายๆให้มองเป็นการบวกเลข binary)
ดังนั้นจะได้ k
ตัวอย่างปัญหาที่ 2
ในแต่ละ Network (เครือข่าย) ประกอบไปด้วยส่วนหลักๆ คือ Router, Client และ Routing table เราต้องการเรียนรู้การเชื่อมต่อของ Router แต่ละตัวเพื่อบันทึกใน Routing table การคิดวิธีการเพื่อแก้ปัญหา เราจะต้อง Assume (สมมติ) อย่างน้อยว่าการทำงานของระบบจะสำเร็จในสักวัน, ระบบมีความก้าวหน้า, ก้าวหน้ามากพอที่จะสำเร็จในช่วงเวลาที่รับได้ และสมมติฐานในปัจจัยอื่นๆ
การ ออกแบบ Routing table แบบ RIP
- Assume ว่า Router ทุกตัวทำการ Broadcast (กระจายสัญญาณไปหาทุกตัว) พร้อมกัน และ Router ทุกตัวรู้จักตัวเอง ในที่นี้ให้ค่าระยะของเส้นเชื่อม (edge) เท่ากับ 1 หน่วย
- RIP เป็นการหาเส้นเชื่อมระหว่าง Router เพื่อให้สื่อสารถึงกันได้ทั้งหมด โดยมีค่าระยะทางน้อยที่สุด
- ในการคิดครั้งนี้จะคิดโดยใช้ Router A เป็นโหนดตั้งต้น แล้วค้นหา Router ตัวอื่นที่อยู่รอบๆ
กำหนดให้
- Set ของโหนด ทั้งหมด แทนด้วย V จะได้ว่า V = {A, B, C, ..., H}
- Set ของเส้นเชื่อม ทั้งหมด แทนด้วย E จะได้ว่า E = {(A,D), (A,B), (A,E), ..., (F,H)}
- Set ของโหนด ที่อยู่ในชั้น n (ติดต่อกับ A ด้วยระยะทาง n หน่วย) แทนด้วย Ln
จะได้ว่า
L0 = {A}, L1 = {v e V-L0 | มี node u ที่ u e L0 และ (u,v) e E}
ดังนั้นสำหรับค่า i ใดๆ ที่ i > 0, Li = {v e V - (ตั้งแต่ L0 จน Li - 1) | มี node u ที่ u e Li - 1 และ (u,v) e E} โดย กำหนดให้ L0={A}
ตัวอย่างปัญหาที่ 3
สำหรับลำดับจำนวนเต็ม i ใดๆ "P(i) ที่ "
การพิสูจน์โดยใช้วิธี Induction นั้นแบ่งเป็น 2 ส่วนคือ
- Basic step (Base case) ซึ่งเป็นจุดกำหนิดของตัวแรกของการคิด ส่วนใหญ่คือค่า 0 หรือ 1 โดยส่วนมากมักจะมีค่าจริงอยู่แล้ว
- Inductive step โดยจะสมมติให้ P(i) มีค่าเป็นจริง แล้วต้องพิสูจน์ให้ได้ว่า P(i + 1) นั้นมีค่าเป็นจริง
วิธีการแก้ปัญหาในตัวอย่างนี้
Basic Step
มีค่าเป็นจริง
Inductive Step
ถ้าให้ P(i) ที่ เป็นจริงแล้ว ต้องพิสูจน์ว่า ที่ เป็นจริง
แทนค่า จะได้
แสดงว่า ที่ เป็นจริง
เพราะฉะนั้นพิสูจน์ ได้ว่า สำหรับลำดับจำนวนเต็ม i ใดๆ "P(i) ที่ " เป็นจริง โดยใช้วิธีพิสูจน์แบบ induction
ตัวอย่างปัญหาที่ 4
ปัญหาการระบายสี Planar Graph ให้แต่ละเมืองแทนด้วยโหนด และเมืองที่มีอาณาเขตติดกันให้ลากเส้นเชื่อมติดต่อกัน
- ทฤษฎีบท 4 สี - สามารถระบายสีโดยใช้สีไม่เกิน 4 สีบน Planar Graph
- ทฤษฎีบท 5 สี - สามารถระบายสีโดยใช้สีไม่เกิน 5 สีบน Planar Graph
การพิสูจน์ทฤษฎีบท 5 สี
กำหนดให้
- n แทนจำนวนโหนดในกราฟ
- m แทนจำนวนเส้นเชื่อมในกราฟ
- f แทนจำนวนหน้า (face)
- degree(v) แทนดีกรีของโหนด v (ดีกรีของโหนด = จำนวนเส้นเชื่อมที่เชื่อมกับโหนดอื่นๆ ไม่นับเส้นเชื่อมวกกลับเข้าหาตัวเอง)
จากความจริงที่ว่า E(v ∈ G) degree(v) = 2*m (ค่ารวมของค่าดีกรีของทุกโหนด จะเป็นสองเท่าของจำนวนเส้นเชื่อมทั้งหมดในกราฟ)
- Assume: n-m+f = 2
- ลองให้ f = 3; , ,