วันศุกร์ที่ 26 พฤศจิกายน พ.ศ. 2553

การปฎิบัติงานสัปดาห์ที่ 4

วันที่ 22-26 พฤศจิกายน 2553

วันที่ 22 พฤศจิกายน 53

- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  • กระเป๋าสปันบอนด์ จำนวน 30 ใบ
  • ปากกา จำนวน 10 แพ็ค
  • แก้วน้ำ (แพ็คคู่) จำนวน 12 แพ็ค
  • คู่มืออัตราเบี้ยประกัน จำนวน 1 เล่ม
  • กระเป๋าอเนกประสงค์ จำนวน 20 ใบ
  • กระเป๋า Shopping จำนวน 15 ใบ

วันที่ 23 พฤศจิกายน 53

- สรุปรายการส่งเสริมการขาย เดือน พฤศจิกายน 2553
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  • กระเป๋าสปันบอนด์ จำนวน 20 ใบ
  • ปากกา จำนวน 4 แพ็ค
  • คู่มืออัตราเบี้ยประกัน จำนวน 5 เล่ม
  • แก้วน้ำ (แพ็คคู่) จำนวน 5 แพ็ค

วันที่ 24 พฤศจิกายน 53

- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  • เสื้อPolo จำนวน 6 ตัว
  • เสื้อJacket จำนวน 2 ตัว
  • กระเป๋าสปันบอนด์ จำนวน 30 ใบ
- เช็คสินค้าในสต๊อค ดังนี้
  • เสื้อPolo จำนวน 12 ตัว
  • เสื้อJacket จำนวน 65 ตัว
  • เสื้อPolo (สัมนา) จำนวน 62 ตัว
- สรุปรายการสินค้าส่งเสริมการขายประจำเดือน พฤศจิกายน 2553

วันที่ 25 พฤศจิกายน 2553

- เย็บใบแทรกหนังสือคุ่มือตัวแทนประกันชีวิตมาตรฐาน จำนวน 1,425 ชุด
- สรุปรายการจำหน่ายสินค้าส่งเสริมการขายประจำเดือน พฤศจิกายน 2553
- จัดสินค้าจากใบส่งเสริมการขายประจำเดือน พฤศจิกายน 2553
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  • ร่ม จำนวน 8 คัน
  • กระเป๋า Shopping จำนวน 10 ใบ
  • แก้วน้ำ (แพ็คคู่) จำนวน 10 แพ็ค
  • กระเป๋าอเนกประสงค์ จำนวน 20 ใบ

วันที่ 26 พฤศจิกายน 53

- สรุปรายการจำหน่ายสินค้าส่งเสริมการขายประจำเดือน พฤศจิกายน 2553
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  • กระเป๋า Shopping จำนวน 30 ใบ
  • ร่ม จำนวน 30 คัน
  • การ์ดวันเกิด จำนวน 15 ชุด
  • แก้วน้ำ (แพ็คคู่) จำนวน 10 แพ็

ปัญหาในการปฏิบัติงาน

- หาไฟล์งานในเครื่องคอมพิวเตอร์ไม่เจอ

วิธีการแก้ไขปัญหา

- ค่อย ๆ เปิดหาไฟล์งานใหม่อีกครั้ง อย่างช้าๆ และละเอียดรอบครอบ

ประโยชน์ที่ได้รับ

- เรียนรู้การพูดคุยกับคนที่อาวุโสกว่า และรู้จักวิธีการรับโทรศัพท์ที่ถูกต้อง

วันพฤหัสบดีที่ 18 พฤศจิกายน พ.ศ. 2553

การปฎิบัติงานสัปดาห์ที่ 3

วันที่ 15-19 พฤศจิกายน 2553
วันที่ 15 พฤศจิกายน

- ปริ้นท์ใบเสนอขาย จำนวน 27 ใบ
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  1. เสื้อ Polo จำนวน 4 ตัว
  2. กระเป๋า Shopping จำนวน 15 ใบ
  3. กระเป๋าสปันบอนด์ จำนวน 10 ใบ
  4. แก้วน้ำ (แพ็คคู่) จำนวน 5 แพ็ค
  5. เสื้อ Jacket จำนวน 1 ตัว

วันที่ 16 พฤศจิกายน

- ปริ้นท์ใบเสนอขาย จำนวน 15 ใบ
-สรุปรายการจำหน่ายสินค้าส่งเสริมการขาย เดือนพฤศจิกายน 2553
- จัดสินค้าจากใบสั่งซื้อ ดังนี้

  1. เสื้อ Polo จำนวน 5 ตัว
  2. เสื้อ Jacket จำนวน 1 ตัว
  3. กระเป๋าสปันบอนด์ จำนวน 20 ใบ
  4. Tissue ทรงลูกเต๋า จำนวน 4 กล่อง
  5. แก้วน้ำ (แพ็คคู่) จำนวน 5 แพ็ค

วันที่ 17 พฤศจิกายน

