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

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

สรุปสิ่งที่ได้จากการเรียน
วิชา การเตรียมฝึกประสบการณ์วิชาชีพบริหารธุรกิจ
1.ปฐมนิเทศ
อาจารย์ผู้สอนได้สอนในเรื่องเกณฑ์การคะแนนรายวิชาต่างๆที่ต้องเรียนและก็การประเมินผลนักศึกษา
2.มารู้จักสวนดุสิตกันเถอะและการประกันคุณภาพ
ได้รู้จักมหาวิทยาลัยราชภัฏสวนดุสิตมากขึ้น เช่น ปรัชญา วิสัยทัศน์ วัตถุประสงค์ในการเรียน
3.คุณธรรมจริยธรรมและธนาคารความดี
ได้มีการไปช่วยทำอาหารให้คนที่สนามหลวงได้เรียนรู้สิ่งต่างๆที่นั้น ส่วนธนาคารความดีได้ทำให้เรารู้จักการทำความดีให้คนอื่นบ้างอย่างน้อยวันละหนึ่งครั้งก็ยังดี ดีกว่าที่จะนำความเดือดร้อนมาให้คนอื่น
4.การเงินส่วนบุคคล
สอนให้รู้ถึงการใช้เงินอย่างมีค่าทำให้รู้ถึงคุณค่าของเงิน รู้ว่าก่อนจะใช้เงินต้องคิดให้ดีเสียก่อนว่ามันจำเป็นที่จะใช้หรือไม่
5.รับขวัญสู่บ้านใหญ่ การพัฒนาบุคลิกภาพ
ทำให้รู้ถึงคุณลักษณะที่เราควรจะเป็น
6.วัฒนธรรมข้ามชาติ
ได้สอนให้รู้ถึงการใช้ชีวิตร่วมกับคนอื่น ชาติอื่นที่มีขนบธรรมเนียมประเพณีที่เหมือนกันและไม่เหมือนกัน
7.เส้นทางสู่ความสำเร็จ
สอนให้เรารู้ว่าเมื่อเรามีเป้าหมายและความฝันเราควรตั้งใจและไปให้ถึง
8.ภาษาไทยในชีวิตประจำวัน
เมื่อเราเกิดมาเป็นคนไทยเราควรที่จะเรียนรู้และรักษาไว้ให้อยู่คู่กับคนไทยควรอนุรักษ์ไว้
9.การฝึกงานอย่างมืออาชีพและปัจฉิมนิเทศ
เป็นการสอนให้รู้ถึงหลักความจริงในการดำเนินชีวิต
สรุป
ในการเรียนวิชาการเตรียมฝึกประสบการณ์วิชาชีพบริหารธุรกิจ ได้สอนให้ดิฉันรู้จักอะไรมากขึ้นสอนทั้งในห้องเรียนและนอกห้องเรียนทำให้ดิฉันรู้จักเปลี่ยนแปลงการกระทำในชีวิตที่บางครั้งหลงผิดกลับมาคิดใหม่ เริ่มต้นใหม่ให้ดีกว่าเดิม

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

DTS10-09-09-2552

Sorting

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

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

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

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

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

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

การเรียงลำดับแบบฐาน (radix sort)เป็นการเรียงลำดับโดยการพิจารณาข้อมูลทีละหลัก

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

DTS09-02-09-2552

