บทนำ.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โปรแกรมฝึกหัด การเลื่อนและคลิกเมาส์
Advertisements

Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
วิธีการตั้งค่าและทดสอบ เครื่องคอมพิวเตอร์ก่อนใช้งาน
วิชา องค์ประกอบศิลป์สำหรับคอมพิวเตอร์ รหัส
Chapter 2 Root of Nonlinear Functions
Introduction to C Programming
การรับค่าและแสดงผล.
เปรียบเทียบจำนวนประชากรทั้งหมดจากฐาน DBPop Original กับจำนวนประชากรทั้งหมดที่จังหวัดถือเป็นเป้าหมาย จำนวน (คน) 98.08% % จังหวัด.
วิชาเศรษฐศาสตร์ รศ.ดร. ชวินทร์ ลีนะบรรจง.
Stack.
คืออะไร? คือ queue ที่ access element ตามความสำคัญของตัว element นั้น
แถวคอย (Queue).
Data structure & Algorithms
การจัดเก็บข้อมูลตามตัวบ่งชี้ สกอ. และ สมศ.
Week 6 ประกาศค่าตัวแปร.
การส่งค่าและการเก็บค่า (ต่อ... )
ตัวแปรชุด.
ครั้งที่ 7 Composition.
คิวQueue Circular Queue.
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
Selected Topics in IT (Java)
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
โปรแกรม Microsoft Access
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
การเขียนรายงานการใช้เอกสารประกอบการสอน
OOP (Object-Oriented Programming)
C# Programming Exceed Camp: Day 3.
Kampol chanchoengpan it สถาปัตยกรรมคอมพิวเตอร์ Arithmetic and Logic Unit 1.
บทที่ 2 อาร์เรย์ อาร์เรย์ คือ ชุดของตัวแปรเดียวกัน ซึ่งสมาชิกของอาร์เรย์จะเป็นตัวแปรพื้นฐาน จำนวนสมาชิกในอาร์เรย์มีขนานแน่นอน และสมาชิกของอาร์เรย์แต้ละตัว.
เครื่องมือช่วยในการจับประเด็น รวบรวมความคิดให้เป็นหมวดหมู่
แนวทางการปฏิบัติโครงการจูงมือ น้องน้อยบนดอยสูง 1.
โครงสร้างข้อมูลแบบคิว
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ณัฏฐวุฒิ เอี่ยมอินทร์
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
สัปดาห์ที่ 7 การแปลงลาปลาซ The Laplace Transform.
บทที่ 3 การวิเคราะห์ Analysis.
สถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)
รองศาสตราจารย์ ดร.เอมอัชฌา วัฒนบุรานนท์
ตัวแปรกับชนิดของข้อมูล
เขียนโปรแกรมเพื่อแสดงข้อมูลพนักงาน ด้วย ADO.NET vs. DataReader
โปรแกรม Microsoft Access
บทที่ 3 Class and Object (2).
ค21201 คณิตศาสตร์เพิ่มเติม 1
การทำผลงานวิชาการ สงวนลิขสิทธิ์.....โดย ดร.สุรชาติ สังข์รุ่ง.
คำสั่งเกี่ยวกับการรับ และแสดงผล
ความหมายของวิทยาศาสตร์
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
จุมพฏ พงศ์ศักดิ์ศรี จุมพฏ พงศ์ศักดิ์ศรี
ตัวแปร Array แบบ 1 มิติ การเขียนโปรแกรมแบบวนซ้ำ
Java collection framework
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
School of Information Communication Technology,
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
BCS 121 บท 5 การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
โครงสร้างข้อมูล Queues
TECH30201 Object-Oriented Programming
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
กราฟเบื้องต้น.
การพัฒนาการเรียนรู้รายวิชาการโปรแกรมคอมพิวเตอร์ด้วย e-Learning
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
กราฟเบื้องต้น.
การแบ่งแยกและเอาชนะ Divide & Conquer
บทที่ 5 การเขียนรายงานโครงงานคอมพิวเตอร์
การแบ่งแยกและเอาชนะ Divide & Conquer
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
โครงการจัดทำฐานข้อมูลผ่านเว็บไซต์
ใบสำเนางานนำเสนอ:

บทนำ

หัวข้อ นิยาม ตัวอย่างการใช้งาน วัตถุประสงค์ของการศึกษาโครงสร้างข้อมูล ตัวอย่างประสิทธิภาพเชิงเวลาการทำงาน