- จัดแบบบันทึกข้อมูลลูกค้า จำนวน 16 ชุด
- ปริ้นท์ใบเสนอขาย จำนวน 7 ใบ
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  1. กระเป๋า Shopping จำนวน 5 ใบ
  2. เสื้อ Polo จำนวน 3 ตัว
  3. คู่มือตัวแทนประกันชีวิตมาตรฐาน จำนวน 8 เล่ม
  4. ปากกา จำนวน 5 แพ็ค
  5. สมุดตารางนำวิถี จำนวน 1 เล่ม
วันที่ 18 พฤศจิกายน

- สรุปรายการสินค้าส่งเสริมการขาย เดือนพฤศจิกายน 2553
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  1. คู่มืออัตราเบี้ยประกัน จำนวน 2 เล่ม
  2. กระเป๋าสปันบอนด์ จำนวน 100 ใบ
  3. กระเป๋าอเนกประสงค์ จำนวน 20 ใบ
  4. กระเป๋า Shopping จำนวน 5 ใบ
  5. ร่มยาว จำนวน 2 คัน
  6. แผนการศูนย์งานของผู้จัดการ จำนวน 3 เล่ม
วันที่ 19 พฤศจิกายน

- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  1. ร่มยาว จำนวน 5 คัน
  2. กระเป๋า Shopping จำนวน 40 ใบ
  3. ปากกา จำนวน 6 แพ็ค
  4. คู่มืออัตราเบี้ยประกัน จำนวน 1 เล่ม
  5. กระเป๋าสปันบอนด์ จำนวน 20 ใบ

ปัญหาในการปฎิบัติงาน

- ตรวจนับรายการสินค้าผิด ทำให้สินค้าไม่ครบ

- เครื่องแฟกซ์กระดาษติด

แนวทางแก้ไขปัญหา

- ตรวจนับอีกครั้ง และนับอย่างละเอียด รอบครอบ

- ดึงกระดาษออกแล้วแฟกซ์ใหม่อีกครั้ง


ประโยชน์ที่ได้รับ

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

วันเสาร์ที่ 13 พฤศจิกายน พ.ศ. 2553

การปฎิบัติงานสัปดาห์ที่ 2

วันที่ 8-12 พฤศจิกายน 2553


วันที่ 8 พ.ย. 53

- สรุปรายการจำหน่ายสินค้าส่งเสริมการขาย ประจำเดือน พฤศจิกายน 2553
- ปริ้นท์ใบเสนอขาย จำนวน 15 ใบ
- จัดรายงานการโอนย้ายสินค้าเข้าแฟ้ม 1 ชุด
- จัดรายงานรายละเอียดยอดสินค้าขายเข้าแฟ้ม 1 ชุด
- จัดสินค้าจากใบสั่งซื้อ ดังนี้

  1. กระเป๋าอเนกประสงค์ 10 ใบ
  2. กระเป๋าสปันบอนด์ 50 ใบ
  3. Tissue ทรงลูกเต๋า 5 กล่อง


วันที่ 9 พ.ย. 53

- ปริ้นท์ใบเสนอขาย 6 ใบ
- เช็คสินค้าในสต๊อค ดังนี้

  1. เสื้อ Jacket 80 ตัว
  2. เสื้อ Polo จำนวน 52 ตัว

- จัดทำใบเช็คสินค้าในสต๊อค จำนวน 3 ใบ
- ปริ้นท์ใบเช็คสต๊อค รับสินค้าโครงการ 8 ใบ

10 พ.ย. 53

- สรุปรายการจำหน่ายสินค้าส่งเสริมการขาย เดือน พฤศจิกายน 2553
- เย็บใบแทรกหนังสือคู่มือตัวแทนประกันชีวิตมาตรฐาน จำนวน 500 ชุด
- จัดสินค้าจากใบสั่งซื้อ ดังนี้

  1. กระเป๋าอเนกประสงค์ 50 ใบ
  2. แก้วน้ำแพ็คคู่ 10 แพ็ค
  3. การ์ดวันเกิด 2 ชุด
11 พ.ย. 53

- สรุปรายการจำหน่ายสินค้าส่งเสริมการขาย เดือน พฤศจิกายน 2553
- เช็คสินค้าในสต๊อคและจัดเรียง ดังนี้

  1. แบบบันทึกข้อมูลลูกค้า 90 ชุด
  2. แบบประกันดังใจ 18/12 200 ชุด
  3. แบบประกันดังฝัน 50 ชุด
  4. แบบประกันห่วงรัก ป้องรัก 50 ชุด
  5. แบบประกันดังฝัน 110 100 ชุด
  6. แบบประกันกรุงเทพ 115 200 ชุด
  7. แบบประกัน ดังใจ 10/7 200 ชุด
  8. เพิ่มเติมอัตราเบี้ย 300 ชุด

12 พ.ย. 53

- ปริ้นท์ใบเสนอขาย 5 ใบ
- เช็คสินค้าในสต๊อค ดังนี้
1. ปากกา 100 แพ็ค

- สรุปรายการจำหน่ายสินค้าส่งเสริมการขาย เดือน พฤศจิกายน 2553
- จัดสินค้าจากใบสั่งซื้อ ดังนี้
  1. กระเป๋า Shopping 40 ใบ
  2. เสื้อ Polo 8 ตัว
  3. แก้วน้ำแพ็คคู่ 6 แพ็ค
