1 / 19

Application of Linked Lists

Application of Linked Lists. สร้างพหุนามตัวแปรเดียว (Single Variable Polynomial) ใช้ในการจัดเรียงข้อมูล (Sorting) โดยใช้เวลาเป็นเชิงเส้น (Linear time) ใช้ในการจัดเก็บรายชื่อวิชาที่เคยลงทะเบียนเรียนของนักศึกษาในมหาวิทยาลัย. N. f(X) = ∑ A i X i. i=0.

Download Presentation

Application of Linked Lists

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Application of Linked Lists • สร้างพหุนามตัวแปรเดียว (Single Variable Polynomial) • ใช้ในการจัดเรียงข้อมูล (Sorting) โดยใช้เวลาเป็นเชิงเส้น (Linear time) • ใช้ในการจัดเก็บรายชื่อวิชาที่เคยลงทะเบียนเรียนของนักศึกษาในมหาวิทยาลัย Week 06b - Linked Lists Application

  2. N f(X) = ∑ AiXi i=0 โครงสร้างข้อมูลชนิดพหุนาม (Polynomial ADT) พหุนามตัวแปรเดียว (Single Variable Polynomial) • Ai ว่าเป็นสัมประสิทธิ์ (Co-efficient) ของเทอม • i เป็นกำลังหรือดีกรี (Degree) ของเทอม • ค่าดีกรีของพหุนามเท่ากับค่าดีกรีของเทอมที่มีดีกรีสูงสุด เช่น 8X3 + 35X2 + X + 24 Week 06b - Linked Lists Application

  3. Polynomial ADT • นิยาม Abstract Data Type สำหรับพหุนาม (Polynomial) ตัวแปรเดียวได้โดยใช้ลิสต์ทั้งที่สร้างขึ้นจากอาร์เรย์ (Array) และจากลิงค์ลิสต์ (Linked List) • ถ้าค่าสัมประสิทธิ์ (Coefficient) ส่วนใหญ่ไม่เป็น 0 (เทอมส่วนใหญ่อยู่ครบ) เราสามารถสร้างพหุนามดังกล่าวขึ้นโดยใช้อาร์เรย์ได้ง่าย • สามารถสร้างขั้นตอนในการทำการดำเนินการ (Operations) ต่างๆบนพหุนามเหล่านี้ได้ เช่น การบวก (addition), การคูณ (multiplication) Week 06b - Linked Lists Application

  4. การประกาศ Polynomial ADT ที่สร้างขึ้นจากอาร์เรย์ • ประกาศเป็นโครงสร้างแบบ Structure • ประกอบด้วยอาร์เรย์ของสัมประสิทธิ์ของแต่ละเทอม • ดัชนี (Index) ของอาร์เรย์จะแสดงกำลังหรือดีกรีของเทอมนั้นๆ Week 06b - Linked Lists Application

  5. การประกาศ Polynomial ADT ที่สร้างขึ้นจากอาร์เรย์ การเก็บพหุนามลงอาร์เรย์ • อาร์เรย์ของสัมประสิทธิ์ของแต่ละเทอม • ดัชนี (Index) ของอาร์เรย์จะแสดงกำลังหรือดีกรีของเทอมนั้นๆ ตัวอย่าง8X3 + 35X2 + X + 24 Week 06b - Linked Lists Application

  6. การประกาศ Polynomial ADT ที่สร้างขึ้นจากอาร์เรย์ 23X4 + 14X2 + X + 6 X 0 23 0 14 1 6 X5 + 2X4 + 34X3 + 17X X 1 0 2 34 0 17 Week 06b - Linked Lists Application

  7. การประกาศ Polynomial ADT ที่สร้างขึ้นจากอาร์เรย์ • พหุนามที่สร้างด้วยอาร์เรย์ไม่สามารถมีดีกรีต่ำกว่า 0 ได้ เนื่องจากข้อจำกัดจากช่วงของค่าดัชนีของอาร์เรย์ • ออบเจกต์พหุนามอาจเก็บค่าดีกรีของเทอมสูงสุด ซึ่งเป็นดีกรีของพหุนามเอาไว้ด้วย เพื่อให้สะดวกต่อการดำเนินการต่างๆ • เราต้องทราบขนาดของอาร์เรย์ของสัมประสิทธ์เพื่อจะได้ทราบค่าดีกรีสูงสุดที่สามารถบรรจุลงในอาร์เรย์ Week 06b - Linked Lists Application

  8. Structure ของพหุนามที่เก็บโดยใช้อาร์เรย์ • maxDegree เป็นดีกรีสูงสุดของพหุนามที่สามารถบรรจุลงในอาร์เรย์นี้ได้ ซึ่งเป็นตัวกำหนดขนาดของอาร์เรย์ที่ต้องการ • coefficientArray [] เป็นอาร์เรย์ที่ใช้เก็บสัมประสิทธิ์ โดยจองเนื้อที่ไว้เท่ากับ maxDegree+1 • highestPower เป็นค่ากำลังหรือดีกรีของเทอมที่มีดีกรีสูงที่สุด ซึ่งถือเป็นดีกรีของพหุนามที่เก็บอยู่ Week 06b - Linked Lists Application

  9. Structure ของพหุนามที่เก็บโดยใช้อาร์เรย์ Struct Polynomial { int CoefficientArray[ MaxDegree+1]; int HighestPower; } Polynomial int CoefficientArray[MaxDegree+1] int HighestPower Week 06b - Linked Lists Application

  10. การกำหนดค่าเริ่มต้นของ Polynomial ให้เป็นศูนย์ • ให้ค่าในอาร์เรย์ CoefficientArray ทั้งหมดเป็น 0 • ให้ค่าดีกรีสูงสุดของพหุนาม HighestPower เป็น 0 Algorithm makeZeroPolynomial(polyterm) maxDegree – the highest possible degree of polynomial polyterm –pointer to the polynomial structure i – index to current member of array Begin for(int i = 0; i <= maxDegree; i++) (Set CoefficientArray[i] of polyTerm to 0) (Set HighestPower to 0) End Week 06b - Linked Lists Application

  11. ขั้นตอนการบวกพหุนาม • รับข้อมูลชนิด Polynomial เข้ามา 3 ตัว • poly1,poly2 สำหรับบวกเข้าด้วยกัน • polySum เอาไว้เก็บค่าพหุนามผลลัพธ์ • ค่าดีกรีของพหุนามผลลัพธ์จะเท่ากับค่าสูงสุดของระหว่างดีกรี (Highest Power) ของพหุนามทั้งสอง • การบวกพหุนาม ทำได้โดยการบวกค่าสัมประสิทธิ์ของเทอมที่มีดีกรีเท่ากันเข้าด้วยกัน Week 06b - Linked Lists Application

  12. ขั้นตอนการบวกพหุนาม Algorithm addPolynomial(poly1, poly2, polySum) maxDegree – the highest possible degree of polynomial poly1,poly2 – polynomial terms to be added together polySum – resulted polynomial i – index to current member of array Begin (Call Procedure MakeZeroPolynomial(polySum)) (HighestPower of polySum = maximum between HighestPower of poly1 and HighestPower of poly2) for(i=(HighestPower of polySum); i>=0; i--) { (CoefficientArray[i] of polySum) = (CoefficientArray[i] of poly1) + (CoefficientArray[i] of poly2) } End Week 06b - Linked Lists Application

  13. 575 10 3 45 620 114 17 0 การสร้าง Polynomial จาก Linked List • เพื่อลด Running Time สำหรับการคูณพหุนามที่เทอมส่วนใหญ่ของพหุนามหายไปเนื่องจากค่าสัมประสิทธิ์ (Coefficient) เป็น 0 แต่ละโหนดของ Linked List แทนเทอมของพหุนามแต่ละเทอม โดยมีองค์ประกอบของข้อมูล 2 ตัว • ค่าแรกของโหนดเป็นค่าสัมประสิทธิ์ (Coefficient) ของเทอม • ค่าที่สองของโหนดเป็นค่ากำลังหรือดีกรี (Degree) ของเทอม 575X620 + 10X114 + 3X17 + 45 NULL Week 06b - Linked Lists Application

  14. coeff exponent การประกาศ Polynomial ADT ที่สร้างขึ้นจาก Linked List Structure PolyNode { int coeff; int exponent; PolyNode* next; } next Week 06b - Linked Lists Application

  15. 1 68 26 33 7 1 12 34 1 0 10 1 การสร้าง Polynomial จาก Linked List 68X34 + 26X12 + 7X + 33 NULL X10 + X NULL Week 06b - Linked Lists Application

  16. Radix Sort ทำการจัดเรียง (Sorting) เลขฐาน 10 • สร้าง Bucket จำนวนน้อยกว่า หรือเท่ากับจำนวนข้อมูลที่ต้องการเรียง โดยปกติแล้วจะมีขนาดเท่ากับค่าฐานของเลขที่ต้องการ Sort • ข้อมูลที่เก็บอยู่ในแต่ละ Bucket จะเก็บอยู่ในรูปของ List • การจัดเรียง (Sorting) แต่ละรอบจะแยกข้อมูลออกพิจารณาทีละหลัก • เรียงโดยเริ่มพิจารณาจากหลักที่มีค่านัยสำคัญต่ำสุด (Less significant digit) ไปยังหลักที่มีค่านัยสำคัญสูงสุด (Most significant digit) • พิจารณาข้อมูลที่ละหลัก โดยข้อมูลที่มีค่าของหลักนั้นๆเหมือนกัน ให้นำไปไว้ใน list เดียวกัน • จำนวนรอบในการจัดเรียงเท่ากับจำนวนหลักของข้อมูล Week 06b - Linked Lists Application

  17. ข้อมูล Inputเป็น 64, 8, 216, 512, 27, 729, 0, 1, 343, 125 พิจารณาหลักหน่วย 0 1 512 343 64 125 216 27 8 729 อ่านข้อมูลออกมาจากทีละ Bucket ตามลำดับ จะได้เป็น 0, 1, 512, 343, 64, 125, 216, 27, 8, 729 Week 06b - Linked Lists Application

  18. ข้อมูลจากรอบที่ผ่านมา0, 1, 512, 343, 64, 125, 216, 27, 8, 729พิจารณาหลักสิบ 8 729 1 216 27 0 512 125 343 64 อ่านข้อมูลออกมาจากทีละ Bucket ตามลำดับ จะได้เป็น 0, 1, 8, 512, 216, 125, 27, 729, 343, 64 Week 06b - Linked Lists Application

  19. ข้อมูลจากรอบที่ผ่านมา0, 1, 8, 512, 216, 125, 27, 729, 343, 64พิจารณาหลักร้อย 64 27 8 1 125 216 343 512 729 0 อ่านข้อมูลออกมาจากทีละ Bucket ตามลำดับ จะได้เป็น 0, 1, 8, 27, 64, 125, 216, 343, 512, 729 Week 06b - Linked Lists Application

More Related