เรื่อง ทรี(ต่อ) และเรื่องกราฟ
ไบนารี่เสิร์ชทรี
ไบนารี่เสิร์ชทรี (Binary Search Tree, BST) เป็นไบนารี่ทรีที่รวบรวมค่าของ N เรคคอร์ดซึ่งเป็นคีย์ (Key) ตั้งแต่ K1 , K2 ,…….Kn โดยแต่ละโหนด Ri จะมี Ki เพียงคีย์เดียวสำหรับ i=1,2,….,N คีย์เป็นค่าสร้างความแตกต่าง (Identifier) ให้แต่ละโหนด ในการค้นหาโหนดที่ต้องการจะกระทำโดยค้นหาค่าของคีย์ และโหนด Ri ของไบนารี่เสิร์ชทรีจะถูกจัดการตามคุณสมบัติ ดังนี้
1. ทุก ๆ คีย์ของโหนดที่อยู่ในทรีย่อยด้านซ้ายของ Ri เป็นค่าที่มาก่อนหรือน้อยกว่าคีย์ของ Ri If Ri € Left (Ri) Then Kj <>
1. ทุก ๆ คีย์ของโหนดที่อยู่ในทรีย่อยด้านขวาของ Ri เป็นค่าที่ตามหลังหรือมากกว่าคีย์ของ Ri
If Ri € Right (Ri) Then Kj > Kiจะไดว่าคีย์ที่มาก่อนจะถูกพิจารณาตามลำดับเชิงเส้นและขึ้นกับลำดับการรวบรวม เมื่อพิจารณาตามคุณสมบัติที่ผ่านมาการค้นหาจะได้คีย์ A,B,C,D ตามลำดับและมีหลายวิธีที่จะจัดการกับไบนารี่เสิร์ชทรี จากรูปดังกล่าวจะมีไบนารี่เสิร์ชทรีหลายแบบแต่ลำดับของคีย์เหมือนกัน
วิธีการดึงโหนดออก แยกได้ 3 วิธี

1. กรณีโหนดที่จะดึงออกเป็นโหนดใบ สามารถดึงได้เลยเพราะไม่มีผลกระทบต่อโหนดอื่นๆ แล้วเป็นวิธีที่ง่ายที่สุด
2. กรณีโหนดที่ดึงออกมีเฉพาะทรีย่อยด้านซ้ายหรือทรีย่อยด้านขวาเพียงด้านใดด้านหนึ่ง สามารถทำได้เหมือนวิธีแรก เพียงให้โหนดแม่ของโหนดที่ต้องการดึงออกชี้ไปยังโหนดลูกของโหนดนั้นแทน
3. กรณีโหนดที่ต้องการดึงออกมีทั้งทรีย่อยด้านซ้ายและทรีย่อยด้านขวา ต้องทำการเลือกว่าจะนำทรีย่อยด้านใดมาแทนโหนดที่ถูกดึงออกกราฟ (Graph)
เป็นโครงสร้างข้อมูลไม่เป็นเชิงเส้น (Nonlinear Data Structure) มีความแตกต่างจากโครงสร้างข้อมูลทรีในบทที่ผ่านมา แต่เป็นลักษณะพิเศษแบบหนี่งของกราฟโดยทรีเป็นกราฟอะไซคลิกที่ไม่มีการวนลูปและการวนถอยกลับ เป็นกราฟเชื่อมกันที่มีเพียงเอจเดียวระหว่างสองโหนดกราฟเป็นโครงสร้างข้อมูลประเภทหนึ่งที่แสดงความสัมพันธ์ระหว่าง vertex และ edge กราฟจะประกอบด้วยกลุ่มของ vertex ซึ่งแสดงในกราฟด้วยสัญลักษณ์รูปวงกลม และ กลุ่มของ edge (เส้นเชื่อมระหว่าง vertex) ใช้แสดงถึงความสัมพันธ์ระหว่าง vertex หากมี vertex ตั้งแต่ 2 vertex ขึ้นไปมีความสัมพันธ์กัน ใช้สัญลักษณ์เส้นตรงซึ่งอาจมีหัวลูกศร หรือไม่มีก็ได้กราฟสามารถเขียนแทนด้วยสัญลักษณ์ ดังนี้G = ( V , E )G คือ กราฟV คือ กลุ่มของ vertexE คือ กลุ่มของ edgeศัพท์ที่เกี่ยวข้อง

1.เวอร์เทก (Vertex) หมายถึง โหนด
2.เอดจ (Edge) หมายถึง เส้นเชื่อมของโหนด
3.ดีกรี (Degree) หมายถึง จำนวนเส้นเข้าและออก ของโหนดแต่ละโหน
4.แอดจาเซนท์โหนด (Adjacent Node) หมายถึง โหนดที่มีการเชื่อมโยงกัน
Graph แบ่งเป็น
1. Directed Graph (Digraph) (Arc) แบบระบุทิศทาง
2. Undirected Graph แบบไม่ระบุทิศทาง
การเก็บข้อมูลในหน่วยความจำสามารถทำได้ 2 แบบ ดังนี้