ปัญหาในการปฎิบัติงาน

- ในการตรวจเช็คสต๊อค มีการนับผิดพลาด ทำให้จำนวนสินค้าคลาดเคลื่อน

แนวทางแก้ไขปัญหา
- ในการตรวจเช็ค ควรนับให้ละเอียด รอบครอบ


ประโยชน์ที่ได้รับ

- ได้เรียนรู้การปฎิบัติงานว่าต้องมีความละเอียดรอบคอบ

วันเสาร์ที่ 6 พฤศจิกายน พ.ศ. 2553

การปฎิบัติงานสัปดาห์ที่ 1

วันที่ 1-5 พฤศจิกายน 2553

วันที่ 1 พ.ย. 53

- จัดทำ Index รายชื่อลูกค้า ประมาณ 20 คน
- จัดสินค้าจากใบสินค้าส่งเสริมการขาย ดังนี้
  1. กระเป๋าอเนกประสงค์ 20 ใบ
  2. แก้วน้ำแพ็คคู่ 30 แพ็ค
  3. ปากกา 6 แพ็ค
  4. กระเป๋าสปันบอนด์ 20 ใบ
  5. Tissue ทรงลูกเต๋า 10 กล่อง
  6. การ์ดวันเกิด 3 ชุด
  7. แบบประกันดังฝัน 5 ใบ
  8. คู่มือตัวแทน 2 ใบ

วันที่ 2 พ.ย. 53

- จัดเรียงและทำ Index รายการโอนย้ายสินค้า เดือนมกราคม ถึง เดือนธันวาคม 2552
- รายงานการตัดชำรุดสินค้า เดือนกรกฎาคม ถึง เดือนธันวาคม 2552
- รายงานใบรับจากการผลิต เดือนมกราคม ถึง เดือนเมษายน 2552
- รายงานสรุปยอดขายตามประเภทสินค้า เดือนมกราคม ถึง เดือนธันวาคม 2552 และ เดือนมกราคม ถึง เดือนมิถุนายน 2553
- รายงานรายละเอียดยอดสินค้าขาย เดือนมกราคม ถึง เดือนธันวาคม 2552 และ เดือนมกราคม ถึง เดือน ตุลาคม 2553

วันที่ 3 พ.ย. 53

- สรุปรายงานการจำหน่ายสินค้าส่งเสริมการขายประจำเดือน ตุลาคม 2553
- สรุปการสั่งซื้ออุปกรณ์ส่งเสริมการขายประจำปี 2553 จำนวน 4 ไตรมาส

วันที่ 4 พ.ย. 53

- จัดเอกสารสรุปและทำ Index รายการจำหน่ายสินค้าส่งเสริมการขายประจำเดือน ปี 2549 ถึงปี 2551
- สรุปประจำเดือนและทำ Index วัสดุส่งเสริมการขายของปี 2552 ถึงปี 2553
- ปั้มตรา ส่วนส่งเสริมการตลาด ลงใน Label ที่อยู่ของสาขาต่าง ๆ ประมาณ 700 แผ่น

วันที่ 5 พ.ย. 53

- ทำ Index และสรุปรายการสั่งสินค้าส่งเสริมการขาย ว่าสินค้าอนุมัติวันไหน ได้รับเมื่อไหร่ และจำนวนกี่ชิ้น ในปี 2553 จำนวน 3 ไตรมาส
- ปั้มตรา ส่วนส่งเสริมการตลาด ลงใน Label ที่อยู่ของสาขาต่าง ๆ ประมาณ 500 แผ่น

ปัญหาในการปฏิบัติงาน

- สรุปยอดขายได้ตัวเลขไม่ลงตัว และทำยังไม่ค่อยเป็น

แนวทางในการแก้ปัญหา

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

ประโยชน์ที่ได้รับ

- ได้เรียนรู้การเข้าสังคมที่ใหญ่ขึ้น เรียนรู้การทำงานกับผู้อื่น

วันพุธที่ 14 ตุลาคม พ.ศ. 2552

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

สิ่งที่ได้รับจากการเรียนเตรียมฝึกประสบการณ์วิชาชีพ
  1. ความ มีระเบียบวินัย : ความมีระเบียบและวินัยในตัวเองนั้นเป็นสิ่งที่สำคัญยิ่ง คนเราต้องมีระเบียบอยู่ในกฎเกณฑ์ ทำอะไรก็ต้องลำดับก่อนหลังถึงจะอยู่ร่วมกันในสังคมได้อย่างสงบสุข การที่นักศึกษาควบคุมตนเอง ประพฤติปฏิบัติตนอย่างมีระเบียบแบบแผน มีเหตุผลและเป้าหมายในการเพิ่มพูนความรู้ สามารถพัฒนาตนเอง ไม่เฉพาะแต่วิชาเตรียมฝึกประสบการณ์วิชาชีพอย่างเดียวเท่านั้นแต่เราสามารถนำไปประยุกต์ใช้ได้กับทุกวิชาอีกด้วย

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

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

  4. การ รักษาเวลา : เราจะต้องฝึกหัดให้เป็นคนตรงต่อเวลาโดยเราควรจะเริ่มตั้งแต่การเรียน ในการเข้าเรียนให้ทันเวลานั้นก็จะเป็นทักษะในการที่เราจะนำไปใช้ในการทำงาน ต่อไปได้ในอนาคต เพราะการที่เราเป็นคนตรงต่อเวลาก็จะทำให้บ่งบอกถึงความกระตือรือล้นในการทำ งานของแต่ละคนได้อีกด้วย

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

