(Data Structure) CSI2202 โครงสร้างข้อมูล
คําอธิบายรายวิชา โครงสร้างข้อมูลพื้นฐานและขั้นตอนวิธีที่เกี่ยวข้อง ได้แก่ อาเรย์(Array) สแตก (Stack) และคิว (Queue) ลิงค์ลิสต์ (Link List)กราฟ (Graph) และทรี (Tree) วิธีการจัดเรียง วิธีการค้นหา
การวัดและการประเมินผล100 % การวัดผล เก็บคะแนนระหว่างภาค 60% คะแนนสอบกลางภาค 30% คะแนนงานภาคปฏิบัติ 20% เข้าเรียน 10% สอบปลายภาค 40%
ความรู้ทั่วไปเกี่ยวกับโครงสร้างข้อมูล และอัลกอริทึม ความรู้ทั่วไปเกี่ยวกับโครงสร้างข้อมูล และอัลกอริทึม
วัตถุประสงค์ เพื่อให้ทราบความหมายของโครงสร้างข้อมูล และอัลกอริทึม เพื่อให้ทราบถึงประเภทของโครงสร้างข้อมูล เพื่อทราบถึงลำดับขั้นตอนการประมวลผลข้อมูล เพื่อให้ทราบความหมายของผังงาน และสัญลักษณ์ต่างๆ
หัวข้อการเรียน ความหมายของโครงสร้างข้อมูล ประเภทของโครงสร้างข้อมูล ขั้นตอนวิธีหรืออัลกอริทึม ผังงาน
ความหมายของข้อมูล ข้อมูล (data) หมายถึง ความจริงซึ่งสามารถ บันทึกไว้ได้ และมีความหมายอยู่ในตัว
เลขฐาน 2 เลขฐาน 2 หรือ Binary Number System เป็นข้อมูลที่ใช้ในการประมวลผลคอมพิวเตอร์ ประกอบด้วยเลข 2 ตัวคือ 0 และ 1 0 หมายถึง สถานะปิด Off 1 หมายถึง สถานะเปิด On
หน่วยในการเก็บข้อมูล บิต (bit) เป็นหน่วยที่เล็กที่สุดในการเก็บข้อมูล ไบต์ (byte) ประกอบด้วย 8 บิต ใช้แทนอักขระ 1 ตัว เวิร์ด (word) ประกอบด้วย 16 บิต หรือ 2 ไบต์ ใช้ในการ ประมวลผลหรืออ้างตำแหน่งในการประมวลผล
หน่วยในการเก็บข้อมูล... กิโลไบต์ (Kilobyte) มีค่าเป็น 210 = 1,024 ไบต์ ใช้แทนด้วย KB บางครั้งอาจใชัค่าประมาณ 1 KB=1,000 ไบต์
หน่วยในการเก็บข้อมูล... เมกะไบต์ (Megabyte) มีค่าเป็น 220 = 1,048,576 ไบต์ ใช้แทนด้วย MB บางครั้งอาจใชัค่าประมาณ 1 MB=1,000,000 ไบต์
หน่วยในการเก็บข้อมูล... จิกะไบต์ (Gigabyte) มีค่าเป็น 230 = 1,073,741,824 ไบต์ ใช้แทนด้วย GB บางครั้งอาจใชัค่าประมาณ 1 GB=1,000,000,000 ไบต์
ข้อมูลพื้นฐาน ข้อมูลพื้นฐานที่ใช้ในโปรแกรมทั่ว ๆ ไป เป็น ข้อมูลที่มีค่าเป็นลำดับที่ มีค่ามากน้อย ตามลำดับ เช่น 1, 2, 3 หรือ A, B, C แบ่งเป็น 5 ประเภท
ประเภทของข้อมูลพื้นฐาน Integer : เป็นข้อมูลเลขจำนวนเต็ม Real : เป็นข้อมูลเลขจำนวนจริงมีทศนิยม Character : เป็นข้อมูลชนิดตัวอักขระ 1 ตัว String : เป็นข้อมูลชนิดชุดอักขระ Boolean : เป็นข้อมูลชนิดตรรกะ
Integer : เลขจำนวนเต็ม คือข้อมูลที่เป็นเลขจำนวนเต็มหรือตัวเลขที่มีค่า แน่นอน ซึ่งจะเป็นบวกหรือลบก็ได้
Integer : เลขจำนวนเต็ม แบ่งเป็น 5 ชนิดคือ byte : 1 ไบต์ : 0 ... 255 shortint : 1 ไบต์ : -128 ... 127 integer : 2 ไบต์ : -32,768 ... 32,767 word : 2 ไบต์ : 0 ... 65,535 longint : 4 ไบต์ : -2,147,483,648 ... 2,147,483,647
Real : เลขจำนวนทศนิยม แบ่งเป็น 5 ประเภทคือ real : 6 ไบต์ : 2.9x10-39...1.7x1038 single : 4 ไบต์ : 1.5x10-45...3.4x1038 double : 8 ไบต์ : 5x10-324...1.7x10308 extended : 10 ไบต์ : 3.4x10-4932...1.1x104932 comp : 8 ไบต์ : -263+1…263-1
Char : ตัวอักขระ เป็นข้อมูลตัวอักขระ 1 ตัว ค่าของข้อมูลจะเป็นค่าของรหัสมาตรฐาน ASCII เช่น A, s, 5, $ ลำดับที่ของ Character มีตั้งแต่ 0-255 ใช้หน่วยความจำขนาด 1 ไบต์
String : ชุดอักขระ เป็นข้อมูลของชุดอักขระหรืออาร์เรย์ของ Character
Boolean : ค่าความจริง เป็นข้อมูลที่มีค่าเป็นไปได้ 2 ค่าคือ จริง (true) เท็จ (false) ใช้หน่วยความจำขนาด 1 ไบต์ เช่น test := true หรือ test := (x > 15)
โครงสร้างข้อมูล โครงสร้างข้อมูล หมายถึง การรวมประเภท ข้อมูล (Data Type) เข้าไว้ด้วยกันจนกระทั่ง กลายเป็นกลุ่มประเภทข้อมูลและมีการกำหนด คำนิยามของความสัมพันธ์ภายในกลุ่มข้อมูลไว้ อย่างชัดเจน
ชนิดของข้อมูล ข้อมูลประเภทข้อความ (Text) หมายถึง ข้อมูล ที่ไม่นำมาคำนวณ อาจเป็นตัวอักษร ตัวเลข เครื่องหมาย ข้อมูลประเภทตัวเลข จำนวนเต็ม ทศนิยม ตรรกะ (True/false)
ชนิดของข้อมูล 3. ข้อมูลแบบภาพลักษณ์ (images) เป็นข้อมูลที่เป็นภาพ ซึ่งอาจเป็นภาพ กราฟที่ถูกสร้างขึ้นจากข้อมูลแบบรูปแบบรูปภาพ หรือภาพวาด คอมพิวเตอร์ สามารถเก็บภาพและจัดส่งภาพเหล่านี้ไปยังคอมพิวเตอร์อื่นได้ 4. ข้อมูลแบบเสียง (audio) เป็นข้อมูลที่เป็นเสียง ลักษณะของการจัดเก็บก็จะ เหมือนกับการจัดเก็บข้อมูลแบบภาพ คือ คอมพิวเตอร์จะทำการแปลงเสียง เหล่านี้ให้คอมพิวเตอร์สามารถนำไปเก็บได้ ตัวอย่างได้แก่ การตรวจคลื่นหัวใจ จะเก็บเสียงเต้นของหัวใจ 5. ข้อมูลแบบภาพและเสียง (video) เป็นข้อมูลที่เป็นเสียงและรูปภาพ ที่ถูก จัดเก็บไว้ด้วยกัน เป็นการผสมผสานรูปภาพและเสียงเข้าด้วยกัน ลักษณะของการ จัดเก็บข้อมูล
ประเภทของโครงสร้างข้อมูล มี 2 ประเภท คือ โครงสร้างข้อมูลแบบเชิงเส้น ( Linear Data Structure) โครงสร้างข้อมูลแบบไม่เชิงเส้น (Non Linear Data Structure)
โครงสร้างข้อมูลแบบเชิงเส้น ( Linear Data Structure) โครงสร้างที่มีการจัดเก็บข้อมูลในลักษณะ ต่อเนื่องกัน ถ้าทราบตำแหน่งแรกของข้อมูลก็สามารถ ทราบตำแหน่งข้อมูลตัวถัดไปหรือข้อมูลตัวอื่นได้ ทาง คณิตศาสตร์จะเรียกว่า เวกเตอร์ (Vector) ข้อมูลมี ลักษณะเป็น 1 มิติ เช่น อาเรย์, สแตก, คิว, ลิสต์
ประเภทของโครงสร้างข้อมูล 100 200 300 400 D(1) D(2) D(3) D(4) อาเรย์ (Array) D(5) D(4) D(3) D(2) In Out D(1) โครงสร้างของสแตก
ประเภทของโครงสร้างข้อมูล D(1) D(2) D(3) D(4) D(5) Out In คิว (queue) D1 D2 D3 Dn Header ลิสต์ โครงสร้างของลิสต์
โครงสร้างข้อมูลแบบไม่เชิงเส้น (Non- Linear Data Structure) โครงสร้างข้อมูลแบบไม่เชิงเส้น มีรูปแบบการ จัดเก็บข้อมูลในหน่วยความจำภายใน คือ ข้อมูลจะถูก จัดเก็บแบบไม่ต่อเนื่องกัน (ข้อมูลที่ต่อเนื่องกันจะไม่ อยู่ติดกันในหน่วยความจำ) และมีการเข้าถึงด้วยการ ระบุตำแหน่ง โครงสร้างข้อมูลประเภทนี้ เช่น ทรี (tree) กราฟ(graph)
ตัวอย่างโครงสร้างข้อมูลแบบทรี (tree) A B X C D E 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 การให้แอดเดรสแก่ต้นไม้ไบนารีที่ถูกต่อเติมให้สมบูรณ์ - รูปการแทนต้นไม้โดยใช้อาร์เรย์
ตัวอย่าง โครงสร้างข้อมูลแบบกราฟ
ขั้นตอนวิธี ( Algorithm)
อัลกอริทึม หมายถึง การอธิบายขั้นตอนการทำงานของโปรแกรมที่จะพัฒนาขึ้น ซึ่งผ่านการวิเคราะห์และแยกแยะงาน เพื่อแก้ปัญหาใดปัญหาหนึ่ง โดยอธิบายอย่างเป็นลำดับขั้นตอน
การเขียนอัลกอริทึมช่วยอะไรได้ ? การสร้างลำดับขั้นตอนที่ดี จะนำไปสู่การแก้ปัญหาที่ถูกต้องโดยใช้วิธีการ เรียบเรียงลำดับขั้นตอนการทำงานตั้งแต่ขั้นตอน แรกถึงขั้นตอนสุดท้าย
รูปแบบการเขียนขั้นตอนวิธี (Algorithm) รูปแบบการพัฒนาลำดับขั้นตอนการแก้ปัญหา มี 2 วิธี คือ 1.การอธิบายขั้นตอนการทำงานอย่างคร่าว ๆหรืออย่างหยาบ (Decomposition) 2.การอธิบายขั้นตอนการทางานอย่างละเอียด (Refinement)
1.การอธิบายขั้นตอนการทำงานอย่างคร่าว ๆหรืออย่างหยาบ (Decomposition) การเขียนขั้นตอนการทำงานทั้งหมดโดยไม่ต้องละเอียดมากนัก และเขียนขั้นตอนการทำงานเป็น ข้อ ๆ เริ่มตั้งแต่ขั้นตอนแรกจนถึงขั้นตอนสุดท้ายที่จะส่งให้เครื่องคอมพิวเตอร์ทำการแก้ปัญหา จะต้องทำลำดับขั้นตอนใดบ้าง 1.การอธิบายขั้นตอนการทำงานอย่างคร่าว ๆหรืออย่างหยาบ (Decomposition)
ตัวอย่างเช่น การคำนวณหาอัตราผ่อนชำระรายเดือนของสินค้ารายการหนึ่ง สามารถเรียบเรียงเป็นการทำงานอย่างหยาบได้ ดังนี้ 1. เริ่มต้น 2. รับค่าของราคาสินค้า 3. รับค่าของอัตราดอกเบี้ยรายปี 4. รับค่าของจำนวนเดือนที่ต้องการผ่อนชำระ 5. คำนวณหาค่าของจานวนเงินที่ต้องชาระรายเดือน 6. แสดงค่าของจานวนเงินที่ผ่อนชาระรายเดือน 7. จบการทำงาน
2.การอธิบายขั้นตอนการทำงานอย่างละเอียด (Refinement) การนำขั้นตอนการทำงานอย่างคร่าว ๆ มาพิจารณา เพิ่มเติมข้อมูลบางอย่างที่ยังไม่เรียบร้อย แต่ละ ขั้นตอนที่อธิบายในส่วนของการอธิบายขั้นตอนการ ทำงานอย่างหยาบนั้น มีความละเอียดพอที่จะนำไป สั่งงานให้เครื่องคอมพิวเตอร์ทำงานได้
ขั้นตอนการคำนวณหาค่าของจำนวนเงินที่ต้องการผ่อนชำระรายเดือน 1.เริ่มต้น 2. รับค่าของราคาสินค้า 3. รับค่าของอัตราดอกเบี้ยรายเดือน 4. รับค่าของจำนวนเดือนที่ต้องการผ่อนชำระ 5. คำนวณหาดอกเบี้ย จากสูตร ดอกเบี้ยรายปี อัตราดอกเบี้ยรายเดือน x 12 ดอกเบี้ยสินค้า ราคาสินค้า x (ดอกเบี้ยรายปี/100) 6. คำนวณหาจำนวนเงินที่ต้องชำระรายเดือน เงินผ่อนรายเดือน (ราคาสินค้า + ดอกเบี้ยสินค้า )/12 7.แสดงค่าของจำนวนเงินที่ผ่อนชาระรายเดือน 8. จบการทำงาน
เทคนิคการเขียนอัลกอริทึม ก่อนศึกษาวิธีการเขียนอัลกอริทึม ควรมี ความเข้าใจและคำนึงถึงคุณสมบัติพื้นฐาน ของระบบคอมพิวเตอร์ก่อน เพื่อนำไป ประยุกต์ใช้ในขั้นตอนการเขียนอัลกอริทึม ได้อย่างถูกต้องต่อไป
คุณสมบัติด้านการแสดงผลค่าข้อมูล คุณสมบัติการ ทำงานระดับพื้นฐานของคอมพิวเตอร์ คุณสมบัติด้านหน่วยความจำ คุณสมบัติด้านการคำนวณ คุณสมบัติด้านการเปรียบเทียบเชิงตรรกะ คุณสมบัติด้านการแสดงผลค่าข้อมูล
คุณสมบัติด้านหน่วยความจำ การเขียนโปรแกรมคอมพิวเตอร์ต้องเกี่ยวข้อง กับการใช้งานพื้นที่ในหน่วยความจำของระบบ คอมพิวเตอร์ ในภาษาคอมพิวเตอร์ให้แทนสัญลักษณ์กำหนด พื้นที่หน่วยความจำ ด้วยการ กำหนดชื่อตัวแปร ใช้งาน เพื่ออ้างอิงข้อมูลในหน่วยความจำ
หมายถึง กำหนดค่า 1 ไว้ในตัวแปร N Example หมายถึง กำหนดค่า 1 ไว้ในตัวแปร N N=1 หมายถึง นำค่า x ยกกำลัง 2 บวกกับค่า y ยกกำลัง 2 ผลลัพธ์นำไปเก็บไว้ที่ ตัวแปร And Ans = x+y 2
Example Total = Total+Salary หมายถึง การนำค่าในตัวแปร Salary ไปบวกเข้ากับค่าในตัวแปร Total ผลลัพธ์ใหม่ที่ได้ ไปเก็บไว้ในตัวแปร Total ค่าใหม่ที่ได้จะไปเก็บทับค่าเดิมที่มีอยู่ คำสั่งลักษณะนี้ใช้ในการสะสมค่า หรือเปลี่ยนแปลงค่าในตัวแปรเดิม
2.คุณสมบัติด้านการคำนวณ คุณสมบัติด้านการคำนวณในระบบคอมพิวเตอร์ ระดับพื้นฐานเช่น การบวก การลบการคูณ การหาร โดยพิจารณาลำดับความสำคัญของสัญลักษณ์
สัญลักษณ์ที่ใช้ในการคำนวณและลำดับการทำงานของการคำนวณ มีดังนี้ สัญลักษณ์ที่ใช้ในการคำนวณและลำดับการทำงานของการคำนวณ มีดังนี้ หมายเหตุ หากมีวงเล็บจะดำเนินการในวงเล็บก่อน และกรณีที่มีลำดับความสำคัญเท่ากัน จะคำนวณจากด้านซ้ายไปขวา
3. คุณสมบัติด้านการเปรียบเทียบเชิงตรรกะ ความสามารถในการประมวลผลเชิงเปรียบเทียบ เป็นคุณสมบัติพื้นฐานคอมพิวเตอร์ การเขียนคำสั่งที่มีลักษณะของเงื่อนไข เพื่อให้เครื่องพิจารณาเลือกทิศทางการทำงานตามเงื่อนไขที่กำหนดนั้น
ลำดับการประมวลผลข้อมูล คอมพิวเตอร์
ลำดับขั้นตอนการประมวลผลข้อมูล การประมวลผลข้อมูลด้วยเครื่องคอมพิวเตอร์ ซึ่งมีขั้นตอน 3 ขั้น คือ ขั้นที่ 1 การนำเข้าข้อมูล(Input) ขั้นที่ 2 การประมวลผล(Process) ขั้นที่ 3 การแสดงผลลัพธ์(Output)
แผนภาพ แสดงความสัมพันธ์ของทั้ง 3 ขั้นตอน การนำเข้าข้อมูล Input การประมวลผล Process การแสดงผลลัพธ์ Output ขั้นที่ 1 ขั้นที่ 2 ขั้นที่ 3
การนำเข้าข้อมูล (Input) เป็นการเตรียมข้อมูลเพื่อนำเข้าไปประมวลผล ผู้พัฒนาระบบจะต้องวิเคราะห์ จากปัญหาว่า จะต้องนำ ข้อมูลอะไร ชนิดข้อมูลเป็นอะไร นำเข้าจากอุปกรณ์ใด เป็น ต้น
การประมวลผลข้อมูล(Process) เป็นการกำหนดวิธีการประมวลผลข้อมูล ว่าจะใช้ วิธีการใด ใช้สูตรอะไร มีเงื่อนไขอย่างไร มีการ ทำงานซ้ำกันหรือไม่ (Loop) รวมถึงการใช้ สูตรใดก่อนหลัง
การแสดงผลลัพธ์ (Output) เป็นการกำหนดการแสดงผลลัพธ์ ที่ได้จากกการ ประมวลผล ว่า จะแสดงผลลัพธ์อะไรบ้าง จัดรูปแบบ อย่างไร แสดงข้อมูลผ่านอุปกรณ์ใด
ชื่อนักศึกษา คะแนนสอบวิชาที่ 1 คะแนนสอบวิชาที่ 2 คะแนนสอบวิชาที่ 3 ตัวอย่างที่ 1จงวิเคราะห์ปัญหาเพื่อออกแบบโปรแกรมการคำนวณและแสดงค่าคะแนนเฉลี่ยของคะแนนสอบนักศึกษา 3 วิชา โดยมีข้อมูลที่รับเข้าคือ ชื่อนักศึกษา คะแนนสอบ 3 วิชา Input ชื่อนักศึกษา คะแนนสอบวิชาที่ 1 คะแนนสอบวิชาที่ 2 คะแนนสอบวิชาที่ 3 Output ชื่อนักศึกษา คะแนนเฉลี่ย Process คะแนนเฉลี่ย = คะแนนสอบวิชาที่ 1+คะแนนสอบวิชาที่ 2 + คะแนนสอบวิชาที่ 3 3
อัลกอริทึม เริ่มต้น รับค่าชื่อนักศึกษา รับค่าคะแนนสอบวิชาที่ 1 รับค่าคะแนนสอบวิชาที่ 2 รับค่าคะแนนสอบวิชาที่ 3 คำนวณหาค่าเฉลี่ยคะแนน = คะแนนสอบวิชาที่ 1 + คะแนนสอบวิชาที่ 2 + คะแนนสอบวิชาที่ 3 แสดงชื่อนักศึกษา แสดงค่าเฉลี่ยคะแนน จบการทำงาน 3
นำอัลกอริทึมมาแปลงเป็นโปรแกรมภาษา C #include<stdio.h> #include<conio.h> int main() { char stdname[20]; float s1,s2,s3,sAvg; printf(“Please Enter Student’s name :”); scanf(“%s”,stdname); printf(“Enter score of Subject 1:”); scanf(“%f”,s1);
printf(“Enter score of Subject 2:”); scanf(“%f”,s2); printf(“Enter score of Subject 3:”); scanf(“%f”,s3); sAvg = (s1+s2+s3)/3; printf(“Student name : %s \n”,stdname); printf(“Average Subject :%.2f \n,sAvg); }
การวิเคราะห์ เวลาการทำงานของ algorithm
Big O Big O เป็นสัญลักษณ์ที่ใช้ระบุพฤติกรรมการเติบโตของ function เพื่อประโยชน์ใน การเปรียบเทียบ ทางด้านประสิทธิภาพ ในโปรแกรมมิ่ง Big O เราอาจจะเข้าใจว่า Big O คือการนับจำนวนลูป การหาจำนวน ครั้งการทำงานเมื่อมี input n ตัว แต่เราอาจจะไม่ได้เข้าใจในนิยามจริงๆของมัน
Big-O Notation - เครื่องหมาย บิ๊ก-โอ ใช้ในการระบุทรัพยากรที่ใช้ในการทำงานของอัลกอริทึมเมื่อขนาดของ อินพุทเปลี่ยนไป - ปกติแล้วทรัพยากรดังกล่าวจะหมายถึงเวลา นั่นคือ ความสัมพันธ์ระหว่าง เวลา กับ ขนาด ของ อินพุท - อาจกล่าวง่าย ๆ ว่า หากอินพุทมีขนาดใดขนาดหนึ่ง เวลาที่ใช้ในการทำงานมากที่สุด (upper bound) จะเป็นเท่าใด บิ๊ก-โอ เป็นฟังก์ชั่นที่นิยมใช้มากที่สุดในการระบุ ประสิทธิภาพของอัลกอริทึม
Big O Notation Algorithm 1 Algorithm 2 For(i=1;i<=n;i=i+1) หรือ อันดับขนาด (Order of Magnitude) หมายถึงปริมาณที่เครื่องคอมพิวเตอร์ทำไม่ขึ้นกับขนาดของโปรแกรมหรือ จำนวนบรรทัดของโปรแกรม เป็นฟังก์ชันที่ได้จากการประมาณค่าทางคณิตศาสตร์ซึ่งเป็นฟังก์ชันที่สัมพันธ์กับขนาดของปัญหา ให้ข้อมูลในการเปรียบเทียบอัลกอลิทึม List[1] = 0; List[2] = 0; : List [1000] = 0; Algorithm 1 For(i=1;i<=n;i=i+1) List [i] = 0; Algorithm 2 Algorithm 1 และ Algorithm 2 มีอันดับขนาดคือ O(n) Empirical comparison is difficult to do “fairly” and is time consuming. Critical resources: Time. Space (disk, RAM). Programmers effort. Ease of use (user’s effort). Factors affecting running time: Machine load. OS. Compiler. Problem size. Specific input values for given problem size.
Big-O Notation ตัวอย่าง - ความหมายของ O(n) คือ ฟังก์ชั่นนั้น ๆ ใช้เวลาทำงานช้าที่สุด ≤ n - เช่น อัลกอริทึม a1 มีประสิทธิภาพเป็น O(n2) ถ้า n = 10 แล้ว a1 จะใช้ เวลาทำงานช้าที่สุด 100 หน่วยเวลา (รับประกันว่าไม่ช้าไปกว่านี้ - แต่อาจจะเร็วกว่านี้ได้) - เขียนได้ว่า f(n) є O(g(n)) เพื่อบอกว่า f(n) เป็นฟังก์ชันที่ไม่โตเร็วกว่า g(n) - เราสามารถหาค่าคงตัวบวก C ที่ f(n) ≤ Cg(n)
Examples of Growth Rate (1) for (i=1; i<=1000; i=i+1) 1000 times <<application code>>; for (i=1; i<=1000; i=i+2) 500 times for (i=1; i<1000; i=i*2) 10 times for (i=1000; i>=1; i=i/2) 10 times Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.
Examples (2) for (j=1; j<=10; j=j+1) 10 times for (i=1; i<=10; i=i+1) 10 iterations <<application code>>; 100 iterations for (j=1; j<=10; j=j+1) 10 iterations for (i=1; i<=10; i=i*2) log210 iterations 10*log210 iterations for (j=1; j<=10; j=j+1) 10 times for (i=1; i<=j; i=i+1) (10+1)/2 times 55 iterations Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.
Example: Input Size = n for (i=1; i<=n; i=i+1) T(n) = n <<application code>>; for (i=1; i<=n; i=i+2) T(n) = n/2 for (i=1; i<n; i=i*2) <<application code>>; T(n) for (i=n; i>=1; i=i/2) Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.
Examples (2) for (j=1; j<=n; j=j+1) for (i=1; i<=n; i=i+1) <<application code>>; for (i=1; i<=n; i=i*2) for (i=1; i<=j; i=i+1) Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.
Examples (3) // Find largest value int largest(int array[], int n) { int currlarge = 0; // Largest value seen for (int i=1; i<n; i++) // For each val if (array[currlarge] < array[i]) currlarge = i; // Remember pos return currlarge; // Return largest } As n grows, how does T(n) grow? Cost: T(n) = c1n + c2 steps
Time Complexity Best Case Time Complexity Worst Case Time Complexity เวลาที่ดีสุด (minimum time) ที่ algorithm ใช้ในการประมวลผลสำหรับข้อมูลนำเข้าขนาด n Worst Case Time Complexity เวลาที่มากสุด(maximum time) ที่algorithm ใช้ในการประมวลผลสำหรับข้อมูลนำเข้าขนาด n รับประกันเวลาได้ว่า algorithm ที่ใช้จะไม่ใช้เวลาเกินนี้ ใช้ใน time-critical software application Average Case Time Complexity เวลาที่เฉลี่ย(average time) ที่ algorithm ใช้ในการประมวลผลสำหรับข้อมูลนำเข้าขนาด n Need assumption about inputs’ distribution
Best, Worst, Average Cases Sequential search for K in an array of n integers: Begin at first element in array and look at each element in turn until K is found Best case: Worst case: Average case: Best: Find at first position. Cost is 1 compare. Worst: Find at last position. Cost is n compares. Average: (n+1)/2 compares IF we assume the element with value K is equally likely to be in any position in the array.
Which Analysis to Use? While average time appears to be the fairest measure, it may be difficult to determine. When is the worst case time important? Average time analysis requires knowledge of distributions. For example, the assumption of distribution used for average case in the last example. Worst-case time is important for real-time algorithms.
Big-O Notation Big-oh notation represents the growth rate. It's useful to be able to estimate the cpu or memory resources an algorithm requires. Example: If T(n) = 3n2 then T(n) is in O(n2). Wish tightest upper bound: While T(n) = 3n2 is in O(n3), we prefer O(n2). It provides more information in this example to say O(n2) than O(n3).
Big-Oh Examples Example 1: Finding value X in an array T(n) is in O(n). Example 2: T(n) = c1n2 + c2n T(n) is in O(n2). Example 3: T(n) = c. We say this is in O(1). We are doing average case. cs is a constant. The actual value is irrelevant.
Running Time Examples (1) Example 1: O(1) a = b; This assignment takes constant time, so it is O(1). Example 2: O(n) sum = 0; for (i=1; i<=n; i++) O(n) sum += n; Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.
Running Time Examples (2) Example 3: O(n2) sum = 0; O(1) for (j=1; j<=n; j++) O(n2) for (i=1; i<=j; i++) sum++; for (k=0; k<n; k++) O(n) A[k] = k; First statement is (1). Double for loop is i = (n2). Final for loop is (n). Result: (n2).
Running Time Examples (3) Example 4: O(n2) sum1 = 0; O(1) for (i=1; i<=n; i++) O(n2) for (j=1; j<=n; j++) sum1++; sum2 = 0; O(1) for (j=1; j<=i; j++) sum2++; sum is n2. First loop, sum is n2. Second loop, sum is (n+1)(n)/2. Both are (n2). sum is (n+1)(n)/2.
Running Time Examples (4) Example 5: O(nlogn) sum1 = 0; for (k=1; k<=n; k*=2) O(logn) for (j=1; j<=n; j++) O(n) sum1++; sum2 = 0; for (k=1; k<=n; k*=2) O(n) for (j=1; j<=k; j++) sum2++; First loop is n for k = 1 to log n, or (n log n). Second loop is 2k for k = 0 to log n - 1, or (n). First loop is n for k = 1 to log n. Second loop is 2k for k = 0 to log n.
Algorithm Efficiency Constant O(1) การข้าถึงสมาชิกตัวที่ iในแถวลำดับ Logarithmic O(logn) การค้นหาแบบBinary Search Linear O(n) การค้นหาแบบSequential Search Linear logarithmic O(n(logn)) การจัดเรียงแบบMerge Sort Quadratic O(n2) การจัดเรียงแบบธรรมดา How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one hour on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003.
Algorithm Efficiency Efficiency Big-O Iterations Est. Time O(logn) Assumes instruction speed of one microsecond and 10 instructions in loop. Efficiency Big-O Iterations Est. Time Logarithmic Linear O(logn) O(n) 14 10,000 Microseconds .1 seconds Linear logarithmic Quadratic O(n(logn)) O(n2) 140,000 10,0002 2 seconds 15-20 min. Polynomial O(nk) 10,000k Hours Exponential O(cn) 210,000 Intractable Factorial O(n!) 10,000! How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one hour on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003.
Faster Computer or Algorithm? Old machine can run 10,000 basic operations/hour. New machine can run 100,000 basic operations/hour. What happens when we buy a computer 10 times faster? T(n) n n’ Change n’/n 10n 1,000 10,000 n’ = 10n 10 20n 500 5,000 5n log n 250 1,842 10 n < n’ < 10n 7.37 2n2 70 223 n’ = 10n 3.16 2n 13 16 n’ = n + 3 ----- How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one hour on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003. Algorithmที่มี growth rate ที่สูงจะใช้เวลามากในการแก้ปัญหาข้อมูลนำเข้าที่มีขนาดเล็กและแม้ว่าจะเพิ่มความเร็วของเครื่องคอมพิวเตอร์ก็ไม่ได้ช่วยอะไรให้ดีขึ้น
ให้หา O if(string[0]=='a') printf("yes\n"); else printf("no\n"); printf("%d\n", N*(N+1));
ให้หา O for(i=0;i<N;i++) if(string[i]=='a') { printf("yes\n"); break; } if(i==N) printf("no\n");
ให้หา O for(i=0;i<N;i++) a = a+2; b = b+a;
ให้หา O for(i=0;i<N;i++) k++; for(j=0;j<M;j++)
ให้หา O for(i=0;i<strlen(string);i++) printf("%c", string[i]);
ให้หา O for(i=0;i<N;i++) for(j=i;j<N;j++) printf("*"); printf("\n");