ผลต่างระหว่างรุ่นของ "204512-53/lecture1"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 7 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน)
แถว 3: แถว 3:
 
Algorithm Lecture #1
 
Algorithm Lecture #1
  
==Course Information==
+
=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%
แถว 39: แถว 39:
 
# นำของไปใส่จนเต็ม
 
# นำของไปใส่จนเต็ม
 
# จองพื้นที่เพิ่มสำหรับใส่ของ
 
# จองพื้นที่เพิ่มสำหรับใส่ของ
# ลองวิเคราะห์การจองที่ใส่ของเพิ่มที่ละ 1 ที่
 
  
จากภาพการเก็บวิเคราะห์ได้ว่า การเก็บข้อมูลตัวที่ i
+
=====กรณี 1: จองแบบเพิ่มทีละ 1 ที่=====
  
 +
[[Image:204512-53-01-malloc-table-1.png]]
 +
 +
จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า
 
* การจองใช้เวลา 1 หน่วย
 
* การจองใช้เวลา 1 หน่วย
 
* การคัดลอกต้องคัดลอก i - 1 ตัวดังนั้นใช้เวลา i - 1 หน่วย
 
* การคัดลอกต้องคัดลอก i - 1 ตัวดังนั้นใช้เวลา i - 1 หน่วย
แถว 53: แถว 55:
 
  = <math>(1 + 2 + 3 + ... + n) + n</math> หน่วย
 
  = <math>(1 + 2 + 3 + ... + n) + n</math> หน่วย
  
ดังนั้นการถ้ามีข้อมูล n ตัวจะได้ว่าต้องใช้  <math>\tfrac{n*(n+1) + n}{2}</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 &isin; G) degree(v) = 2*m (ค่ารวมของค่าดีกรีของทุกโหนด จะเป็นสองเท่าของจำนวนเส้นเชื่อมทั้งหมดในกราฟ)
  
[[ไฟล์:Tree.png]]
+
* 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)

เนื้อหาแต่ละบทที่จะสอน ตามลำดับ

  1. Data Structure
  2. Graph Algorithm
  3. Dynamic Programming
  4. Linear Programming
  5. Randomize Algorithm

Data Structure

ตัวอย่างปัญหาที่ 1

การจองอาเรย์ให้เหมาะสมกับขนาดข้อมูลที่บรรจุ โดยกำหนดให้มีขั้นตอน การทำงานดังนี้

  1. จองพื้นที่สำหรับใส่ของ
  2. นำของไปใส่จนเต็ม
  3. จองพื้นที่เพิ่มสำหรับใส่ของ
กรณี 1: จองแบบเพิ่มทีละ 1 ที่

204512-53-01-malloc-table-1.png

จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า

  • การจองใช้เวลา 1 หน่วย
  • การคัดลอกต้องคัดลอก i - 1 ตัวดังนั้นใช้เวลา i - 1 หน่วย
  • การนำข้อมูลใหม่ไปใส่ใช้เวลาอีก 1 หน่วย

จะเห็นได้ว่าในการสร้างอาเรย์เก็บข้อมูล n ตัวจะต้องใช้เวลาทั้งหมด

=  หน่วย
=  หน่วย
=  หน่วย

ดังนั้นการถ้ามีข้อมูล n ตัวจะได้ว่าต้องใช้ หน่วย หรือ O()

กรณี 2: จองแบบเพิ่มทีละ 3 ที่

204512-53-01-malloc-table-2.png

จากภาพการเก็บ สามารถวิเคราะห์ได้ว่าจะยังได้ผลลัพธ์ไม่ต่างจากเดิมมาก คือ O() โดย n ในที่นี้เทียบได้กับ ของตัวอย่างบน มาจาก ซึ่งมี factor 3 เพิ่มเข้ามา

กรณี 3: จองแบบเพิ่มทีละ ที่

ต่อมามีคนเสนอว่าถ้าลองจองเป็นแบบ โดยที่ k หมายถึงการจองครั้งที่ k และค่า k เริ่มต้นจาก 0 เพื่อเป็นการตัดปัญหา ว่ากรณ๊ถ้าจองไม่เต็มจะทำอย่างไร เราจึงสมมุติไปเลยว่าการจองที่ n นั้นจะต้องจอง โดย k นั้นคือเลขจำนวนเต็มใดๆที่มากกว่า 0 ซึ่งถ้า อาจหมายถึงการแถมเวลาให้เต็ม เลยก็ได้

204512-53-01-malloc-table-3.png

จากภาพการเก็บ สามารถวิเคราะห์ได้ว่า

  • จะได้ว่ามีการจองข้อมูลเกิดขึ้นทั้งหมด 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 ส่วนคือ

  1. Basic step (Base case) ซึ่งเป็นจุดกำหนิดของตัวแรกของการคิด ส่วนใหญ่คือค่า 0 หรือ 1 โดยส่วนมากมักจะมีค่าจริงอยู่แล้ว
  2. Inductive step โดยจะสมมติให้ P(i) มีค่าเป็นจริง แล้วต้องพิสูจน์ให้ได้ว่า P(i + 1) นั้นมีค่าเป็นจริง

วิธีการแก้ปัญหาในตัวอย่างนี้

Basic Step

มีค่าเป็นจริง

Inductive Step

ถ้าให้ P(i) ที่ เป็นจริงแล้ว ต้องพิสูจน์ว่า ที่ เป็นจริง

แทนค่า จะได้

แสดงว่า ที่ เป็นจริง

เพราะฉะนั้นพิสูจน์ ได้ว่า สำหรับลำดับจำนวนเต็ม i ใดๆ "P(i) ที่ " เป็นจริง โดยใช้วิธีพิสูจน์แบบ induction

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; , ,