วันพฤหัสบดีที่ 15 ตุลาคม พ.ศ. 2552

ลูกแรดเตรียมพร้อมล่าเหยื่อ

สิ่งที่ได้จากการเรียนคือ ได้เรียนรู้ถึงการทำงานที่เป็นระบบ ความอดทน
ต่อการทำงาน จากการฝึกงานในมหาลัย ๆได้รู้จักเพื่อนใหม่ ๆ จากการทำงานและเรียนรู้การทำงานเป็นกลุ่ม
จากการทำโครงการในการเรียนแต่ละครั้งได้เรียนรู้จากวิทยากรที่ได้รับเชิญ
มาถึงประสบการณ์ในการ ทำงานของวิทยากร ให้นักศึกษาเรียนรู้จาก
วิทยากรถึงการทำงานของเขา
ในการเรียนและการสอบแต่ละครั้งจะได้ความอดทนต่างกันไป เช่น
การคัดไทยที่ต้องใช้เวลาและความละเอียดในการทำ
ในการเรียนเตรียมฝึกในเทอมนี้ ดิฉันได้เรียนรู้ถึง บุคลิกภาพและการแต่งกาย และความริเริ่มสร้างสรรค์ในงานต่าง ๆ ที่ได้รับมอบหมาย
ได้รับรู้ถึงการเรียนรู้งานใหม่ ๆ ที่ไม่เคยได้ทำมาก่อน และได้รู้ถึงความรับผิดชอบในงานทำงานแต่ละงานมีความตรงต่อเวลาในการทำงาน

วันเสาร์ที่ 19 กันยายน พ.ศ. 2552

Summary

Tree

ทรี (Tree) เป็นโครงสร้างข้อมูลที่มีความสัมพันธ์ระหว่าง
โหนดจะมีความสัมพันธ์ ลดหลั่นกันเป็นลำดับชั้นได้มีการ
นำรูปแบบทรีไปประยุกต์ใช้ในงานต่างๆอย่างแพร่หลาย
ส่วนมากจะใช้สำหรับแสดงความสัมพันธ์ระหว่างข้อมูล
เช่นแผนผังองค์ประกอบของหน่วยงานต่างๆโครงสร้างสาร
บัญหนังสือเป็นต้น




การท่องไปในไบนารีทรี

ปฏิบัติการที่สำคัญในไบนารีทรีคือการท่องไปในไบนารีทรี
(Traversing Binary Tree) เพื่อเข้าไปเยือนทุกๆโหนดใน
ทรีซึ่ง วิธีการท่องเข้าไปต้องเป็นไปอย่างมีระบบแบบแผน
กันหลายแบบแล้วแต่ว่าต้องการลำดับขั้นตอนการเยือน
ย่างไรโหนดที่ถูกเยือนอาจเป็นโหนดแม่ (แทนด้วย N)
ทรีย่อยทางซ้าย(แทนด้วย L) หรือทรีย่อยทางขวา
(แทนด้วย R)มีวิธีการท่องเข้าไปในทรี 6 วิธีคือ NLR LNR
LRN NRL RNL และ RLN แต่ วิธีการท่องเข้าไปไบนารีทรี
ที่นิยมใช้กันมากเป็นการท่องจากซ้ายไปขวา3
แบบแรกเท่านั้นคือNLR LNR และLRN
ซึ่งลักษณะการนิยามเป็นนิยามแบบรีเคอร์ซีฟมีดังนี้
1. การท่องไปแบบพรีออร์เดอร์
เป็นการเดินเข้าไปเยือนโหนดต่างๆในทรีด้วยวิธีNLR
(1) เยือนโหนดราก
(2) ท่องไปในทรีย่อยทางซ้ายแบบพรีออร์เดอร์
(3) ท่องไปในทรีย่อยทางขวาแบบพรีออร์เดอร์
2.การท่องไปแบบอินออร์เดอร์(Inorder Traversal)
เป็นการเดินเข้าไปเยือนโหนดต่างๆในทรีด้วยวิธี LNR
(1) ท่องไปในทรีย่อยทางซ้ายแบบอินออร์เดอร์
(2) เยือนโหนดราก
(3) ท่องไปในทรีย่อยทางขวาแบบอินออร์เดอร์
3. การท่องไปแบบโพสออร์เดอร์(Postorder Traversal)
เป็นการเดินเข้าไปเยือนโหนดต่างๆในทรีด้วยวิธี LRN
(1) ท่องไปในทรีย่อยทางซ้ายแบบโพสต์ออร์เดอร์
(2) ท่องไปในทรีย่อยทางขวาแบบโพสต์ออร์เดอร์
(3) เยือนโหนดราก
Graph
การท่องไปในกราฟ
1. การค้นหาแบบกว้าง (Breadth-first Search)
2. การค้นหาแบบลึก (Depth-first Search)
กราฟมีน้ำหนักหมายถึงกราฟที่ทุกเอดจ์มีค่าน้ำหนักกำกับ
ซึ่งค่าน้ำหนักอาจสื่อถึงระยะทางเวลาค่าใช้จ่ายเป็นต้นนิยม
นำไปใช้แก้ปัญหาหลักๆ 2 ปัญหาคือ
1. การสร้างต้นไม้ทอดข้ามน้อยที่สุด
(Minimum Spanning Trees :MST)
2. การหาเส้นทางที่สั้นที่สุด(Shortest path)
sorting
การเรียงลำดับแบบเร็ว (quick sort)
เป็นวิธีการเรียงลำดับที่ใช้เวลาน้อยเหมาะสำหรับข้อมูล
ที่มีจำนวนมากที่ต้องการความรวดเร็วในการทำงานวิธีนี้
จะเลือกข้อมูลจากกลุ่มข้อมูลขึ้นมาหนึ่งค่าเป็นค่าหลัก
แล้วหาตำแหน่งที่ถูกต้องให้กับค่าหลักนี้เมื่อได้ตำแหน่ง
ที่ถูกต้องแล้วใช้ค่าหลักนี้เป็นหลักในการแบ่งข้อมูลออก
เป็นสองส่วนถ้าเป็นการเรียงลำดับจากน้อยไปมากส่วนแรก
อยู่ในตอนหน้าข้อมูลทั้งหมดจะมีค่าน้อยกว่าค่าหลักที่เป็น
ตัวแบ่งส่วน
การค้นหาข้อมูล (Searching)
การค้นหาคือการใช้วิธีการค้นหากับโครงสร้างข้อมูลเพื่อ
ดูว่าข้อมูลตัวที่ต้องการถูกเก็บอยู่ในโครงสร้างแล้วหรือยัง
วัตถุประสงค์ของการค้นหาโดยทั่วไปได้แก่
เพื่อดูรายละเอียดเฉพาะข้อมูลส่วนที่ต้องการดึงข้อมูลตัว
ที่ค้นหาออกจากโครงสร้างเปลี่ยนแปลงแก้ไขรายละเอียด
บางอย่างของข้อมูลตัวที่ค้นพบและ/หรือ
เพิ่มข้อมูลตัวที่ค้นหาแล้วพบว่ายังไม่เคยเก็บไว้ในโครงสร้าง
เลยเข้าไปเก็บไว้ในโครงสร้างเพื่อใช้งานต่อไป
การค้นหาคือแบ่งเป็น 2 ประเภท
ตามแหล่งที่จัดเก็บข้อมูลเช่นเดียวกับการเรียงลำดับ
1. การค้นหาข้อมูลแบบภายใน (Internal Searching)
2. การค้นหาข้อมูลแบบภายนอก (External Searching)
DTS: 11-20-09-2552

