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

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

การเรียนการสอนวิชาเตรียมฝึกประสบการณ์วิชาชีพ

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

1. ปฐมนิเทศ ครั้งแรกของการเรียนเตรียมฝึก ทำให้ทราบว่า ความต้องการที่จริงก่อนเรียนคืออะไรใช่เพียงแค่ได้ความรู้ ยังบอกถึงการประพฤติปฎิบัติตนที่ถูกต้องในการเรียน อีกทั้งเวลาที่ออกไปฝึกงานข้างนอกเพื่อความมีประสิทธิภาพของนักศึกษา

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

3. ครั้งที่ 3 เกี่ยวกับเรื่อง จริยธรรมและคุณธรรม ได้ซึมซับจริธรรมและคุณธรรมซึ่งมีความสำคัญมากในปัจจุบัน ที่นักศึกษาทุกคนนั้นต้องมีในการเรียน และการทำงานในอนาตค ซึ่งได้นอกเหนือจากการเรียน

4. การจัดการเกี่ยวกับการเงิน เป็นสิ่งที่จำเป็นในชีวิตประจำวัน เพราะในเศรษฐกิจปัจจุบันต้องมีความรู้ในการจัดการเงิน ความเสี่ยงต่างๆ การเก็บเงินออมเงินที่ดี และการนำเงินที่มีนั้นไปลงทุนในอนาคต

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

6. การเรียนครั้งนี้ไม่ได้เกิดขึ้น เพราะไม่สามารถที่จะทำงานได้ ซึ่งเป็นการจัดงานของ แขนงคอม แต่ไม่ได้เข้าเรียนเนื่องจากความไม่พร้อม ถึงจะไม่ได้เข้าเรียนหรือจัดงานในครั้งนี้แต่ก็ทำให้ได้รับอะไรหลายๆ อย่างนั้นคือความตรงเวลาของการเป็นเจ้าภาพในการจัดงาน การประสานงานในด้านต่างๆ ไม่มีความแน่นอน และ เป็นเจ้าภาพที่ดี (การตรงต่อเวลาเป็นสิ่งสำคัญ)

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

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

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

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

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

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

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

DTS08-09-09-2552

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

การเรียงข้อมูล สามารถแบ่งได้เป็น 2 ประเภทด้วยกันคือ
1. การเรียงข้อมูลแบบภายใน (Internal Sorting) คือ การเรียงลำดับข้อมูล โดยทั้งหมดต้องจัดเก็บอยู่ในหน่วยความจำหลัก (main memory) ที่มีการเข้าถึงข้อมูลได้เร็ว โดยไม่จำเป็นต้องใช้หน่วยความจำสำรอง เช่น ดิสค์ หรือเทปสำหรับการจัดเก็บชั่วคราว ใช้ในกรณีที่ข้อมูลไม่มากเกินกว่าพื้นที่ความจำที่กำหนดให้กับผู้ใช้แต่ละราย
2. การเรียงข้อมูลแบบภายนอก (External Sorting) คือ การ เรียงลำดับข้อมูลที่มีขนาดใหญ่เกินกว่าที่จะสามารถเก็บไว้ใน พื้นที่ความจำหลักที่กำหนดให้ได้ในคราวเดียว ดังนั้นข้อมูล ส่วนมากต้องเก็บไว้ในไฟล์ข้อมูลที่อยู่บนดิสค์ เทป เป็นต้น สำหรับการเรียงข้อมูลแบบภายนอกจะต้องคิดถึงเวลาที่ใช้ใน การถ่ายเทข้อมูลจากหน่วยความจำชั่วคราวกับหน่วยความจำหลัก ด้วยเช่นกันการเรียงลำดับแบบตัวเลือกหลักการดังนี้คือ การเลือกข้อมูลที่มีค่าที่น้อยที่สุดในแถวลำดับ และนำค่านั้นไปเปลี่ยนที่กับข้อมูลที่บรรจุ อยู่ในแถวลำดับช่องแรก ต่อมามีการเลือกค่าที่มากกว่า และนำค่านั้นไปแลกกับข้อมูลในแถวลำดับช่องที่สอง ขั้นตอนนี้เหมือนกันกับขั้นตอนแรก ยกเว้นจะไม่มีการเปรียบเทียบกับ ข้อมูลในแถวลำดับช่องแรก เพราะรู้แล้วว่าเป็นค่าที่น้อยที่สุด ต่อจากนั้นจะมีการดำเนินงานแบบเดิม คือ เลือกตัวที่มีค่าน้อยที่สุดในบรรดา ข้อมูลที่เหลือแล้วมีการสลับที่ จนกระทั่งค่าทั้งหมดที่อยู่ในแถวลำดับมีการเรียงลำดับ และจะพบว่าที่ ส่วนแรกของแถวลำดับ ประกอบด้วยค่าน้อยที่สุด และที่ปลายสุดของแถวลำดับมีค่ามากที่สุด

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

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

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

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

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

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