1. Adjacency Matrix (แอดจาเซนซี เมตริก) : ใช้อาร์เรย์เก็บข้อมูล
2. Adjacency List (แอดจาเซนซี ลิส) : ใช้ลิงค์ลิสต์เก็บข้อมูลAdjacency Matrixเป็นโครงสร้างที่ประกอบไปด้วยโหนดและเส้นเชื่อมต่อที่บอกถึงเส้นทางของการเดินทาง หรือความสัมพันธ์ในทิศทางซึ่งสามารถนำมาแทนความสัมพันธ์นั้นด้วยการกำหนดเมตริกซ์ n x nMk เป็นเมทริกซ์ของกราฟใด ๆ k คือทางเดินที่มีความยาว k จากโหนดหนึ่งไปอีกโหนดหนึ่งAdjacency Matrix 0 : ไม่เป็นแอดจาเซนซีกัน1 : เป็นแอดจาเซนซีกัน
การท่องไปในกราฟเป็นการไปเยือนโหนดในกราฟ ซึ่งแต่ละโหนดจะถูกเยือนเพียงครั้งเดียว แต่กราฟนั้นมาหลายเส้นทางเมื่อเยือนแล้วต้องทำเครื่องหมายว่าได้เยือนเรียบร้อย

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

DTS08-26-08-2552