วันเสาร์ที่ 12 กันยายน พ.ศ. 2552

เรื่อง Sorting

การเรียงลำดับ (Sorting)

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

การเรียงลำดับอย่างมีประสิทธิภาพ

หลักเกณฑ์ในการพิจารณาเพื่อเลือกวิธีการเรียงลำดับ
ที่ดีและเหมาะสมกับระบบงานเพื่อให้ประสิทธิภาพใน
การทำงานสูงสุดควรจะต้องคำนึงถึงสิ่งต่างๆดังต่อไปนี้

(1) เวลาและแรงงานที่ต้องใช้ในการเขียนโปรแกรม
(2) เวลาที่เครื่องคอมพิวเตอร์ต้องใช้ในการทำงานตาม
โปรแกรมที่เขียน
(3) จำนวนเนื้อที่ในหน่วยความจำหลักมีเพียงพอหรือไม่


วิธีการเรียงลำดับ

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


(1)การเรียงลำดับแบบภายใน (internal sorting)

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

(2) การเรียงลำดับแบบภายนอก(external sorting)

เป็นการเรียงลำดับข้อมูลที่เก็บอยู่ในหน่วยความจำสำรองซึ่ง
เป็นการเรียงลำดับข้อมูลในแฟ้มข้อมูล (file) เวลาที่ใช้ในการ
เรียงลำดับต้องคำนึงถึงเวลาที่เสียไประหว่างการถ่ายเทข้อมูล
จากหน่วยความจำหลักและหน่วยความจำสำรองนอกเหนือจาก
วลาที่ใช้ในการเรียงลำดับข้อมูลแบบภายใน

การเรียงลำดับแบบเลือก (selection sort)

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

1. ในรอบแรกจะทำการค้นหาข้อมูล
ตัวที่มีค่าน้อยที่สุดมาเก็บไว้ที่ตำแหน่งที่ 1
2. ในรอบที่สองนำข้อมูลตัวที่มีค่าน้อยรองลงมาไปเก็บไว้ที่
ตำแหน่งที่สอง
3. ทำเช่นนี้ไปเรื่อยๆจนกระทั่งครบทุกค่าในที่สุดจะได้ข้อมูล
รียงลำดับจากน้อยไปมากตามที่ต้องการ




การเรียงลำดับแบบฟอง (Bubble Sort)

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




การจัดเรียงลำดับแบบฟองเป็นวิธีที่ไม่ซับซ้อนมากนัก
ป็นวิธีการเรียงลำดับที่นิยมใช้กันมากเพราะมีรูปแบบที่
เข้าใจง่ายแต่ประสิทธิภาพการทำงานค่อนข้างต่ำพอๆ
กับการเรียงลำดับแบบเลือกในหัวข้อที่ผ่านมาถ้ามีจำนวน
ข้อมูลทั้งหมด n ตัวไม่ว่าข้อมูลจะเป็นอย่างไรก็ตามต้อง
ทำการเปรียบเทียบทั้งหมด n .1 รอบและจำนวนครั้งของ
การเปรียบเทียบในแต่ละรอบเป็นดังนี้

การเรียงลำดับแบบเร็ว (quick sort)

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


การเรียงลำดับแบบแทรก (insertion sort)