โครงสร้างข้อมูลคืออะไร วิธีการจัดเก็บและจัดการข้อมูลให้ ตรงตามความต้องการ ทำงานรวดเร็ว ประหยัดเนื้อที่ เข้าใจง่าย จะเขียนโปรแกรมจัดเก็บและจัดการอย่างไร ?

การจำลองวงจรตรรก Logic Design Tools

การออกแบบวงจรรวม ทรานซิสเตอร์ 55 ล้านตัว กับสายสัญญาณเชื่อมต่ออีกจำนวนมาก VLSI Design

Games เกมคอมพิวเตอร์

การออกแบบทางวิศวกรรม CAD Tools

ล้วนเป็นปัญหาที่เกี่ยวกับ โครงสร้างข้อมูล และอื่น ๆ Google เก็บเอกสารอย่างไร ทำให้ค้นได้รวดเร็ว jvm เก็บออปเจกต์ต่าง ๆ คลาสต่าง ๆ ตัวแปรต่าง ๆ thread ต่าง ๆ ไว้อย่างไร Word processor เก็บตัวอักษร คำ ข้อความ ย่อหน้า สูตร รูป และอื่น ๆ ในเอกสารภายในหน่วยความจำ อย่างไร ขณะที่เรากำลังใช้งาน ... ล้วนเป็นปัญหาที่เกี่ยวกับ โครงสร้างข้อมูล

ข้อมูลต่าง ๆ บางชนิด ตัวภาษามีให้แล้ว (primitive) int, double, char, boolean, ... บางชนิดคลังคำสั่งของระบบมีให้ใช้ (class) String, Color, BigDecimal, ArrayList, HashMap, ... และมีอีกมากมายที่ต้องออกแบบและสร้างเอง

ที่เก็บข้อมูลแบบพื้นฐาน : Collection เก็บข้อมูลไม่มีอันดับ ซ้ำได้ A B A A C

ที่เก็บข้อมูลแบบพื้นฐาน : Set เก็บข้อมูลไม่มีอันดับ ไม่ให้ซ้ำ B A A A C

ที่เก็บข้อมูลแบบพื้นฐาน : List เก็บข้อมูลเรียงแบบมีอันดับ ซ้ำได้ A A C B A

ที่เก็บข้อมูลแบบพื้นฐาน : Queue ข้อมูล เข้าก่อน ออกก่อน (FIFO - First-In First-Out) X A B C A

ที่เก็บข้อมูลแบบพื้นฐาน : Stack ข้อมูล เข้าหลัง ออกก่อน (LIFO - Last-In First-Out) A B X C A

วิธีสร้างที่เก็บข้อมูล สร้างด้วยอาเรย์ สร้างด้วยการโยง สร้างด้วยต้นไม้ สร้างด้วยตาราง อื่น ๆ + 3  a b

วัตถุประสงค์ เลือกให้เป็น ใช้ให้เป็น สร้างให้เป็น

เลือกให้เป็น List Collection Set Stack Map Queue PriorityQueue TreeSet ArrayList LinkedList TreeSet HashSet TreeMap HashMap LinkedHashMap