เรื่อง ทรี(Tree)
ทรีเป็นกราฟแบบมีทิศทาง ที่มีโครงสร้างแบบลำดับชั้น ทิศทางของกราฟที่แทนทรีจะมีทิศทางจากบนลงล่าง ดังนั้นการกวาดทรี เราจึงไม่นิยมแสดงทิศทางของเส้นเชื่อมการให้นิยามในรูปของการเรียกซ้ำซึ่งสอดคล้องกับลักษณะธรรมชาติ ของทรี ดังนี้ คือ ทรีประกอบด้วยโหนด R ซึ่งเรียกว่า โหนดราก (root) และ ทรีย่อย (subtree) จำนวนศูนย์ หรือมากกว่าศูนย์ ซึ่งแต่ละทรีย่อยจะเชื่อมกับโหนดราก (R)โดยตรงด้วยเส้นเชื่อมการเรียกชื่อองค์ประกอบของทรีโหนดที่อยู่ระดับบนสุดของทรี เรียกว่า โหนด R ,โหนดราก, พ่อ (father)หนดรากของทรีย่อยของ R เรียกว่า ลูก (child) ของ Rโหนดที่ไม่มีโหนดลูก เรียกว่า โหนดใบ (leaf node)เส้นเชื่อมโหนดทรี เรียกว่า กิ่ง (branch)โหนดที่มีทั้งพ่อทั้งลูก เรียกว่า โหนดกิ่ง (branch node)โหนดที่มีพ่อเดียวกัน เรียกว่า โหนดพี่น้อง (sibling) และยังอาจนิยามโหนดว่าเป็น โหนดปู่ (grandfather) หรือ โหนดหลาน (gtrandchild) ได้ในลักษณะเดียวกันเส้นทาง (path) จากโหนด n1 ไปยังโหนด nk ใดๆ จะเป็นลำดับของโหนด n1,n2,...,nkความยาว (length) ของเส้นทางจะเป็นจำนวนของเส้นเชื่อมที่อยู่ในเส้นทาง ซึ่งเท่ากับ k-1 เส้นทาง จากโหนดใดๆ ไปยังตัวเองจะมีความยาวเป็ยศูนย์ และในทรีแต่ละทรี จะมีเส้นทางหนึ่งเส้นเท่านั้นจากโหนดรากไปยัง โหนดใดๆ ความลึก (depth) เป็น ความยาวของเส้นทางจากโหนดรากไปยังโหนด n โซึ่งมีเส้นทางเดียวที่ไม่ซ้ำกัน) ความสูง (height) เป็น เส้นทางทีสุดจากโหนด n ไปยังโหนดใบถ้ามีเส้นทางจาดโหนด n1 ไปยังโหนด n2 จะเป็น บรรพบุรุษ (ancestor) ของ n2 และ n2 จะเป็น ลูกหลาน (descendant) ของ n1 ถ้า n1 != n2 ดังนั้น n1 จะเป็น บรรพบุรุษที่แท้จริง (proper ascestor) ของ n1 และ n2 ลูกหลานที่แท้จริง (proper descendant) ทรีแบบลำดับทรีแบบราก (rooted tree ) เป็นทรีที่สามารถวาดได้อิสระ โดยเชื่อมโหนดในระดับต่ำลงไป และมีโหนด ใบอยู่ในระดับล่าง มีโครงสร้างไม่เหมาะสมก่การใช้งาน เนื่องจากวิธีการเรียกชื่อโหนดจากลำดับซ้ายไปขวา
"ทรีแบบลำดับ (ordered tree)" คือ ทรีแบบรากที่โหนดลูกของแต่ละโหนดถูกกำหนดลำดับดังรูป ถ้าต้องการจะใช้ทรีแบบลำดับเป็นโครงสร้างข้อมูล ในแต่ละโหนดจะต้องมีจำนวนเขตข้อมูลมากพอๆ กับจำนวน ของโหนดนั้น ดังนั้นถ้ามีบางโหนดในทรีมีจำนวนทรีมากกว่า 10 ทรีย่อย จะต้องมีเขตข้อมูลสำหรับลิงค์ของ แต่ละโหนดถึง 10 เขต ซึ่งแต่ละเขตลิงค์ต่างๆ เหล่านี้ส่วนใหญ่จะมีค่าเป็น NULL ซึ่งทำให้เนื้อที่จำนวนมาก ไม่ได้ใช้งานไบนารีทรีไบนารีทรี เป็น ทรีว่าง หรือทรีที่ประกอบด้วยโหนดรากที่เรียกว่า ราก กับ ไบนารีทรี 2 ทรี เรียกว่า ทรีย่อยทางซ้าย (left subtree) และ ทรีย่อยทางขวา (right subtree) ของราก การสร้างไบนารีทรี ที่มีโหนดเดียว สามารถสร้างโหนดนั้นเป็นโหนดรากที่มีทรีย่อยทางซ้าย และทรีทางขวาเป็นทรีว่าง จะเห็นว่าไบนารีทรีแตก ต่างจากทรีทั่วไป เนื่องจากในไบนารีทรี ความหมายของคำว่า ซ้าย หรือ ขวา มีความสำคัญ ไบนารีทรี 2 โหนด ดังนั้นไบนารีทรีสามรถได้มาจากทรีแบบลำดับที่เหมาะสมกัน โดยการแยกกิ่งทางซ้ายออกจากกิ่งทางขวาการเปลี่ยนทรีทั่วไปเป็นไบนารีทรีไบนารีทรีเป็นโครงสร้างข้อมูลที่มีประสิทธิภาพ แต่มีข้อจำกัดว่า แต่ละโหนดมีลูกได้ไม่เกิน 2 และในการประยุกต์ ใช้งานส่วนใหญ่ โครงสร้างข้อมูลเป็นจำนวนใดๆ ได้ตามใจ การเปลี่ยนทรีทั่วไปเป็นไบนารีทรี เริ่มต้นจะเชื่อมโหนด แต่ละโหนดกับโหนดลูกซ้ายสุดของโหนดนั้น ซึ่งเรียกว่าโหนดแรก ต่อมาเชื่อมแต่ละโหนดยกเว้นโหนดรากกับโหนดถัดไป ที่มีพ่อเดียวกัน(พี่น้อง) ซึ่งเรียกว่าเชื่อมโหนดลูกถัดไปเพื่อให้โครงสร้างของไบนารีทรีที่ดีกว่านี้ จะต้องหมุนทรีเล็กน้อยตามเข็มนาฬิกา ซึ่งจะทำให้เส้นเชื่อมที่ชี้ลงล่าง ชี้ลงไปทางซ้าย และเส้นเชื่อมที่ชี้ตามแนวนอน ชี้ลงไปข้างล่างทางขวาป่าและสวนป่า (forest) หมายถึงของทรีที่เป็นทรีแบบรก และ สวน (orchard) หมายถึง ชุดของทรีแบบลำดับ แต่โดยทั่วไป แล้วป่ากับสวนมีความหมายเดียวกัน คือ ชุดของทรีทั่วไปสามารถสร้างป่าหรือสวนได้ โดยการขจัดรากออกไปจากทรีแบบราก หรือแบบลำดับและทำนองเดียวกัน สามารถแปลง จากป่าแสวนไปเป็นไบนารีทรีได้มีขั้นตอนดังต่อไปนี้1.ขจัดเส้นเชื่อมเดิมออก2.แปลงทรีแต่ละต้นให้เป็นไบนารีทรี3.เชื่อมโหนดรากของทรีเขาด้วยกัน ในแนวนอนโดยใช้ความสัมพันธ์พี่น้อง4.หมุนทรีที่ได้ 45 องศาตามเข็มนาฬิกา ซึ่งจะทำให้เส้นเชื่อมในแนวตั้งกลายเป็นเส้นเชื่อมทางซ้าย และเส้นเชื่อมในแนวนอนกลายเป็นเส้นเชื่อมทางขวา
การท่องไบนารีทรี (traversal of binary tree)เป็นการเคลื่อนที่ไปยังโหนดทุกโหนดของไบนารีของทรี หรือการเยี่ยมโหนดทุกโหนดของทรี ในข้อมูลแบบทรีโหนด ทุกโหนดที่จะท่องมีลำดับแตกต่างกัน ที่โหนดใด ไๆที่กำหนดให้จะต้องมีการกระทำ 3 อย่าง ในลำดับใดๆ คือ
1. เยี่ยมโหนดนั้น
2. ท่องไปยังทรีย่อยทางซ้ายของโหนดนั้น
3. ท่องไปยังทรีย่อยทางขวาของโหนดนั้น
จุดสำคัญของของการท่องไบนารีทรี คือ จะเยี่ยมททรีย่อยก่อนการท่องทรีย่อยที่มีอยู่ หรือจะเยี่ยมโหนดนั้นใน ระหว่างการท่องทรีย่อยของโหนดนั้น หรือจะเยี่ยมดหนดนั้นในระหว่างการท่องทรีย่อยภายหลังจากการท่องทรีย่อย ทั้งสองของโหนดนั้นเสร็จเรียบร้อยแล้ว