เป็นวิธีการเรียงลำดับที่ทำการเพิ่มสมาชิกใหม่เข้าไปใน
เซตที่มีสมาชิกทุกตัวเรียงลำดับอยู่แล้วและทำให้เซต
ใหม่ที่ได้นี้มีสมาชิกทุกตัวเรียงลำดับด้วยวิธีการเรียงลำดับจะ
1. เริ่มต้นเปรียบเทียบจากข้อมูลในตำแหน่งที่ 1 กับ 2
หรือข้อมูลในตำแหน่งสุดท้ายและรองสุดท้ายก็ได้ถ้า
เป็นการเรียงลำดับจากน้อยไปมาก
2. จะต้องจัดให้ข้อมูลที่มีค่าน้อยอยู่ในตำแหน่งก่อนข้อมูลที่มี
ค่ามากและถ้าเรียงจากมากไปน้อยจะก็จะจัดให้ข้อมูลที่มีค่ามาก
อยู่ในตำแหน่งก่อน





การเรียงลำดับแบบฐาน (radix sort)

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






DTS : 10-13-08-2552

เรื่อง Graph

Graph
กราฟ - เป็นโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้นอีก
ชนิดหนึ่ง กราฟเป็นโครงสร้างข้อมูลที่มีการนำไป
ใช้ในงานที่เกี่ยวข้องกับการแก้ปัญหาที่ค่อนข้างซับ
ซ้อน เช่น การวางข่าย งานคอมพิวเตอร์ การวิเคราะห์
ทางวิกฤติ และเส้นทางที่สั้นที่สุด

นิยามของกราฟ
กราฟ เป็นโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้นที่ประกอบ
ด้วยกลุ่มของสิ่งสองสิ่ง คือ
(1) โหนด (Nodes) หรือเวอร์เทกช์ (Vertexes)
(2) เส้นเชื่อมระหว่างโหนด เรียก เอ็ก (Edges)


โดยทั่วๆไปการเขียนกราฟเพื่อแสดงให้เห็นความสัมพันธ
ของสิ่งที่เราสนใจแทนโหนดด้วยจุด (pointes)หรือวงกลม
(circles)ที่มีชื่อหรือข้อมูลกำกับเพื่อบอกความแตกต่างของ
แต่ละโหนดและเอ็จแทนด้วยเส้นหรือเส้นโค้งเชื่อมต่อ
ระหว่างโหนดสองโหนด ถ้าเป็นกราฟแบบมีทิศทางเส้นหรือ
เส้นโค้งต้องมีหัวลูกศรกำกับทิศทางของความสัมพันธ์ด้วย




กราฟแบบไม่มีทิศทางเป็นเซตแบบจำกัดของโหนดและ
เอ็จโดยเซตอาจจะว่างไม่มีโหนดหรือเอ็จเลยเป็นกราฟว่าง
(Empty Graph) แต่ละเอ็จจะเชื่อมระหว่างโหนดสองโหนด
หรือเชื่อมตัวเองเอ็จไม่มีทิศทางกำกับลำดับของการเชื่อมต่อ
กันไม่สำคัญนั่นคือไม่มีโหนดใดเป็นโหนดแรก (First Node)
หรือไม่มีโหนดเริ่มต้นและไม่มีโหนดใดเป็นโหนดสิ้นสุด



การแทนกราฟในหน่วยความจำ

ในการปฏิบัติการโครงสร้างกราฟสิ่งที่ต้องการ
จัดเก็บจากกราฟโดยทั่วไปก็คือเอ็จซึ่งเป็นเส้น
เชื่อมระหว่างโหนดสองโหนดมีวิธีการจัดเก็บ
หลายวิธีวิธีที่ง่ายและตรงไปตรงมาที่สุดคือการ
เก็บเอ็จในแถวลำดับ 2 มิติ


การท่องไปในกราฟ
การท่องไปในกราฟ (graph traversal) คือ
กระบวนการเขื้โดยมีกในการเข้าไปเยือน
โหนดในกราฟ โดยมีหลักในการทำงาน คือ
แต่ละโหนดจะถูกเยือนเพียงครั้งเดียว
สำหรับการท่องไปในทรี่เพื่อเยือนแต่ละโหนดนั้น
จะมีเส้นทางเดียวแต่ในกราฟระหว่างโหนดอาจจะ

มีหลายเส้นทาง ดังนั้น เพื่อป้องกันการท่องไปใน
เส้นทางที่ซ้ำเดิมจึงจำเป็นต้แองทำ
เครื่องหมายบริเวณทีได้เยือนเสร็จเรียบร้้อง
เพื่อไม่ให้เข้าไปเยือนอีกสำหรับเทคนิคท่องไป
ในกราฟมี 2 แบบดัีงนี้



1. การท่องแบบกว้าง (Breadth First Traversal)
วิธีนี้ทำโดยเลือกโหนดที่เป็นจุดเริ่มต้นต่อมาให้เยือน
โหนดอื่นที่ใกล้กันกับโหนดเริ่มต้นทีละระดับจนกระทั่ง
เยือนหมดทุกโหนดในกราฟ




2. การท่องแบบลึก (Depth First Traversal)
การทำงานคล้ายกับการท่องทีละระดับของทรีโดย
กำหนดเริ่มต้นที่โหนดแรกและเยือนโหนดถัดไปตาม
แนววิถีนั้นจนกระทั่งนำไปสู่ปลายวิถีนั้นจากนั้นย้อนกลับ
(backtrack) ตามแนววิถีเดิมนั้นจนกระทั่งสามารถดำเนิน
การต่อเนื่องเข้าสู่แนววิถีอื่นๆเพื่อเยือนโหนดอื่นๆต่อไป
จนครบทุกโหนด


DTS : 09-13-08-2552

วันศุกร์ที่ 28 สิงหาคม พ.ศ. 2552

เรื่อง Tree