DTS08-02-09-2552

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

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

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

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

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

DTS08-26-08-2552

Tree

ทรี หรือโครงสร้างข้อมูลแบบต้นไม้ ประกอบด้วยโหนด (node) ซึ่งเป็นส่วนที่เก็บข้อมูล ในทรีหนึ่งทรีจะประกอบไปด้วยรูทโหนด (root node) เพียงหนึ่งโหนด แล้วรูทโหนดสามารถแตกโหนดออกเป็นโหนดย่อยๆ ได้อีกหลายโหนดเรียกว่าโหนดลูก (Child node) เมื่อมีโหนดลูกแล้ว โหนดลูกก็ยังสามารถแสดงเป็นโหนดพ่อแม่ (Parent Node) โดยการแตกโหนดออกเป็นโหนดย่อยๆได้อีก โหนดที่มีโหนดแม่เป็นโหนดเดียวกันเรียกว่า โหนดพี่น้อง (Siblings) โหนดที่ไม่มีโหนดลูกเรียกว่า โหนดใบ (Leave Node) เส้นเชื่อมแสดงความสัมพันธ์ระหว่างโหนดเรียกว่า กิ่ง (Beanch) คือ โหนดที่ไม่ใช่ Leaf Node
นิยามของทรี
1. นิยามทรีด้วยนิยามของกราฟทรี คือ กราฟที่ต่อเนื่องโดยไม่มีวงจรปิด (loop) ในโครงสร้าง โหนดสองโหนดใดๆ ในทรีต้องมีทางติดต่อกัน ทางเดียวกันนั้น และทรีที่มี N โหนด ต้องมีกิ่งทั้งหมด N -1เส้น
การเขียนรูปแบบทรี อาจเขียนได้ 4 แบบ คือ
1. แบบที่มีรากอยู่ด้านบน
2. แบบที่มีรากอยู่ด้านล่าง
3. แบบที่มีรากอยู่ด้านซ้าย
4. แบบที่มีรากอยู่ด้านขวาการท่องไปในไบนารีทรี (Traversing Binary Tree)คือ การเข้าไปเยือนทุก ๆ โหนดในทรี วิธีการท่องเข้าไปต้องเป็นไปอย่างมีระบบแบบแผน สามารถเยือนโหนดทุก ๆ โหนด ๆ ละหนึ่งครั้ง วิธีการท่องไปนั้นมีด้วยกันหลายแบบ โหนดที่ถูกเยือนอาจเป็นโหนดแม่ (แทนด้วย N)ทรีย่อยทางซ้าย (แทนด้วย L) หรือทรีย่อยทางขวา (แทนด้วย R)วิธีการท่องเข้าไปในทรีมี 6 วิธีคือ NLR LNR LRN NRL RNL และ RLN แต่วิธีการท่องเข้าไปในทรีที่นิยมใช้กันมากเป็นการท่องจากซ้ายไปขวา 3 แบบแรก คือ NLRLNR LRN ซึ่งลักษณะการนิยามเป็นนิยามแบบ รีเคอร์ซีฟ (Recursive)ขั้นตอนวิธีดึงโหนดออกอาจแยกพิจารณาได้ 3 กรณีดังต่อไปนี้1. กรณีโหนดที่จะดึงออกเป็นโหนดใบ2. กรณีโหนดที่ดึงออกมีเฉพาะทรีย่อยทางซ้ายหรือทรีย่อยทางขวาเพียงด้านใดด้านหนึ่ง3. กรณีโหนดที่ดึงออกมีทั้งทรีย่อยทางซ้ายและทรีย่อยทางขวา - ถ้าโหนดที่มาแทนที่เป็นโหนดที่เลือกจากทรีย่อยทางซ้าย ต้องเลือกโหนดที่มีค่ามากที่สุดในทรีย่อยทางซ้ายนั้น - ถ้าโหนดที่จะมาแทนที่เป็นโหนดที่เลือกมาจากทรีย่อยทางขวา ต้องเลือกโหนดที่มีค่าน้อยที่สุดในทรีย่อยทางขวานั้น

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