วันพุธที่ 5 สิงหาคม พ.ศ. 2552

DTS07-05-08-2552

คิว(Queue)
คิวเป็นโครงสร้างข้อมูลเชิงเส้นที่สามารถเพิ่ม ข้อมูลเฉพาะตำแหน่งที่เรียกว่า Rear และลบข้อมูลเฉพาะตำแหน่งที่เรียกว่า Front คิวเป็นโครงสร้างข้อมูลแบบเข้าก่อนออกก่อน (First In First Out :FIFO)

การแทนที่ข้อมูลของคิว มี 2 วิธี คือ

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

1.1.Head Node จะประกอบไปด้วย 3 ส่วน คือพอยเตอร์จำนวน 2 ตัว คือ Front และ rear กับจำนวนสมาชิกในคิว

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

-Create Queue = จัดสรรหน่วยความจำให้แก่ Head Node และให้ค่า Pointer ทั้ง 2 ตัวมีค่าเป็น null และจำนวนสมาชิกเป็น 0

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

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

-Queue Front = การนำข้อมูลที่อยู่ส่วนต้นของคิวมาแสดง

-Queue Rear = การนำข้อมูลที่อยู่ส่วนท้ายของคิวมาแสดง

-Empty Queue = การตรวจสอบว่าคิวว่างหรือไม่