ทรี (Tree)
เป็นโครงสร้างข้อมูลที่ความสัมพันธ์ระหว่างโหนดจะมีความสัมพันธ์
ลดหลั่นกันเป็นลำดับชั้น(Hierarchical Relationship)
แต่ละโหนดจะมีความสัมพันธ์กับโหนดในระดับที่ต่ำลงมา
หนึ่งระดับได้หลายๆโหนดเรียกโหนดดังกล่าวว่า โหนดแม่
(Parent orMother Node) โหนดที่อยู่ต่ำกว่าโหนดแม่อยู่หนึ่งระดับ
เรียกว่า โหนดลูก(Child or Son Node)
โหนดที่อยู่ในระดับสูงสุดและไม่มีโหนดแม่เรียกว่าโหนดราก(Root Node)


-โหนดที่มีโหนดแม่เป็นโหนดเดียวกันเรียกว่า โหนดพี่น้อง (Siblings)
โหนดที่ไม่มีโหนดลูก เรียกว่าโหนดใบ (Leave Node) เส้นเชื่อมแสดง
ความสัมพันธ์ระหว่าง โหนดสองโหนดเรียกว่า กิ่ง (Branch)

นิยามของทรี
1. นิยามทรีด้วยนิยามของกราฟทรี คือ กราฟที่ต่อเนื่องโดยไม่มีวงจรปิด
(loop) ในโครงสร้าง โหนดสองโหนดใด ๆ ในทรีต้องมีทางติดต่อกัน
ทางเดียว เท่านั้น และทรีที่มี N โหนด ต้องมีกิ่งทั้งหมด N-1 เส้น

2. นิยามทรีด้วยรูปแบบรีเคอร์ซีฟทรีประกอบด้วยสมาชิกที่เรียกว่าโหนด
โดยที่ ถ้าว่าง ไม่มีโหนดใด ๆ เรียกว่านัลทรี (Null Tree) และถ้ามี
โหนดหนึ่งเป็นโหนดราก ส่วนที่เหลือจะแบ่งเป็นทรีย่อย
(Sub Tree) T1, T2, T3,…,Tk
โดยที่ k>=0 และทรีย่อยต้องมีคุณสมบัติเป็นทรี


นิยามที่เกี่ยวข้องกับทรี
1. ฟอร์เรสต์ (Forest)หมายถึง กลุ่มของทรีที่เกิดจากการเอาโหนดราก
ของทรีออกหรือ เซตของทรีที่แยกจากกัน(Disjoint Trees)

2. ทรีที่มีแบบแผน (Ordered Tree)หมายถึง ทรีที่โหนดต่าง ๆ
ในทรีนั้นมีความสัมพันธ์ที่แน่นอน เช่น ไปทางขวาไปทางซ้าย เป็นต้น

3. ทรีคล้าย (Similar Tree) คือทรีที่มีโครงสร้างเหมือนกัน หรือทรีที่มี
รูปร่างของทรีเหมือนกัน โดยไม่คำนึงถึงข้อมูลที่อยู่ในแต่ละโหนด

4. ทรีเหมือน (Equivalent Tree) คือทรีที่เหมือนกันโดยสมบูรณ์
โดยต้องเป็นทรีที่ คล้ายกันและแต่ละโหนดในตำแหน่งเดียวกันมี
ข้อมูลเหมือนกัน

5. กำลัง (Degree) หมายถึงจำนวนทรีย่อยของโหนด นั้น ๆ

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

-โครงสร้างทรีที่แต่ละโหนดมีลิงค์ฟิลด์แค่สองลิงค์ฟิลด์ ซึ่งช่วยให้ประหยัด
เนื้อที่ ในการจัดเก็บได้มาก เรียกโครงสร้างทรีที่แต่ละโหนดมีจำนวนโหนดลูก
ไม่เกินสอง หรือแต่ละโหนดมีจำนวนทรีย่อยไม่เกินสองนี้ว่า ไบนารีทรี
(Binary Tree) มีวิธีการท่องเข้าไปในทรี 6 วิธี
คือ NLR LNR LRN NRL RNL และ RLN
แต่วิธีการท่องเข้าไปไบนารีทรีที่นิยมใช้กันมากเป็นการท่องจากซ้ายไปขวา
3 แบบแรกเท่านั้นคือ NLR LNR และ LRN ซึ่งลักษณะการเป็นนิยามแบบ
รีเคอร์ซีฟ(Recursive) ซึ่งขั้นตอนการท่องไปในแต่ละแบบมีดังนี้

1. การท่องไปแบบพรีออร์เดอร์(Preorder Traversal)เป็นการเดินเข้าไปเยือนโหนดต่าง ๆ
ในทรีด้วยวิธีNLR มีขั้นตอนการเดินดังต่อไปนี้
(1) เยือนโหนดราก
(2) ท่องไปในทรีย่อยทางซ้ายแบบพรีออร์เดอร์
(3) ท่องไปในทรีย่อยทางขวาแบบพรีออร์เดอร์

2.การท่องไปแบบอินออร์เดอร์(Inorder Traversal)เป็นการเดินเข้าไปเยือนโหนดต่าง
ๆในทรีด้วยวิธี LNRมีขั้นตอนการเดินดังต่อไปนี้
(1) ท่องไปในทรีย่อยทางซ้ายแบบอินออร์เดอร์
(2) เยือนโหนดราก
(3) ท่องไปในทรีย่อยทางขวาแบบอินออร์เดอร์