DTS07-04-08-2552

Queue

เป็นข้อมูลเชิงเส้น การทำงานของ Queue จะกระทำที่ปลายทั้งสองข้าง ทั้งส่วนหน้า (front) และส่วนหลัง (rear) เวลาที่เพิ่มข้อมูลจะกระทำที่ ส่วนหลัง เวลาเอาข้อมูลออกจะเอาออกที่ส่วนหน้า
การทำงานของจะมีลักษณะของการเข้าก่อนออกก่อน หรือที่เรียกว่า FIFO (First in First out)

การแทนที่ของ Queue มี 2 ลักษณะ คือ

1. การแทนที่แบบ linked list
2. การแทนที่แบบ Array

การดำเนินการเกี่ยวกับ Queue มีอยู่ 9 ขั้นตอน คือ

1. Create Queue คือการสร้างที่ว่างเปล่าขึ้น
2. Enqueue คือการเอาข้อมูลออกมา มีลักษณะคล้ายกับ Push Stack
3. Dequeue คือการเอาข้อมูลออกมา คล้ายกับการ Pop Stack
4. Queue Front คือการเอาข้อมูลที่อยู่ส่วนหน้าของ Queue ออกมาแสดง
5. Queue rear คือการเอาข้อมูลที่อยู่ส่วนท้ายของ Queue ออกมาแสดง
6. Empty Queue คือ Queue ที่ว่างอยู่
7. Full Queue คือ Queue ที่เต็ม หรือ อาจเกิดการ Overflow
8. Queue count คือการนับจำนวนสมาชิกที่มีอยู่ใน Queue
9. Destroy Queue คือ การทำลาย Queue

การประยุกต์ใช้ Queue

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

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

DTS06-28-07-2552

STACK (ต่อ)
การแทนที่ของข้อมูลในแบบของสแตกทำได้ 2 วิธี คือ

1. แบบ Linked list
2.แบบ Array

การแทนที่แบบ linked list จะประกอบด้วย 2 ส่วน คือ Head node , Data node

Head node



Data node

การดำเนินการเกี่ยวกับ สแตกใน linked list

1. Creat stack การสร้างสแตกว่าง ๆ ขึ้นมา

2. Push stack การเพิ่มข้อมูลลงไปในสแตก

3. Pop stack การนำเอาข้อมูลที่อยู่บนสุดออกมาจากสแตก แต่การ pop ไม่ได้บอกตำแหน่งเอาออกมา อย่างเดียว

4. stack top การ copy ข้อมูลที่อยู่บนสุดของสแตก

5. Empty stack ตรวจสอบการว่างของสแตก เพื่อลดความผิดพลาดในการ pop ข้อมูลออกมา และความผิดพลาดที่เกิดขึ้น เรียกว่า Stack Underflow

6. Full stack คือ สแตกที่เต็มแล้ว หรือที่เรียกว่า Stack overflow

7. Stack count เป็นการนับสแตก นับจำนวนสมาชิกที่มีอยู่ในสแตกนั้นๆ มีกี่จำนวนเท่าไหร่

8. Destroy stack เมื่อมีการสร้างก็ต้องมีการลบสแตก ทำให้มีการลดลงของข้อในสแตก

การแทนที่ของสแตกแบบ Array

มีการดำเนินการทั้งหมดเหมือนกับ linked list แต่จะมีการทำงานในแบบของ Array มีเครื่องหมาย ( ) มีส่วนเกี่ยวข้อง และเริ่มต้นข้อมูลที่ 0 การจุของข้อมูลที่มากที่สุดดูที่ Stack Max และมีเส้นเสมือนเป็นเส้นชี้ค่าที่มากที่สุดของ Stack