-Full Queue = การตรวจสอบว่าคิวเต็มหรือไม่

-Queue Count = การนับจำนวนสมาชิกที่อยู่ในคิว

-Destroy Queue = การลบข้อมูลทั้งหมดที่อยู่ในคิว

2.การแทนที่ข้อมูลของคิวแบบอะเรย์

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

การนำข้อมูลออกจากคิว จะไม่สามารถนำอะไรออกจากคิวที่ว่างเปล่าได้ ถ้าพยายามจะทำให้เกิดความผิดพลาดที่เรียกว่า Underflow

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

กรณีที่เป็นคิวแบบวงกลมคิวจะเต็มก็ต่อเมื่อมีการเพิ่มข้อมูลเข้าไปในคิวเรื่อยๆจนกระทั่ง rear มีค่าน้อยกว่า front อยู่หนึ่งค่าคือ rear=front-1

การประยุกต์ใช้คิว

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

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

DTS06 28-07-2552

เรื่อง สแตก(ต่อ)
การใช้ สแตก เพื่อแปลรูปนิพจน์ทางคณิตศาสตร์รูปแบบนิพจน์ทางคณิตศาสตร์• นิพจน์ Infix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่ระหว่างตัวดำเนินการ (Operands) เช่น A+B-C• นิพจน์ Prefix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หน้าตัวดำเนินการ (Operands) เช่น +-AB• นิพจน์ Postfix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หลังตัวดำเนินการ (Operands) เช่น AC*+การแปลงจาก infix เป็น postfix Stack มีการทำงานแบบ LIFO ถูกนำมาอธิบายการทำงานของการแปลงจาก infix เป็น postfix อยู่เสมอ โดยพิจารณาน้ำหนักของเครื่องหมายในนิพจน์ และเครื่องหมายที่ถูกกระทำก่อนไปหลังคือ1. วงเล็บ Parenthesis ()2. ยกกำลัง Exponentiation ^ (Left to Right)3. คูณและหาร Multiplication *, Division / (Left to Right)4. บวกและลบ Addition +, Subtraction - (Left to Right) กฎเกี่ยวกับการแปลง1. ถ้าข้อมูลเข้า (input) เป็นตัวถูกดำเนินการ (operand) ให้นำออกไปเป็นผลลัพธ์ (output)2. ถ้าข้อมูลเข้าเป็นตัวดำเนินการ (operator) ให้ดำเนินการดังนี้2.1 ถ้าสแตกว่าง ให้ push operator ลงในสแตก2.2 ถ้าสแตกไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตก- ถ้า operator ที่เข้ามามีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตกให้ push ลงสแตก- ถ้า operator ที่เข้ามามีความสำคัญน้อยกว่าหรือเท่ากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตกให้ pop สแตกออกไปเป็นผลลัพธ์ แล้วทำการเปรียบเทียบ operator ที่เข้ามากับ operator ที่ตำแหน่ง TOP ต่อไป จะหยุดจนกว่า operator ที่เข้ามาจะมีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตก แล้วจึง push operator ที่เข้ามานั้นลงสแตก3. ถ้าข้อมูลเข้าเป็นวงเล็บเปิด ให้ push ลงสแตก4. ถ้าข้อมูลเข้าเป็นวงเล็บปิด ให้ pop ข้อมูลออกจากสแตกไปเป็นผลลัพธ์จนกว่าจะถึงวงเล็บ เปิด จากนั้นทิ้งวงเล็บเปิดและปิดทิ้งไป5. ถ้าข้อมูลเข้าหมด ให้ pop ข้อมูลออกจากสแตกไปเป็นผลลัพธ์จนกว่าสแตกจะว่าง

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

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

การเขียนโปรแกรม stdio.h



#include

void main()