3. การท่องไปแบบโพสออร์เดอร์(Postorder Traversal)เป็นการเดินเข้าไปเยือนโหนดต่าง ๆ
ในทรีด้วยวิธี LRN มีขั้นตอนการเดินดังต่อไปนี้
(1) ท่องไปในทรีย่อยทางซ้ายแบบโพสต์ออร์เดอร์
(2) ท่องไปในทรีย่อยทางขวาแบบโพสต์ออร์เดอร์
(3) เยือนโหนดราก


DTS:08-28-08-2552

เรื่อง Queue

เรื่อง Queue

คิว (Queue) เป็นโครงสร้างข้อมูลแบบเชิงเส้นหรือลิเนียร์ลิสต์ซึ่งการเพิ่ม
ข้อมูล จะกระทำที่ปลายข้างหนึ่งซึ่ง เรียกว่าส่วนท้ายหรือเรียร์ (rear)
และการนำข้อมูล ออกจะกระทำที่ปลายอีกข้างหนึ่งซึ่งเรียกว่า
ส่วนหน้าหรือฟรอนต์(front)

ลักษณะการทำงานของคิวเป็นลักษณะของการเข้าก่อนออกก่อนหรือที่
เรียกว่าFIFO (First In First Out)
การทำงานของคิวการใส่สมาชิกตัวใหม่ลงในคิว
เรียกว่าEnqueueซึ่งมีรูปแบบคือenqueu(queue,newElement)
หมายถึง การใส่ข้อมูลnewElement ลงไปที่ส่วนเรียร์ของคิว

การนำสมาชิกออกจากคิว เรียกว่าDequeue ซึ่งมีรูปแบบคือdequeue
(queue, element) หมายถึง การนำออกจากส่วนหน้าของคิวและให้
ข้อมูลนั้นกับ element
-การนำข้อมูลที่อยู่ตอนต้นของคิวมาแสดงจะเรียกว่า Queue Front
แต่จะไม่ทำการเอาข้อมูลออกจากคิว
-การนำข้อมูลที่อยู่ตอนท้ายของคิวมาแสดงจะ เรียกว่าQueue Rear
แต่จะไม่ทำการเพิ่มข้อมูลเข้าไปในคิว

การแทนที่ข้อมูลของคิวสามารถทำได้ 2 วิธี คือ
1. การแทนที่ข้อมูลของคิวแบบลิงค์ลิสต์
2. การแทนที่ข้อมูลของคิวแบบอะเรย์

การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์จะประกอบไปด้วย 2 ส่วน คือ
1. Head Nodeจะประกอบไปด้วย 3 ส่วนคือพอยเตอร์จำนวน 2 ตัว
คือ Front และ rear กับจำนวนสมาชิในคิว
2. Data Node จะประกอบไปด้วยข้อมูล (Data) และพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป

การดำเนินการเกี่ยวกับคิว ได้แก่
1.Create Queue คือ จัดสรรหน่วยความจำให้แก่ Head Node และให้ค่า pointer
ทั้ง 2 ตัวมีค่าเป็น null และจำนวนสมาชิกเป็น
2. Enqueue คือ การเพิ่มข้อมูลเข้าไปในคิว
3. Dequeue คือ การนำข้อมูลออกจากคิว
4. Queue Front คือ เป็นการนำข้อมูลที่อยู่ส่วนต้นของคิวมาแสดง
5. Queue Rear คือ เป็นการนำข้อมูลที่อยู่ส่วนท้ายของคิวมาแสดง
6. Empty Queue คือเป็นการตรวจสอบว่าคิวว่างหรือไม่
7. Full Queue คือ เป็นการตรวจสอบว่าคิวเต็มหรือไม่
8. Queue Count คือ เป็นการนับจำนวนสมาชิกที่อยู่ในคิว
9. Destroy Queue คือ เป็นการลบข้อมูลทั้งหมดที่อยู่ในคิว

DTS:07-28-08-2552

เรื่อง stack

สแตก เ ป็นโครงสร้างข้อมูลที่เป็นแบบลิเนียร์ลิสต์ มีคุณสมบัติ
ที่ว่า การเพิ่มหรือลบข้อมูลในสแตก

ลักษณะที่สำคัญของสแตก คือ
ข้อมูลที่ใส่หลังสุดจะถูกนำออกมา จากสแตกเป็นลับดับแรกสุด
เรียกว่า LIFO ( Last In First Out)

การทำงานของสแตกประกอบไปด้วย 3 กระบวนที่สำคัญ คือ
1. Push คือ การนำข้อมูลใส่ลงไปในสแตก
เช่น สแตก s ต้องการใส่ข้อมูล i ในสแตก จะได้ push (s,i )
2. Pop คือ การนำข้อมูลออกจากส่วนบนสุดของสแตก
เช่น ต้องการนำข้อมูลออกจากสแตก sไปไว้ที่ตัวแปร i
จะได้ i = pop (s)

การแทนที่ข้อมูลของสแตก
สามารถทำได้ 2 วิธี
1. การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์
2. การแทนที่ข้อมุลของสแตกแบบอะเรย์

การดำเนินการเกี่ยวกับสแตก ได้แก่
1. Create Stact จัดสรรหน่วยความจำให้แก่ Head Nodeและส่งค่าตำแหน่งที่ชี้ไปยัง
Head ของสแตกกลับมา
2. Push Stact การเพิ่มข้อมูลลงไปในสแตก
3. Pop stact การนำข้อมูลบนสุดออกจากสแตก
4. stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก โดยไม่มีการลบข้อมูลออกจากสแตก
5. Empty stack เป็นการตรวจสอบการว่างของสแตก เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลออกจากสแตกที่เรียกว่า Stack Underflow เป็นการตรวจสอบว่าสแตกเต็มหรือไม่ เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลเข้าสแตกที่เรียกว่า Stack Overflow
6. Full Stack เป็นการตรวจสอบว่าสแตกเต็มหรือไม่ เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลเข้าสแตกที่เรียกว่า Stack Overflow
7. Stack Count เป็นการนับจำนวนสมาชิกในสแตก
9. Destroy Stack เป็นการลบข้อมูลทั้งหมดที่อยู่ในสแตก