เมื่อมีการสร้าง จะเริ่มจาก 0 และเมื่อมีการ Push จะให้ค่า top เป็น -1 เพราะว่า เพื่อค่าของ Arrayตัวแรกจะได้มีค่าเป็น 0 เมื่อ -1+1

การประยุกต์

ใช้ในการคำนวณค่านิพจน์ทางคณิตศาสตร์ เช่น

A+B-D , A-B*C/B

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

ข้อมูลข่าวสาร , เอกสารที่มีความสำคับ

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

DTS05-22-07-2552

LINKED LIST ต่อ

p ที่อยู่ในอัลกอริทึม ทุกตัว เป็นตัวที่ย่อมาจากคำว่า pointer ซึ่งใช้ในการชี้ที่อยู่ของข้อมูล
ในการ return found สามารถ return ได้ 2 ค่า คือ

1. false
2. ture

list count ก็ คือการเอาข้อมูลที่ count ออกมาแสดง count ที่อยู่ใน Head node
dostory list ก็คือ การหยุดให้ list นั้นไม่ทำงานต่อ

linked list แบบซับซ้อน มีอยู่ 3 แบบ คือ

1. Circular การทำงานเป็นลักษณะของวงกลม วนกลับไปมา
2. Double จะเกิดข้อมูล 2 ส่วง คือ Blackward และ Forward เป็นตัวคอยส่ง และรับข้มูล 2 ทาง
3. Delete การเปลี่ยงแปลงที่เกิดขึ้นโดยการลบ Data และตัว B/F ที่อยู๋ใน linked list ลูกศร จะเปลี่นทิศทางไปจากที่เคยเป็นอยู่

STACK

stack คือ โครงสร้างข้อมูลที่ว่าด้วยการเพิ่มหรือลบข้อมูลในสแตก โดยการทำที่ปลายหรือ ค่าที่อยู่บนสุดก่อน เรียกว่า TOP เพราะ การเรียงข้อมูลของ stack จะเป็นชั้นๆๆ
ลักษณะ คือ ข้อมูล ที่เข้าหลังสุดจะถูกนำออกมาก่อน เรียกว่า LIFE (last in first out) เข้าหลังออกก่อน

การทำงานของ stack ทีอยู๋ 3 กระบวนการ
1. push การใส่ข้อมูลลงไปในสแตก
2. pop คือการนำข้อมูลออกมาแสดงจากส่วนบน
3. top คือการคัดลอกข้อมูลที่อยู่ข้างบนสุด

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

ความรู้ที่ได้เพิ่มเติม
recive = รับ เติม er เป็นผู้รับ
egual = เท่ากัน
retrive = ดึงเรียกคือข้อมูล แต่สามารถบอกได้แค่ว่าต่ำแหน่ง ต้องเขียนโปรแกรมเพื่อดึงข้อมูล
HN = Hospital Number เลขที่ระบุเพื่อค้นหาข้อมูลของบุคคลที่รักษา

ตัวอย่าง STACK ที่ใช้ในชีวิตประจำวัน : ขนมปริงเอร์

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

DTS04-15-07-2552

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

B O R I P A T \0
M A L I L E R T \0

B O R I P A T \0
B A N A N A \0 \0

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

ในการเขียนอะเรย์ของสตริงจะมีฟังก์ชันเกี่ยวข้องอยู่ 4 ฟังชั่น คือ
strlen = ใช้หาความยาวของ
stringstrcpt = ใช้คัดลอกข้อมูลจาก string ไปอีก string
ststrcat = ใช้เชื่อมต่อข้อความ 2 ข้อความ
strcmp = ใช้เปรียบเทียบข้อความ

Linked list

linked list เป็นข้อมูลที่เรียงกันเป็นชุด โดยข้อมูลแต่ละตัวเรียกว่า Node ซึ่งแต่ละ Node เชื่อมต่อไปยัง Node ถัดไป ข้อมูลตัวแรกใน Linked List จะถูกชี้โดยตัวแปรชนิด Pointer ซึ่งมักจะเรียกว่า Head Pointer ส่วนข้อมูลตัวสุดท้ายใน Links List มีส่วนของข้อมูล ที่ชี้ไปที่ Null ซึ่งเป็นค่าที่บอกว่าข้อมูลนั้นเป็นข้อมูลตัวสุดท้าย ข้อมูลแต่ละตัวใน Linked List จะปรอบกอบด้วยส่วนของข้อมูลและส่วนชองตัวชี้ (ข้อมูลชนิด Pointer) สำหรับชี้ไปยังข้อมูล ตัวถัดไป (มีค่าเป็น Null ในข้อมูลตัวสุดท้าย)