วันพุธที่ 16 กันยายน พ.ศ. 2552

DTS 11-16-09-2552

การค้นหาข้อมูล (Searching)

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

การค้นหาข้อมูล searching แบ่งเป็น 2 ประเภท
1.การค้นหาข้อมูลแบบภายใน
2.การค้นหาข้อมูลแบบภายนอก

การค้นหาแบบเชิงเส้นหรือการค้นหาตามลำดับ (Linear)

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

การค้นหาแบบเซนทินัล (Sentinel)

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

การค้นหาแบบไบนารี (Binary Search)

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

วันอาทิตย์ที่ 13 กันยายน พ.ศ. 2552

DTS 10-09-09-2552

เรื่อง Graph (ต่อ) และ Sorting

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

แก้ปัญหาหลัก ๆ 2 ปัญหา คือ

1. การสร้างต้นไม้ทอดข้ามน้อยที่สุด
(Minimum Spanning Trees :MST)
1. เรียงลำดับเอดจ์ ตามน้ำหนัก
2. สร้างป่าที่ประกอบด้วยต้นไม้ว่างที่มีแต่โหนด และไม่มีเส้นเชื่อม
3. เลือกเอดจ์ที่มีน้ำหนักน้อยที่สุดและยังไม่เคยถูกเลือกเลย ถ้ามีน้ำหนักซ้ำกันหลายค่าให้สุ่มมา 1เส้น
4. พิจารณาเอดจ์ที่จะเลือก ถ้านำมาประกอบในต้นไม้ทอดข้ามน้อยที่สุดแล้วเกิด วงรอบ ให้ตัดทิ้งนอกนั้นให้นำมาประกอบเป็นเอดจ์ในต้นไม้ทอดข้ามน้อยที่สุด
5. ตรวจสอบเอดจ์ที่ต้องอ่านในกราฟ ถ้ายังอ่านไม่
หมดให้ไปทำข้อ 3

2. การหาเส้นทางที่สั้นที่สุด (Shortest path) Dijkstra’s Algorithm
หาเส้นทางที่สั้นที่สุดจากโหนดต้นทางไปโหนดใด ๆ ในกราฟ มีน้ำหนัก และน้ำหนักไม่เป็นลบ
ข้อกำหนด
ให้ เซต S เก็บโหนดที่ผ่านได้และมีระยะทางห่างจากจุดเริ่มต้นสั้นที่สุด
ให้ W แทนโหนด นอกเซต S
ให้ D แทนระยะทาง (distance) ที่สั้นที่สุดจากโหนดต้นทางไปโหนดใด ๆ ในกราฟ โดยวิถีนี้ประกอบด้วย โหนดในเชต
ให้ S ถ้าไม่มีวิถี ให้แทนด้วยค่าอินฟินีตี้ (Infinity) : ∞


Sorting

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

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

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

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

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

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

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

วันอังคารที่ 8 กันยายน พ.ศ. 2552

DTS 09-02-09-2552

Tree(ทรี) (ต่อ) และ Graph (กราฟ)

เอ็กซ์เพรสชันทรี (Expression Tree)

เป็นการนำเอาโครงสร้างทรีไปใช้เก็บนิพจน์ทางคณิตศาสตร์โดยเป็นไบนารีทรี ซึ่งแต่ละโหนดเก็บตัวดำเนินการ (Operator) และและตัวถูกดำเนินการ(Operand) ของนิพจน์คณิตศาสตร์นั้น ๆ ไว้ หรืออาจจะเก็บค่านิพจน์ทางตรรกะ (Logical Expression)นิพจน์เหล่านี้เมื่อแทนในทรีต้องคำนึงลำดับขั้นตอนในการคำนวณตามความสำคัญของเครื่องหมายด้วยโดยมีความสำคัญตามลำดับดังนี้
- ฟังก์ชัน
- วงเล็บ
- ยกกำลัง
- เครื่องหมายหน้าเลขจำนวน (unary)
- คูณ หรือ หาร
- บวก หรือ ลบ
- ถ้ามีเครื่องหมายที่ระดับเดียวกันให้ทำจากซ้ายไปขวา

ไบนารีเซิร์ชทรีไบนารีเซิร์ชทรี (Binary Search Tree)

เป็นไบนารีทรีที่มีคุณสมบัติที่ว่าทุก ๆ โหนดในทรี ค่าของโหนดรากมีค่ามากกว่าค่าของทุกโหนดในทรีย่อยทางซ้าย และมีค่าน้อยกว่าหรือเท่ากับค่าของทุกโหนดในทรีย่อยทางขวาและในแต่ละทรีย่อยก็มี คุณสมบัติเช่นเดียวกัน