การประยุกต์ใช้สแตก
จะใช้ในงานด้านปฏิบัติการของเครื่องคอมพิวเตอร์ที่ขั้นตอนการทำงานต้องการเก็บข่าวสาร
อันดับแรกสุดไว้ใช้หลังสุด
เช่น การทำงานของโปรแกรมแปลภาษานำไปใช้ในเรื่องของการโปรแกรมที่เรียกใช้โปรแกรย่อยการคำนวณนิพจน์ทางคณิตศาสตร์ และรีเคอร์ชั่น (Recursion)


DTS:06-28-08-2552

วันอังคารที่ 4 สิงหาคม พ.ศ. 2552

วันจันทร์ที่ 27 กรกฎาคม พ.ศ. 2552

ยกตัวอย่างสิ่งที่เกิดขึ้นในชีวิตประจำวัน Last in first out

last in first out ที่เกิดขึ้นในชีวิตประจำวัน
การเก็บรถเข็นในห้างสรรพสินค้า
รถเข็นที่เก็บในห้างพนักงานจะซ้อนรถเข็นซึ่งจะเอา
คันแรกเป็นหลักและเอาคันต่อ ๆ ไปมาซ้อนเข้าเรื่อย ๆ
จนยาว เมื่อนำไปขึ้นห้างพนักก็จะนำตัวสุดท้ายไปวางไว้
เป็นคันแรกในการใช้

DTS : 05-28-07-2552

วันพุธที่ 22 กรกฎาคม พ.ศ. 2552

สรุปการเรียน Lecture 4 เรื่อง Linked List

สรุป Linked List

ลิงค์ลิสต์ (Linked List) เป็นวิธีการเก็บ
ข้อมูลอย่างต่อเนื่องของอิลิเมนต์ต่าง ๆ โดยมี
พอยเตอร์เป็นตัวเชื่อมต่อ
แต่ละอิลิเมนท์ เรียกว่าโนด (Node)

โครงสร้างข้อมูลแบบลิงค์ลิสต์จะแบ่งเป็น 2 ส่วน คือ
1. Head Structure จะประกอบไปด้วย 3 ส่วน
ได้แก่ จำนวนโหนดในลิสต์ (Count) พอยเตอร์ที่ชี้ไปยัง
โหนดที่เข้าถึง (Pos) และพอยเตอร์ที่ชี้ไปยังโหนดข้อมูล
แรกของลิสต์ (Head)
2. Data Node Structure จะประกอบไปด้วยข้อมูล

(Data) และพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป


กระบวนงานและฟังก์ชั่นที่ใช้ดำเนินงานพื้นฐาน
1. กระบวนงาน Create List
หน้าที่ สร้างลิสต์ว่าง
ผลลัพธ์ ลิสต์ว่าง


2. กระบวนงาน Insert Node
หน้าที่เพิ่มข้อมูลลงไปในลิสต์บริเวณตำแหน่ง
ที่ต้องการ
ข้อมูลนำเข้า ลิสต์ ข้อมูล และตำแหน่ง
ผลลัพธ์ ลิสต์ที่มีการเปลี่ยนแปลง


3. กระบวนงาน Delete Node
หน้าที่ ลบสมาชิกในลิสต์บริเวณตำแหน่ง
ที่ต้องการ
ข้อมูลนำเข้า ข้อมูลและตำแหน่ง
ผลลัพธ์ ลิสต์ที่มีการเปลี่ยนแปลง


4. กระบวนงาน Search list
หน้าที่ ค้นหาข้อมูลในลิสต์ที่ต้องการ
ข้อมูลนำเข้าลิสต์
ผลลัพธ์ ค่าจริงถ้าพบข้อมูล ค่าเท็จถ้าไม่
พบข้อมูล


5. กระบวนงาน Traverse
หน้าที่ ท่องไปในลิสต์เพื่อเข้าถึงและ
ประมวลผลข้อมูลนำเข้าลิสต์
ผลลัพธ์ ขึ้นกับการประมวลผล เช่น
เปลี่ยนแปลงค่าใน node , รวมฟิลด์ในลิสต์ ,
คำนวณค่าเฉลี่ยของฟิลด์ เป็นต้น


6. กระบวนงาน Retrieve Node
หน้าที่ หาตำแหน่งข้อมูลจากลิสต์
ข้อมูลนำเข้าลิสต์ผลลัพธ์ ตำแหน่งข้อมูลที่อยู่ในลิสต์


7. ฟังก์ชั่น EmptyList
หน้าที่ ทดสอบว่าลิสต์ว่างข้อมูลนำเข้า ลิสต์
ผลลัพธ์ เป็นจริง ถ้าลิสต์ว่าง
เป็นเท็จ ถ้าลิสต์ไม่ว่าง


8. ฟังก์ชั่น FullList
หน้าที่ ทดสอบว่าลิสต์เต็มหรือไม่ข้อมูล
นำเข้าลิสต์
ผลลัพธ์ เป็นจริง ถ้าหน่วยความจำเต็ม
เป็นเท็จ ถ้าสามารถมีโหนดอื่น