{

c

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

การเขียนโปรแกรม stdio.h

#include
void main()
{
char name [10];
int age [5];
float high;
float weight;
int Tel[11];

printf("my rueme\n\n");
printf("name:");
scanf("%s",&name);
printf("age:");
scanf("%d",&age);
printf("high:");
scanf("%f",&high);
printf("weight:");
scanf("%f",&weight);
printf("Tel:");
scanf(%d",&Tel);
}



การเขียนโปรแกรม iostream.h

#include
void main()
{
char name [10];
int age[5];
float high;
float weight;
int Tel[11];

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

การเขียนโปรแกรม stdio.h



#include

void main()

{

char name [10]

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

DTS05-22-07-2552

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

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

การใช้สแตกในชีวิตประจำวัน
การใช้ดินสอกด
-เราต้องนำไส้ดินสอสอดเข้าไปก่อนเวลาเราใช้เราก็กดดังนั้นจึงเป็นการเข้าก่อนออกทีหลัง

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


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

DTS04-15/07/2552

Linked List
Linked Listเป็นการจัดเก็บชุดข้อมูลมีพอยเตอร์เป็นตัวเชื่อมโยงต่อเนื่องกันไปตามลำดับซึ่งในลิงค์ลิสต์จะประกอบไปด้วยข้อมูลที่เรียกว่าโหนด (Node)
ในหนึ่งโหนดจะประกอบด้วย
1.ส่วนของข้อมูลที่ต้องการจัดเก็บ เรียกว่าส่วน (Data)
2.ส่วนที่เป็นพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไป (Link) หรือชี้ไปยังโหนดอื่นๆที่อยู่ในลิสต์**หากโหนดแรกไม่มีข้อมูลหรือไม่มีข้อมูลในโหนดที่อยู่ถัดไป ส่วนที่เป็นพอยน์เตอร์หรือ Link จะเก็บค่า NULL เขียนแทนด้วยเครื่องหมาย กากบาท
โครงสร้างข้อมูลแบบลิงค์ลิสต์ประกอบด้วย 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 ถัดไปให้ถูกต้องด้วย

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

DTS03-01/07/2552

สรุปเนื้อหาบทเรียน "Data Structure"
สรุปบทเรียน Pointer , Set and String

Pointer

pointer คือตัวแปรที่จะทำหน้าที่ชี้ที่อยู่ในหน่วยความจำ (Address) ของตัวแปรอื่นๆ เราสามารถใช้ ตัวแปร Pointer เพื่อการเข้าถึงข้อมูลที่รวดเร็ว

การประกาศตัวแปร Pointertype *variable-name;type คือชนิดของตัวแปรที่จะประกาศเช่น int,float,char* คือเครื่องหมายที่แสดงให้รู้ว่าตัวแปรหลังดอกจันคือตัวแปร Pointervariable-name คือชื่อตัวแปรที่จะสร้างขึ้น ทั้งนี้จะต้องไม่เป็นคำสงวนของภาษาซี

ข้อสังเกตุเกี่ยวกับตัวแปร Pointer (ประเภท int)- การใช้งานตัวแปร pointer มีได้ 2 แบบดังนี้
*pt_age จะหมายถึงการนำค่าของ pt_age ออกมาแสดง

pt_age จะหมายถึงการนำตำแหน่งหน่วยความจำของ pt_age มาแสดง

โครงสร้างข้อมูลแบบ String
string หมายถึงอักขระที่มีความยาวมากกว่า 1 ตัวแรงต่อกันเป็นข้อความ โดยข้อมูลชนิดขด้อความต้องเขียนอยู่ภายในเครื่องหมาย " " (Double quote)
หรือพูดง่าย ๆ ก็คือ String เป็น Array ของ อักขระนั่นเอง ตัวอย่างเช่น
char name[20];
หมายถึง string ที่เก็บข้อความได้ 19 ตัวอักษร ตามปกติแล้วจุดสิ้นสุดของ string จะเป็น \0


มีฟังก์ชั่นที่เกี่ยวข้องกับ String ดังนี้
getchar(); // ใช้สำหรับรับข้อมูลชนิดอักขระเข้ามาจากคีย์บอร์ด โดยรับครั้งละ 1 อักขระเท่านั้น
gets(); // จะใช้รับข้อมูลชนิดข้อความเข้ามาทางคีย์บอร์ด
putchar(); // คือการแสดงผลอักขระออกทางหน้าจอ
puts(); // ใช้ในการแสดงข้อความออกจากหน้าจอ


โครงสร้างข้อมูลแบบเซต (set)
เป็นโครงสร้างที่ข้อมูลแต่ละตัวไม่มีความสัมพันธ์กันเลย

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

แนะนำตัว


วันอาทิตย์ที่ 28 มิถุนายน พ.ศ. 2552

DTS 02-24-06-2552

Array and Record
สรุป
อาร์เรย์ คือ แถวหรือลำดับ นั่นคือแถวหรือลำดับของข้อมูลชนิดเดียวกันที่มีจำนวนหลายตัวนำมาเก็บในตัวแปรชื่อเดียวกัน แต่ต่างกันที่ตัวบอกลำดับ ซึ่งเรียกว่า ตัวห้อย หรือตัว Subscript ของตัวแปรนั้น อาร์เรย์มีจำนวนมิติตามจำนวนของดัชนีที่ใช้ในการเข้าถึงค่าที่เก็บในอาร์เรย์ ตัวอย่างเช่น
อาร์เรย์หนึ่งมิติ หรือ อาร์เรย์เชิงเส้น ต้องการดัชนีหนึ่งตัวในการเข้าถึงตำแหน่งในอาร์เรย์
อาร์เรย์สองมิติ หรือ อาร์เรย์สี่เหลี่ยม ต้องการดัชนีสองตัวในการเข้าถึงตำแหน่งในอาร์เรย์ ซึ่งใช้ในการเก็บข้อมูลอย่างเช่น เมตริกซ์ ตาราง และ ข้อความหลายๆข้อความ เป็นต้น
การสร้าง Array ขึ้นมาใช้งานทำได้ดังนี้
1. ชื่อของ Array
2. ขนาดของ Array แต่ละช่อง และมิติของ Array
3. ค่าสูงสุด ( Upper Bound) และค่าต่ำสุด (Lower Bound) ในแต่ละมิติ ในการประกาศตัวแปรหรืออาร์เรย์ เราสามารถทำการกำหนดค่าเริ่มต้นให้กับตัวแปรหรืออาร์เรย์นั้นได้

Data Structure Introduction
ข้อมูล หมายถึง ตัวเลข ตัวอักษรโครงสร้างข้อมูล หมายถึง ข้อมูลต่างๆนำมาประกอบโครงสร้างออกแบบให้เป็นระบบ การเขียน loop Do while การเขียนผังงานโปรแกรมโครงสร้างสัญลัษณ์
โครงสร้างข้อมูลในภาษาคอมพิวเตอร์ออกเป็น 2 ประเภท คือ
1.โครงสร้างข้อมูลทางกายภาพ โครงสร้างข้อมูลทางกายภาพเป็นโครงสร้างข้อมูลพื้นฐานทั่วไปที่ทุกภาษาควรจะมีให้ใช้ เช่น จำนวนเต็ม จำนวนจริง ตัวอักขระ แถวลำดับ ระเบียนข้อมูล และแฟ้มข้อมูล เป็นต้น
2.โครงสร้างข้อมูลทางตรรกะ เป็นโครงสร้างข้อมูลที่เกิดจากจินตนาการของผู้ใช้ เช่น ลิสต์ สแตก คิว ทรี และกราฟ เป็นต้น

struct camera
{
char name[30];
char generation[15];
char color[10];
char resolution[20];
float pixels;
float high;
float weight;
int price;
}

วันพฤหัสบดีที่ 25 มิถุนายน พ.ศ. 2552



นางสาวกาญจนา ยอดคำมี
Miss.Kanjana yodkammee
ชื่อเล่นกานต์ อายุ 20 ปี
เกิดวันจันทร์ที่ 12 เดือนกันยายน 2531
รหัส 50152792033
หลักสูตรบริหารธุรกิจ(คอมพิวเตอร์ธุรกิจ)
คณะวิทยาการจัดการ
มหาวิทยาลัยราชภัฏสวนดุสิต
คติประจำใจ:ท้อได้แต่อย่าถอย