(1) การเพิ่มโหนดในไบนารีเซิร์ชทรี

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

(2) การดึงโหนดในไบนารีเซิร์ชทรี

หลังจากดึงโหนดที่ต้องการออกจากทรีแล้วทรีนั้นต้องคงสภาพไบนารีเซิร์ชทรีเหมือนเดิมก่อนที่จะทำการดึงโหนดใด ๆ ออกจากไบนารีเซิร์ชทรี ต้องค้นหาก่อนว่าโหนดที่ต้องการดึงออกอยู่ที่ตำแหน่งไหนภายในทรีและต้องทราบที่อยู่ของโหนดแม่โหนดนั้นด้วยแล้วจึงทำการดึงโหนดออกจากทรีได้

กราฟ (Graph)

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

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

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

การท่องไปในกราฟ

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

วันเสาร์ที่ 29 สิงหาคม พ.ศ. 2552

DTS 08-26-08-2552

ทรี (Tree)



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



- โหนดที่อยู่ในระดับสูงสุดและไม่มีโหนดแม่ เรียกว่า โหนดราก Root Node จากรูป คือ โหนด A
- โหนดที่อยู่ต่ำกว่าโหนดแม่อยู่ระดับหนึ่ง เรียกว่า Child Node หรือ โหนดลูก จากรูป B , C , D และ E เป็น โหนดลูกของ A
- โหนดในระดับที่ต่ำลงมา หนึ่งระดับได้หลายๆ โหนด เรียกโหนดดังกล่าวว่า Parent Node หรือโหนดพ่อแม่ โหนด B ที่เป็นโหนดลูกของโหนด A ก็สามารถแตกออกเป็นโหนดย่อยๆ ได้แก่ F และ G ดังนั้น B จึงเป็นโหนดพ่อแม่ของ F และ G ในทำนองเดียวกัน A ก็เป็นโหนด พ่อแม่ของ B , C , D และ E
- เส้นเชื่อมแสดงความสัมพันธ์ระหว่างโหนดสองโหนด เรียกว่า กิ่ง (Branch or Edge) เป็นเส้นที่เชื่อมต่อระหว่างโหนดพ่อแม่กับโหนดลูก
- โหนดที่มีโหนดแม่เป็นโหนดเดียวกัน เรียกว่า Siblings หรือโหนดพี่น้อง คือ โหนดที่มีพ่อแม่เดียวกัน เช่น B , C , D , E เป็นโหนดพี่น้องกันเพราะมีโหนดพ่อแม่เดียวกัน คือ โหนด A และ F และ G เป็นโหนดพี่น้องกันโดยมี B เป็นโหนดพ่อแม่
- โหนดที่ไม่มีลูก เรียกว่า Leaf Node จากรูปโหนดที่ไม่มีโหนดลูก ได้แก่ F G H I J K L M

นิยามของทรี
1. นิยามทรีด้วยนิยามของกราฟ
ทรี คือ กราฟที่ต่อเนื่องโดยไม่มีวงจรปิด loop ในโครงสร้าง โหนดสองโหนดใดๆ ในทรีต้องมีทางติดต่อกันทางเดียวเท่านั้น และทรีที่มี N โหนด ต้องมีกิ่งทั้งหมด N-1 เส้น
2. นิยามทรีด้วยรูปแบบรีเคอร์ซีฟ
ทรี ประกอบด้วยสมาชิกที่เรียกว่า โหนด โดยที่ถ้าว่าง ไม่มีโหนดใดๆ เรียกว่านัลทรี (Null Tree) และถ้ามีโหนหนึ่งเป็นโหนดราก ส่วนที่เหลือจะแบ่งเป็นทรีย่อย (Sub Tree)

นิยามที่เกี่ยวข้องกับทรี
1. ฟอร์เรสต์ (Forest) หมายถึง กลุ่มของทรีที่เกิดจากการเอาโหนดรากของทรีออก หรือ เซตของทรีที่แยกจากกัน (Disjoint Trees)
2. ทรที่มีแบบแผน (Ordered Tree) หมายถึง ทรีที่โหนดต่างๆ ในทรีนั้นมีความสัมพันธ์ที่แน่นอน เช่น ไปทางขวา ไปทางซ้าย เป็นต้น
3. ทรีคล้าย (Similar Tree) คือ ทรที่มีโครงสร้าเหมือนกัน หรือทรีที่มีรูปร่างของทรีเหมือนกัน โดยไม่คำนึงถึงข้อมูลที่อยู่ในแต่ละโหนด
4. ทรีเหมือน (Equivalent Tree) คือ ทรีที่เหมือนกันโดยสมบูรณ์ โดยต้องเป็นทรีที่คล้ายกันและแต่ละโหนดในตำแหน่งเดียวกันมีข้อมูลเหมือนกัน
5. กำลัง (Degree) หมายถึง จำนวนทรีย่อยของโหนดนั้นๆ
6. ระดับของโหนด (Level of Node) คือ ระยะทางในแนวดิ่งของโหนดนั้น ๆ ที่อยู่ห่างจากโหนดราก เมื่อกำหนดให้ โหนดรากของทรีนั้นอยู่ระดับ 1 และกิ่งแต่ละกิ่งมีความเท่ากันหมด คือ ยาวเท่ากับ 1หน่วยซึ่งระดับของโหนดจะเท่ากับจำนวนกิ่งที่น้อยที่สุดจากโหนดรากไปยังโหน ดใด ๆ บวกด้วย 1และจำนวนเส้นทางตามแนวดิ่งของโหนดใด ๆ ซึ่งห่างจากโหนดราก เรียกวา ความสูง หรือความ ลึก

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