ใช้ให้เป็น public static PuzzleBoard solve(PuzzleBoard b) { Set set = new ArraySet(); Queue queue = new ArrayQueue(); queue.enqueue(b); set.add(b); while ( !queue.isEmpty() ) { b = queue.dequeue(); for (int d = 0; d < 4; d++) { PuzzleBoard b2 = b.moveBlank(d); if (b2 != null) { if ( b2.isAnswer() ) return b2; if (! set.contains(b2) ) { queue.enqueue(b2); set.add(b2); } return null; Set set = new ArraySet(); Queue queue = new ArrayQueue(); queue.enqueue(b); set.add(b); queue.isEmpty() queue.dequeue(); set.contains(b2) queue.enqueue(b); set.add(b);

ใช้ให้เป็น

ขอสร้าง collection ด้วยอาเรย์ สร้างให้เป็น public class ArrayCollection implements Collection { private Object[] elementData; private int size; public ArrayCollection(int c) { elementData = new Object[c]; size = 0; } public void add(Object e) { elementData[size++] = e; public boolean size() { return size; public int isEmpty() { return size == 0; ... อยากได้ Collection ขอสร้าง collection ด้วยอาเรย์ พัฒนา โปรแกรม ออกแบบโครงสร้าง size 3 elementData 1 2 4 " นัท คิด วิน

โครงสร้างข้อมูลที่ดี ให้บริการตามที่ต้องการ ใช้ง่าย กินเนื้อที่น้อย ทำงานได้อย่างรวดเร็ว

ตัวอย่าง : 15-puzzle 1 2 3 4 5 7 8 9 6 10 12 13 14 11 15

เลื่อนช่องว่างเพื่อผลิตตาราง 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 ขึ้น ลง ซ้าย ขวา 1 2 3 4 5 6 9 13 7 8 10 14 11 12 15 1 2 3 4 5 6 9 13 7 8 10 14 11 15 1 2 3 4 5 6 9 10 13 14 7 8 12 11 15 1 2 3 4 5 6 9 13 7 8 10 14 12 11 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 2 3 4 5 6 9 10 13 14 7 8 11 12 15 1 2 3 4 5 6 9 10 13 14 7 8 12 15 1 2 3 4 5 6 9 13 7 8 14 11 12 15 2 3 4 5 6 7 8 9 10 10 12 12 13 14 11 11 15 ขึ้น ขวา 1 2 4 5 6 9 10 13 14 3 7 8 11 12 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 ลง ซ้าย 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

พบคำตอบ พบวิธีเลื่อน 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 ขึ้น ลง ซ้าย ขวา 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 ขึ้น ลง ซ้าย ขวา ขึ้น ซ้าย ขวา 1 2 4 5 6 9 10 13 14 3 7 8 11 12 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

ใช้ Queue เก็บตาราง

15-puzzle : ส่วนของโปรแกรม public static PuzzleBoard solve(PuzzleBoard b) { Queue queue = new ArrayQueue(); queue.enqueue(b); while ( !queue.isEmpty() ) { b = queue.dequeue(); for (int d = 0; d < 4; d++) { PuzzleBoard b2 = b.moveBlank(d); if (b2 != null) { if ( b2.isAnswer() ) return b2; queue.enqueue(b2); } return null; ใช้ queue เก็บตารางที่ผลิตใหม่

15-puzzle : ตารางที่ผลิตอาจซ้ำกัน 2 3 4 5 6 7 8 9 10 12 13 14 11 15 ขึ้น ซ้าย ขวา ลง 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 ขึ้น ขึ้น ลง ซ้าย ขวา ซ้าย ขวา 1 2 4 5 6 9 10 13 14 3 7 8 11 12 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 8 9 10 13 14 7 11 12 15 1 2 3 4 5 6 7 8 9 10 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

15-puzzle : ส่วนของโปรแกรม public static PuzzleBoard solve(PuzzleBoard b) { Queue queue = new ArrayQueue(); queue.enqueue(b); while ( !queue.isEmpty() ) { b = queue.dequeue(); for (int d = 0; d < 4; d++) { PuzzleBoard b2 = b.moveBlank(d); if (b2 != null) { if ( b2.isAnswer() ) return b2; queue.enqueue(b2); } return null; Set set = new ArraySet(); set.add(b); if ( ! set.contains(b2) ) { } set.add(b); ใช้ queue เก็บตารางที่ผลิตใหม่ ใช้ set เพื่อตรวจสอบความซ้ำซ้อน

สร้าง Set ได้หลายแบบ public static PuzzleBoard solve(PuzzleBoard b) { Set set = new ArraySet(); Queue queue = new ArrayQueue(); queue.enqueue(b); set.add(b); while ( !queue.isEmpty() ) { b = queue.dequeue(); for (int d = 0; d < 4; d++) { PuzzleBoard b2 = b.moveBlank(d); if (b2 != null) { if ( b2.isAnswer() ) return b2; if ( ! set.contains(b2) ) { queue.enqueue(b2); set.add(b2); } return null; Set set = new HashSet(); Set set = new AVLSet(); Set set = new ArraySet(); Set set = new BSTSet();

เวลาการทำงาน (วินาที) 15-puzzle : ผลการทดลอง ตาราง เริ่มต้น จำนวนตาราง ที่ผลิต เวลาการทำงาน (วินาที) ArraySet BSTSet AVLSet HashSet แบบที่ 1 แบบที่ 2 แบบที่ 3 552 5242 132049 0.03 1.94 1819.6 0.02 0.22 7.08 0.04 0.18 5.71 0.05 0.12 2.56

สรุป ศึกษาวิธีการจัดเก็บและการจัดการข้อมูล เราต้อง ตรงตามความต้องการ ทำงานรวดเร็ว ประหยัดเนื้อที่ เข้าใจง่าย เราต้อง เลือกให้เป็น ใช้ให้เป็น สร้างให้เป็น