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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 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>
  
  
[[ไฟล์:Tree.png]]
+
[[Image:Tree.png]]

รุ่นแก้ไขเมื่อ 12:33, 1 กรกฎาคม 2553

บันทึกคำบรรยายวิชา 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


Tree.png