โครงสร้างของข้อมูลแบบ linked list มี 2 ส่วน ใหญ่คือ
Head structure มี 3ส่วน count , pos , head

Data Node Structure ประกอบด้วย Data และ Pointer


กระบวนการทำงานและการฟังก์ชั่นในการดำเนินการ
1. Create lisst คือการสร้างที่ว่างขึ้นมาเป็นช่องว่าง ๆ
2. Insert node การหาข้อมูลมาลงในตำแหน่งที่จัดไว้ และนำข้อมูลมาเชื่อมต่อกันเรื่อยๆ
3. Delete Node ทำให้สมาชิกที่อยู่ที่เกิดจากการ Insert ลดลง ลบออกไป
4.Search list ใช้ในการค้นหาข้อมูล โดยมี if-else ถ้าจริงจะพบข้อมูล แต่ถ้าเท็จจะไม่พบข้อมูล

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

DTS03-1-07-2552

Pointer คือ
ตัวที่ทำหน้าที่ใช้เก็บตำแหน่งที่อยู่ของ Address ของตัวที่อยู่ในความจำ โดยจะมีเครื่องหมาย * และ & มาเกี่ยวข้อง เช่น
int *a;หมายความว่า ประกาศว่าตัวแปร a เป็นตัวแปร พอยน์เตอร์ที่ใช้เก็บตำแหน่งเริ่มต้นที่จะใช้เก็บ integer
y=&x หมายถึง ตัวแปรมีหน้าที่กับค่าตัวแปรพอยน์เตอร์ของ x ซึ่งเป็นตำแหน่งที่อยู่

สามารถ pointer มาใช้ในการเขียนโปรเรียกดึงใช้เฉพาะที่อยู่ในเครื่องคอมพวเตอร์ของเราได้ ซึ่งเป็นการเรียกใช้ในส่วนที่ต้องการเท่านั้นเพื่อความสะดวก และรวดเร็วในการทำงาน

(Set and String)
โครงสร้างข้อมูลแบบเซ็ต และ แบบสตริง

โครงสร้างข้อมูลแบบเซ็ต มีลักษณะเหมือนกับวิชาคณิตศาสตร์ ซึ่งในการแก้ปัญหาแสดงความสัมพันธ์กันใน ภาษา C ซึ่งจะใช้ Operators คือ
  1. set intersection
  2. set union
  3. set difference

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

โครงสร้างแบบสตริง

เป็นโครงสร้างข้อมูลที่เกี่ยวกับ อักขระ (character) ที่นำมาเขียนในโปรแกรมซึ่งจะเห็นได้ในรูปของ[ ] แล้วจำนวนอักขระ นั้นอยู่ข้างใน โดยที่ทุกครั้งต้องกำหนด
ให้มีที่ว่างสำหรับ \0 ด้วย เช่น [ 6 ] จะมีตัวอักษรที่ใช้จริง 5 และอีกช่อง คือ \0

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

ส่วนสัญลักษณ์ของ string จะใช้ " " เพื่อแสดงข้อความนั้นๆ

และ โครงสร้างแบบ string นั้นยังนำมาใช้ร่วมกับ array ในบทที่ 2 อีกด้วย

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

DTS02-24-06-52

สรูปบทเรียน Array and Record

Array คือ ชุดของข้อมูลที่มาสมาชิกเหมือนกัน คงที่ เป็นชุดตัวแปรเดียวกัน และตัวเหล่านนั้น

มาจัด เรียงให้มี มิติ เกิดขึ้น สามารถแบ่งออกได้ 3 แบบ
Array 1 มิติ จะมีลักษณะเหมือนเป็นเส้นตรง จะเป็นแนวตั้งหรือแนวนอนเกิดเป็นแถวเดียว เช่น