9. ฟังก์ชั่น list count
หน้าที่ นับจำนวนข้อมูลที่อยู่ในลิสต์
ข้อมูลนำเข้าลิสต์
ผลลัพธ์ จำนวนข้อมูลที่อยู่ในลิสต์


10. กระบวนงาน destroy list
หน้าที่ ทำลายลิสต์
ข้อมูลนำเข้า ลิสต์
ผลลัพธ์ ไม่มีลิสต์


Circular Linked List เป็นลิงค์ลิสต์ที่สมาชิก
ตัวสุดท้ายมีตัวชี้ (list) ชี้ไปที่สมาชิกตัวแรกของ
ลิงค์ลิสต์ จะมีการทำงานไปในทิศทางเดียวเท่านั้น
คือเป็นแบบวงกลม



DTS : 04-22-07-2552

วันอังคารที่ 14 กรกฎาคม พ.ศ. 2552

สรุปการเรียน Lecture 3 เรื่อง Set and String

สรุป Set and String

เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งของที่

อยู่(Address) ของตัวแปรที่อยู่ในหน่วยความจำรูป
แบบของมันก็จะมีลักษณะ Type *variable-name
คือ Type =ชนิดของตัวแปร // ส่วน * =
เป็นเครื่องหมายที่แสดงว่าตัวแปรที่ตามหลัง
เครื่องหมายนี้เป็น ตัวแปรพ้อยเตอร์ //variable-name =
เป็นตัวแปรที่ประกาศว่าเป็นชนิดพ้อยเตอร์ตัวอย่าง

เช่น count100 Address2000
คือ ตำแหน่งที่2000 countมีค่าเท่ากับ100สตริง

(String) หรือสตริงของอักขระ (Character String)
เป็นข้อมูลที่ประกอบไปด้วย ตัวอักษร อักขระ

ตัวเลขความยาวของสตริง จะถูกกำหนดโดยขนาดของ
สตรีง ต้องจองเนื้อที่ให้กับ(\0) ด้วยการกำหนดค่าให้กับ
สตริงนั้นให้ใช้ เครื่องหมาย Double quote("") ถ้าสมมุติ
ต้องการสตริงสำหรับ ข้อมูลยาวไม่เกิน10อัขระต้องกำหนด
ขนาดอะเรย์11ช่อง เพื่อเก็บ null character(\0) ด้วย

ตัวอย่าง
char *prt หมายความว่า ประกาศว่าตัวแปร prt เป็นตัวแปร

พอยน์เตอร์ ที่ใช้เก็บตำแหน่งเริ่มต้นที่จะเก็บ char
เครื่องหมายที่ใช้ทำงานกับตัวแปรพอยน์เตอร์
1. เครื่องหมาย & เป็นเครื่องหมายที่ใช้เมื่อต้องการให้

เอาค่าตำแหน่งที่ อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำออกมาใช้
2. เครื่องหมาย * มีการใช้งาน 2 ลักษณะ คือ
- ใช้ในการประกาศ parameter ว่าเป็นตัวแปรแบบพอยน์เตอร์
- ใช้เป็น dereferencing operator จะใช้เมื่อต้องการนำค่า

ที่อยู่ใน ตำแหน่งที่ตัวแปรพอยน์เตอร์นั้นชี้อยู่ออกมาแสดง


แบบฝึกหัด ท้ายบทที่2

1.ให้นักศึกษากำหนดค่าของ Array1มิติ และ Array2มิติ
ตอบ Array 1 มิติ data type

Array 2 มิติ char a [2][3]

2. ให้นักศึกษาหาค่าของ A[2],A[6]จากค่า A={2,8,16,24,9,7,3,8}
ตอบ A[2]= 16, A[6]= 3

3.จากค่าของ int a[2][3]={{6,5,4},{3,2,1}};ให้นักศึกษา หาค่าของ a[1][0]และ a[0][2]
ตอบ a[1][0] = 3, a[0][2]= 4

4.ให้นักศึกษากำหนด Structure ที่มีค่าของข้อมูลจากน้อย 6 Records
ตอบ int day ;

int month;
int year;
}datee;
struct customer
char name [20];
char lastname[20];
char addr[50] ;
char sex[10] ;
int age;

5. ให้นักศึกษาบอกความแตกต่างของการกำหนดตัวชนิด Array กับ ตัวแปร Pointer ในสภาพของการกำหนดที่อยู่ของข้อมูล
ตอบ ความแตกต่างระหว่างตัวแปร Array และ Pointer คือตัวแปรArrayชุดที่ใช้เก็บตัวแปรชนิดเดียวกันไว้ด้วยกัน เช่น เก็บ ข้อมูล char ไว้กับ char เก็บ int ไว้กับ int ไม่สามารถเก็บข้อมูลต่างชนิดกันได้ เช่น char กับ int เรียก array อีกอย่างว่าหน่วยความจำแบ่งเป็นช่อง การกำหนดสมาชิกชิกของ array จะเขียนภายในเครื่องหมาย [ ]แต่ ตัวแปรพอยเตอร์จะเก็บเฉพาะค่าตำแหน่ง Address ตัวแปรเท่านั้นและดัชนีที่ เก็บค่าตำแหน่งแอดเดรสของหน่วยความจำ ซึ่งตัวแปรพอยเตอร์นั้น จะมีเครื่องหมายดอกจันทร์ (*) นำหน้าเสมอ


DTS : 03-14-07-52






วันอังคารที่ 30 มิถุนายน พ.ศ. 2552

-structure-