ไบนารีทรีที่ทุก ๆ โหนดมีทรีย่อยทางซ้ายและทรีย่อยทางขวา ยกเว้นโหนดใบ และโหนดใบทุกโหนดจะต้องอยู่ที่ระดับเดียวกันเรียกว่า ไบนารีทรีแบบสมบูรณ์การแปลงทรีทั่วไปให้เป็นไบนารีทรีขั้นตอนการแปลงทรีทั่วๆ ไปให้เป็นไบนารีทรี มีลำดับขั้นตอนการแปลง ดั้งต่อไปนี้

1. ให้โหนดแม่ชี้ไปยังโหนดลูกคนโต แล้วลบความสัมพันธ์ ระหว่างโหนดแม่และโหนดลูกอื่น ๆ

2. ให้เชื่อมความสัมพันธ์ระหว่างโหนดพี่น้อง
3. จบให้ทรีย่อยทางขวาเอียงลงมา 45 องศา

การท่องไปในไบนารีทรี
ปฏิบัติการที่สำคัญในไบนารีทรี คือ การท่องไปในไบนารีทรี (Traversing Binary Tree) เพื่อเข้าไปเยือนทุก ๆโหนดในทรี ซึ่งวิธีการท่องเข้าไปต้องเป็นไปอย่างมีระบบแบบแผน สามารถเยือนโหนดทุก ๆโหนด ๆ ละหนึ่งครั้งวิธีการท่องไปนั้นมีด้วยกันหลายแบบแล้วแต่ว่าต้องการลำดับขั้น ตอนการเยือนอย่างไร โหนดที่ถูกเยือนอาจเป็นโหนดแม่ (แทนด้วย N)
ทรีย่อยทางซ้าย (แทนด้วย L)
ทรีย่อยทางขวา (แทนด้วย R)

วิธีการท่องไปในทรีมี 6 วิธี แต่นิยมใช้กันมากคือ NLR , LNR , LRN

1. วิธี NLR ในลักษณะการเข้าถึงจะเริ่มต้นจากจุดแรกคือ N จากนั้นจึงเข้าไปทรีย่อยด้านซ้ายและเข้าถึงทรีย่อยด้านขวา

2. วิธี LNR สำหรับการเข้าถึงแบบอินออร์เดอร์จะดำเนินการเข้าเยี่ยมทรีย่อยด้านซ้ายก่อน จากนั้นจึงเข้าเยี่ยม N และสิ้นสุดการเข้าเยี่ยมที่ทรีย่อยด้านขวา
3. วิธี LRN การประมวลผลของโพสออร์เดอร์ จะเริ่มต้นด้วยทรีย่อยด้านซ้ายจานั้นมาประมวลผลต่อที่ทรีย่อยด้านขวาและสิ้น สุดการประมวลผลที่ N




วันพฤหัสบดีที่ 13 สิงหาคม พ.ศ. 2552

DTS 07-05-08-2552

Queue

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

ลักษณะของคิว จะมีปลายสองข้าง ซึ่งข้างหนึ่งจะเป็นช่องทางสำหรับข้อมูลเข้าที่เรียกว่า REAR และอีกข้างหนึ่งซึ่งจะเป็นช่องทางสำหรับข้อมูลออก เรียกว่า FRONT


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

การเพิ่มข้อมูลเข้าไปในคิว

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


การนำข้อมูลออกจากคิว

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


คิวแบบวงกลม (Circular Queue)

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



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

วันจันทร์ที่ 3 สิงหาคม พ.ศ. 2552

DTS 06-29-07-2552

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

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

การใช้ สแตค เพื่อแปลรูปนิพจน์ทางคณิตศาสตร์
รูปแบบนิพจน์ทางคณิตศาสตร์

• นิพจน์ Infix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่ระหว่างตัวดำเนินการ (Operands) เช่น A+B-C
• นิพจน์ Prefix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หน้าตัวดำเนินการ (Operands) เช่น +-AB
• นิพจน์ Postfix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หลังตัวดำเนินการ (Operands) เช่น AC*+

ลำดับการทำงานของตัวดำเนินการทางคณิตศาสตร์ (Operator Priority)

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

เครื่องหมายบวก ( + ) , ลบ ( - )
เครื่องหมายคูณ ( * ) , หาร ( / )
เครื่องหมายวงเล็บเปิด
(
เครื่องหมายวงเล็บปิด )