การประกาศตัวแปรของ array 1 มิติ นั้นประกาศ โดย ชนิดของตัวแปร ชื่อตัวแปร [จำนวนสมาชิก]



array 2 มิติ จะมีลักษณะที่มี row คุณ column เช่น

การประกาศตัวแปรของ array 2 มิติ นั้นประกาศ โดย
ชนิดของตัวแปร ชื่อตัวแปร [จำนวนสมาชิก] * [จำนวนสมาชิก]


arrayหลายมิติ จะมีความซับซ้อนและหลายมิติมากขึ้น ซึ่งมีค่าเป็น N มิติ อย่างเช่น




ซึ่งการทำงานของ array สามารถนำมาใช้ใน record or structrue นั้นเอง เวลาที่เขียนโครงสร้างนั้นต้องอาศัยในส่วนนี้

structrue คือ โครงสร้างข้อมูลที่นำมารวมกัน เป็น 1 ชุดข้อมูล ซึ่งแตกต่างจาก array คือข้อมูลนั้นสามารถที่จะแตกต่างกันได้

การเขียน Structrue มีความสัมพันธ์ กับการใช้ อะเรย์ มาเป็นส่วนหนึ่งในการเขียน
โดยการเขียน คือ
ต้องขึ้นด้วย Struct
ต่อ ด้วย
struc-name ชื่อของกลุ่ม structure
type ชนิดของตัวแปรที่มีอยู่ใน structrue
name-n ชื่อของตัวแปรที่อยู่ใน structrue
struc-variable ชื่อตัวแปรชนิดโครงสร้าง
คือ ตัวแปรที่มีโครงสร้าง

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

#include

#include
int main(void)
{
struct VDO_CD{
int ID;
char Drift_movie[10];
char name_title[40];
float date_borrow;
float date_return;
int price;
int discount;
int fine; int total;
} Vediocenter;Vediocenter.ID = 21147;
strcpy(Vediocenter.Drift_movie,"Action");
strcpy(Vediocenter.name_title,"Transformer");
Vediocenter.date_borrow = 240609;
Vediocenter.date_return = 290609;
Vediocenter.price = 50;
Vediocenter.discount = 0;
Vediocenter.fine = 0;
Vediocenter.total = 50;
printf("ID: %d\n Drift_movie: %s\n name_title: %s\n date_borrow: %-2f\n date_return: %-2f\n price: %d\n discount :%d\n fine:%d\n total:%d\n",Vediocenter.ID,Vediocenter.Drift_movie, Vediocenter.name_title,Vediocenter.date_borrow,Vediocenter.date_return,Vediocenter.price,Vediocenter.discount,Vediocenter.fine,Vediocenter.total);

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

1. ให้นักศึกษากำหนดค่า array1 มิติ และ array2 มิติ
char name[10]={'B','O','R','I','P','A','T','\0'};
char name1[3][3]={{'M','L','I'},{'L','E','R','T'}};

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

A[2] = 16
A[6] = 32.

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

#include
#include
int main(void){struct VDO_CD
{
int ID;
char Drift_movie[10];
char name_title[40];
float date_borrow;
float date_return;
int price;
int discount;
int fine;
int total;
} Vediocenter;Vediocenter.ID = 21147;strcpy(Vediocenter.Drift_movie,"Action");strcpy(Vediocenter.name_title,"Transformer");Vediocenter.date_borrow=240609;Vediocenter.date_return = 290609;Vediocenter.price = 50;Vediocenter.discount = 0;Vediocenter.fine = 0;Vediocenter.total = 50;
printf("ID: %d\n Drift_movie: %s\n name_title: %s\n date_borrow: %-2f\n date_return: %-2f\n price: %d\n discount :%d\n fine:%d\n total:d\n",Vediocenter.ID,Vediocenter.Drift_movie, Vediocenter.name_title,Vediocenter.date_borrow,Vediocenter.date_return,Vediocenter.price,Vediocenter.discount,Vediocenter.fine,Vediocenter.total);}

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

ประวัติ

นายบริพัฒน์ มะลิเลิศ รหัส 50172792016
Mr. Boripat Malilert

หลักสูตร การบริหารธุรกิจ (คอมพิวเตอร์ธุรกิจ)คณะวิทยาการจัดการ

มหาวิทยาลัยราชภัฏสวนดุสิต