#include "stdio.h"
struct Customer
{
int day ;
int month;
int year;
}datee;
struct customer
{
char name [20];
char lastname[20];
char addr[50] ;
char sex[10] ;
int age;
}data;
void main()
{
printf("Enter Customer");
printf("Enter Name :");
scanf ("%s",&data.name );
printf("Enter lastname:");
scanf ("%s",&data.lastname);
printf ("Enter address :");
scanf ("%s",&data.addr);
printf("Enter sex:");
scanf("%s",&data.sex);
printf("Enter age:");
scanf("%d",&data.age);
printf("BirthDay dd/mm/yy :");
scanf("%d/%d/%d",&datee.day,&datee.month,&datee.year);
{
printf("\n\nName: %s\n",data.name);
printf("lastname: %s\n",data.lastname);
printf("adderss: %s\n",data.addr);
printf("sex: %s\n",data.sex);
printf("age: %d\n",data.age);
printf("birthday : %d-%d-%d",datee.day,datee.month,datee.year);
}
}


DTS : 02-01-07-2552

สรุปการเรียน Lecture 1 เรื่อง Introduction

1. ทราบถึงความหมายของข้อมูล

2. ทราบถึงประเภทของข้อมูล

3. ทราบถึงการแทนที่ข้อมูลในหน่วความจำหลักว่าในการเขียนโปรแกรมคอมพิวเตอร์ จะมีการแทนที่ข้อมูลในหน่วยความจำหลักอยู่ 2 วิธี


ภาษาขั้นตอนวิธี (Algorithm Language)

เป็นภาษาสำหรับเขียนขั้นตอนวิธี มีรูปแบบที่สั้น กระชับแลรัดกุม และมีข้อกำหนด
ดังต่อไปนี้
1. ตัวแปรจะต้องเขียนแทนด้วยตัวอักษร หรือตัวอักษรผสมตัวเลข
2. การกำหนดค่าให้ตัวแปร ใช้เครื่องหมาย
3. นิพจน์ที่เป็นการคำนวณจะมีลำดับขั้นของการคำนวณตามลำดับ คือวงเล็บ, ยกกำลัง , คูณหรือหาร, บวกหรือลบเครื่องหมายระดับความสำคัญเท่ากัน คำนวณจากซ้ายไปขวา
4. ข้อความไปยังขั้นตอน ใช้รูปแบบ คือgoto เลขที่ขั้นตอน
5. การเลือกทำตามเงื่อนไข จะต้องตรวจสอบเงื่อนไขก่อนทำงาน มีรูปแบบดังนี้ - แบบทางเลือกเดียว ใช้รูปแบบ คือif (condition) then statement1 - แบบสองทางเลือก ใช้รูปแบบ คือif (condition) then statement1 else statement 2
6. การทำงานแบบซ้ำ - แบบทดสอบเงื่อนไขที่ต้นวงรอบ มีรูปแบบ ดังนี้ while (condition) do statement - แบบทำซ้ำด้วยจำนวนครั้งของการทำซ้ำคงที่ มีรูปแบบ for a=b to n by c do statement

DTS : 01-17-06-2552

วันเสาร์ที่ 27 มิถุนายน พ.ศ. 2552

สรุปการเรียน Lecture 2 เรื่อง Array and Record

ทราบถึงการกำหนด Subscript แต่ละตัวจะกำหนดค่าสูงสุด และต่ำสุด ของSubscript นั้นการประกาศค่าตัวแปรอะเรย์ในภาษาคอมพิวเตอร์บางภาษา ในการเรียนครั้งที่สองนี้ได้เรื่องของ Array and Record ได้ทราบถึงการทำงานของอะเรย์ 1 มิติและหลายมิติ รวมถึงการส่งค่าอะเรย์ในฟังก์ชั้นว่ามีกี่ลักษณะ และทราบถึงวิธีการดำเนินการที่เกี่ยวข้องกับเรคคอร์ด ข้อมูล ยังทราบถึงการอ้างถึงตัวแปรที่อยู่ในตัวแปรชนิดโครงสร้าง ว่ามีกี่รูปแบบ และยังรู้ถึงการรวมตัวแปรของ Structure หลาย ๆ ตัวแปรไว้ในชื่ออ้างอิงร่วมกัน รวมถึงการส่งผ่าน Structure ให้กับฟังก์ชั้นต่าง ๆและอีกตัวคือ Pointer เป็นการทำหน้าที่เก็บตำแหน่งที่อยู่ ของตัวแปรในหน่วยความจำ

ข้อกำหนดของการกำหนดค่าต่ำสุดและค่าสูงสุดของ subscript คือ
1. ค่าต่ำสุดต้องมีค่าน้อยกว่าหรือเท่ากับค่าสูงสุดเสมอ
2. ค่าต่ำสุด เรียกว่า ขอบเขตล่าง (lower bound)
3. ค่าสูงสุด เรียกว่า ขอบเขตบน (upper bound)

อะเรย์ 1 มิติ
รูปแบบdata-type array-name[expression]
data-type คือ ประเภทของข้อมูลอะเรย์ เช่น int char float
array-name คือ ชื่อของอะเรย์expression คือ นิพจน์จำนวน


DTS : 02-27-06-09

วันพุธที่ 24 มิถุนายน พ.ศ. 2552

ประวัติส่วนตัว




ประวัติส่วนตัว

ชื่อ : สุกัญญา วาทีตรง


Name : Sukunya Wateetnong


รหัสนักศึกษา : 50152792054


กำลังศึกษา : การบริหารธุรกิจ(คอมพิวเตอร์ธุรกิจ) คณะวิทยาการจัดการ มหาวิทยาลัยราชภัฎสวนดุสิต



DTS:01-24-2552