ขั้นตอนการแปลงจากนิพจน์ Infix เป็นนิพจน์ Postfix

1. อ่านอักขระในนิพจน์ Infix เข้ามาทีละตัว
2. ถ้าเป็นตัวถูกดำเนินการจะถูกย้ายไปเป็นตัวอักษรในนิพจน์ Postfix
3. ถ้าเป็นตัวดำเนินการ จะนำค่าลำดับความสำคัญของตัว ดำเนินการที่อ่านเข้ามาเทียบกับค่าลำดับความสำคัญของตัวดำเนินการที่อยู่บนสุดของสแตก
- ถ้ามีความสำคัญมากกว่า จะถูก push ลงในสแตก
- ถ้ามีความสำคัญน้อยกว่าหรือเท่ากัน จะต้อง pop ตัวดำเนินการที่อยู่ในสแตกขณะนั้นไปเรียงต่อกับตัวอักษรในนิพจน์ Postfix
4. ตัวดำเนินการที่เป็นวงเล็บปิด “)” จะไม่ push ลงในสแตกแต่มีผลให้ตัวดำเนินการอื่น ๆ ถูก pop ออกจากสแตกนำไป เรียงต่อกันในนิพจน์ Postfix จนกว่าจะเจอ “(” จะ popวงเล็บเปิดออกจากสแตกแต่ไม่นำไปเรียงต่อ
5. เมื่อทำการอ่านตัวอักษรในนิพจน์ Infix หมดแล้ว ให้ทำการ Pop ตัวดำเนินการทุกตัวในสแตกนำมาเรียงต่อในนิพจน์Postfix

วันอาทิตย์ที่ 26 กรกฎาคม พ.ศ. 2552

การบ้าน iostream.h และ stdio.h

<เขียนโปรแกรมโดยใช้ stdio.h >

#include
void main()
{
char name[20];
char student_id[12];
char subjectiveness[50];
int score;
printf("Input name:");
scanf("%s",&name);
printf("Input sutudent id:");
scanf("%s",&student_id);
printf("Input subjectiveness:");
scanf("%s",&subjectiveness);
printf("Input score:");
scanf("%d",&score);
if(score>=0&&score<=100) { if(score>=80)
printf("score grade 4(A)",score);
else if(score>=75)
printf("score grade 3.5(B+)",score);
else if(score>=70)
printf("score grade 3(B)",score);
else if(score>=65)
printf("score grade 2.5(C+)",score);
else if(score>=60)
printf("score grade 2(C)",score);
else if(score>=55)
printf("score grade 1.5(D+)",score);
else if(score>=50)printf
("score grade 1(D)",score);
elseprintf("score grade 0(F)",score);
}
elseprintf("error!!!",score);
}



<เขียนโปรแกรมโดยใช้ iostream.h >

#include
void main()
{
char name[20];
char student_id[12];
char subjectiveness[50];
int score;

cout<<"Input name:";
cin>>name;
cout<<"Input sutudent id:";

cin>>student_id;
cout<<"Input subjectiveness:";

cin>>subjectiveness;
cout<<"Input score:";

cin>>score;
if(score>=0&&score<=100) { if(score>=80)
cout<<"score grade 4(A)";

else if(score>=75)
cout<<"score grade 3.5(B+)";

else if(score>=70)
cout<<"score grade 3(B)";

else if(score>=65)
cout<<"score grade 2.5(C+)";

else if(score>=60)
cout<<"score grade 2(C)";

else if(score>=55)
cout<<"score grade 1.5(D+)";

else if(score>=50)
cout<<"score grade 1(D)";

elsecout<<"score grade 0(F)";
}
elsecout<<"error!!!";
}

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

DTS 05-22-07-2552

Linked List แบบซับซ้อน

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

2.Double Linked List หมายถึง ลิงค์ลิสต์ที่ทุกโหนดสามารถวกกลับมาที่โหนดก่อนหน้าของตนเองได้ ประกอบด้วยส่วนของ Info และ พอยน์เตอร์ที่ชี้ไป 2 ทิศทาง คือ ชี้ไปยังโหนดถัดไป และชี้ไปยังโหนดก่อนหน้า ดังนั้นเราจึงสามารถทำการอ่านข้อมูลได้ 2 วิธี คือ การอ่านไปข้างหน้า และอ่านไปทางข้างหลัง

สแตค (Stack)

สแตคเป็นโครงสร้างข้อมูลที่มีลักษณะแบบลำดับ (sequential) คือการกระทำกับข้อมูลจะกระทำที่ปลายข้างเดียวกันที่ส่วนปลายสุดของสแตค การกระทำกับข้อมูลของสแตคประกอบไปด้วยการนำเข้าข้อมูลเข้า (PUSH) ที่ส่วนบนสุดของสแตค และการนำข้อมูลออก (POP) ที่ส่วนบนสุดของสแตคเช่นกัน ในการจะ Push ข้อมูลเข้าก็ต้องตรวจสอบด้วยว่าข้อมูลในสแตคเต็มหรือไม่ หากสแตคเต็มก็จะไม่สามารถ Push หรือนำข้อมูลเข้าได้

เช่นเดียวกับการ Pop ข้อมูลออกก็ต้องตรวจสอบด้วยว่ามีข้อมูลอยู่ในสแตคหรือไม่ หากไม่มีข้อมูลอยู่ในสแตคหรือสแตคว่าง (empty stack) ก็ไม่สามารถ pop ได้การนำข้อมูลเข้า-ออก จากสแตค (push , pop) จะมีลักษณะแบบเข้าหลัง ออกก่อน (LIFO : Last In , First Out) คือ ข้อมูลที่เข้าไปในสแตคลำดับหลังสุด จะถูกนำข้อมูลออกจากสแตคเป็นลำดับแรก ยกตัวอย่างการทำงานแบบ LIFO เช่น การวางจานซ้อนกัน

รูปแสดงลักษณะของสแตค ที่ประกอบด้วยข้อมูล A , B , C , D และ E มี TOP ที่ชี้ที่สมาชิกตัวบนสุดของสแตค

การเพิ่มข้อมูลลงในสแตค (pushing stack)

การเพิ่มข้อมูลลงในสแตคการเพิ่มข้อมูลลงในสแตค คือ การนำเข้ามูลเข้าสู่สแตคโดยทับข้อมูลที่อยู่บนสุดของสแตค ข้อมูลจะสามารถนำเข้าได้เรื่อยๆ จนกว่าสแตคจะเต็ม สมมติว่าสแตคจองเนื้อที่ไว้ N ตัว ถ้าหากค่า TOP เป็น 0 แสดงว่าสแตคว่าง หากค่า TOP = N แสดงว่าสแตคเต็ม (Stack Overflow) ไม่สามารถเพิ่มข้อมูลลงในสแตคได้อีก

จากรูปแสดง การ Push ข้อมูล ABC ลงในสแตคที่มีการจองเนื้อที่ไว้ N ตัว โดยมี TOP ชี้ข้อมูลตัวที่เข้ามาล่าสุด โดยค่าของ TOP จะเพิ่มขึ้นทุกครั้งเมื่อมีข้อมูลเข้ามาในสแตค

การดึงข้อมูลออกจากสแตค (popping stack)

คือการนำข้อมูลออกจากส่วนบนสุดของสแตก การดึงข้อมูลออกจากสแตคก่อนที่จะดึงข้อมูลออกจากสแตคต้องตรวจสอบก่อนว่าสแตคมีข้อมูลอยู่หรือไม่ หรือว่าเป็นสแตคว่าง (Empty Stack) แต่ถ้าไม่มีสมาชิกในสแตก แล้วทำการ pop สแตก จะทำให้เกิดความผิดพลาดที่เรียกว่า Stack Underflow

Stack Top

เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก แต่ไม่ได้นำข้อมูลนั้นออกจากสแตก

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

วันเสาร์ที่ 18 กรกฎาคม พ.ศ. 2552

DTS 04-15-07-2552

ลิงค์ลิสต์ (Linked List)

ลิงค์ลิสต (Linked List) เป็นวิธีการเก็บ ข้อมูลอย่างต่อเนื่องของอิลิเม้นต์ต่าง ๆ โดยมีพอยเตอร์เป็นตัวเชื่อมต่อแต่ละอิลิเม้นท์ เรียกว่าโนด (Nodeซึ่งในแต่ละโนดจะประกอบไปด้วย 2 ส่วน คือ Dataจะเก็บข้อมูลของอิลิเม้นท์ และส่วนที่สอง คือ Link Field จะทำหน้าที่เก็บ ตำแหน่งของโนดต่อไปใน ลิสต์

โครงสร้างข้อมูลแบบลิงค์ลิสต์ประกอบด้วย 2 ส่วน

1.Head Structure แบ่งเป็น 3 ส่วน

-count เป็นการนับจำนวนข้อมูลที่มีอยู่ในลิสต์นั้น

-pos พอยเตอร์ที่ชี้ไปยังโหนดที่เข้าถึง

-head พอยเตอร์ที่ชี้ไปยังโหนดแรกของลิสต์

2.Data Node Structure จะประกอบด้วย ข้อมูลและพอยเตอร์ที่ชี้ไปโหนดถัดไป

การเพิ่มข้อมูลลงไปในลิงค์ลิสต์

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

การลบข้อมูลในลิงค์ลิสต์

ถ้าต้องการลบข้อมูลตัวใดในลิสต์สามารถลบได้เลย แต่ต้องเปลี่ยน head เพื่อชี้ไปยังข้อมูลตัวแรกของลิสต์กรณีที่ลบข้อมูลตัวแรกออก แล้ว link คือ เมื่อลบข้อมูลตัวใดออกควรชี้ link ถัดไปให้ถูกต้องด้วย

กระบวนงานและฟังกชั่นที่ใช้ดำเนินงานพื้นฐาน

1. กระบวนงาน Create List หน้าที่ สร้างลิสตว่าง ผลลัพธ์ ลิสต์ว่าง

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

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