Thursday, March 7, 2013

สถานีเกษตรหลวงอ่างขาง

ประวัติ...ดอยอ่างขาง

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

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


ดอยอ่างขาง

ดอยอ่างขาง

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

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

ดอยอ่างขาง

ดอยอ่างขาง

ดอยอ่างขาง

ดอยอ่างขาง

ดอยอ่างขาง

ดอยอ่างขาง

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

      
ดอยอ่างขาง

ดอยอ่างขาง

กิจกรรมท่องเที่ยวบนดอยอ่างขาง ได้แก่…

          • ชมแปลงสาธิต ผัก ผลไม้ และไม้ดอกเมืองหนาวภายในศูนย์ฯ สามารถขับรถวนเป็นวงกลม ค่าเข้าชมคนละ 30 บาท ยานพาหนะคันละ 50 บาท

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

          • เยี่ยมหมู่บ้านหลวง สัมผัสชีวิตชาวจีนฮ่อ ชาวหมู่บ้านหลวงเป็นชาวจีน ยูนานที่อพยพมาจากประเทศจีนในสมัยสงครามโลกครั้งที่ 2 และประกอบอาชีพด้านการเกษตรกรรมเป็นหลัก อาทิ ปลูกผักผลไม้ เช่น พลัม ลูกท้อ และสาลี่

ดอยอ่างขาง

ดอยอ่างขาง

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

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


ดอยอ่างขาง

ดอยอ่างขาง


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

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

          • ขี่จักรยานเสือภูเขาชมธรรมชาติ จากบ้านคุ้มไปยังบ้านนอแล และจากบ้านหลวงไปยังบ้านผาแดง

ดอยอ่างขาง

ดอยอ่างขาง

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

          • ขี่ฬ่อล่องไพร ชมความงดงามของธรรมชาติ ในบรรยากาศเย็นสบายรอบ ๆ ดอยอ่างขาง ด้วยการนั่งบนหลังฬ่อ (การนั่งบนหลังฬ่อต้องนั่งหันข้าง เนื่องจากอานกว้างไม่สามารถนั่งคร่อมอย่างการขี่ม้าได้) หากสนใจกิจกรรมนี้ต้องติดต่อกับรีสอร์ทล่วงหน้าอย่าน้อย 1 วัน เพราะปกติชาวบ้านจะนำฬ่อไปเป็นพาหนะขนผลิตผลทางการเกษตรด้วย

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

ดอยอ่างขาง

ดอยอ่างขาง

 ที่พักและร้านอาหาร

          สถานีเกษตรหลวงอ่างขางมีบ้านพักรับรองภายในศูนย์ฯ จำนวน 18 หลัง ดังนี้...

          • ขนาดพัก 2 คน ราคา 1,000 บาท/หลัง/คืน
          • ขนาดพัก 6 คน ราคา 1,200 บาท/หลัง/คืน
          • ขนาดพัก 40 คน ราคา 150 บาท/คน/คืน
          • เต็นท์บริการ ขนาด 2-3 คน ราคา 150 บาท/หลัง/คืน หากรวมถุงนอนราคา 300 บาท/หลัง/คืน 
          • เต็นท์บริการ ขนาด 4-5 คน ราคา 300 บาท/หลัง/คืน หากรวมถุงนอน ราคา 500 บาท/หลัง/คืน 
          • กรณีนำเต็นท์มาเองคิดค่าบริการพื้นที่คนละ 20 บาท
          • มีร้านอาหารและเครื่องดื่มภายในสโมสรอ่างขาง

          หมายเหตุ : กรุณาสำรองที่พักล่วงหน้าก่อนเดินทางอย่างน้อย 1 เดือน โทร. 0-5345-0107-9

เครดิต http://travel.kapook.com/view1266.html

วิศวกรรมซอฟแวร์ (Software Engineering)


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

1.1        ซอฟแวร์ การเปลี่ยนแปลง และปัญหาที่พบ

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

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

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

3.        ซอฟแวร์ด้านวิทยาศาสตร์และวิศวกรรม (Scientific Software / Engineering) เป็นซอฟแวร์ที่ใช้เฉพาะงานด้านวิทยาศาสตร์และวิศวกรรมศาสตร์

4.        ซอฟแวร์แบบฝัง (Embedded Software) เป็นซอฟแวร์ที่ติดตั้งไว้ภายในอุปกรณ์อิเล็กทรอนิกส์ต่างๆ หรือภายในระบบงาน เพื่อควบคุมการทำงานของอุปกรณ์หรือระบบงานนั้นๆโดยไม่แสดงให้ผู้ใช้งานเห็น หรือจำกัดการมองเห็น

5.        ซอฟแวร์แบบสายการผลิต (Production-Line Software) เป็นซอฟแวร์เฉพาะด้าน ที่ลูกค้าหลายกลุ่มสามารถนำไปใช้งานได้เหมือนกัน หรืออาจเป็นกลุ่มลูกค้าเฉพาะ และลูกค้าตลาดใหญ่ที่เป็นผู้ใช้ทั่วไป

6.        เว็บแอปพลิเคชั่น ( Web Application) กรณีซอฟแวร์แอปพลิเคชั่นสามารถทำงานบนเว็บไซด์ เพื่อจัดการมูลในฐานข้อมูลจะเรียกว่า เว็บแอปพลิเคชั่น

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

1.        Generic Product เป็นผลิตภัณฑ์ซอฟแวร์หรือระบบที่ถูกผลิตขึ้นโดยผู้ผลิตซอฟแวร์รายใหญ่ เพื่อจำหน่ายให้กับลูกค้าในตลาดทั่วไปที่ต้องการซื้อไปเพื่อใช้งานตามความ สามารถของซอฟแวร์ โดยไม่ยึดตามความต้องการของลูกค้า
2.        Customized Product เป็นผลิตภัณฑ์ซอฟแวร์หรือระบบ สำหรับลูกค้าเฉพาะรายที่ตกลงทำสัญญาว่าจ้างกันไว้โดยการผลิตจะยึดตามความ ต้องการของลูกค้า
1.2        วิศวกรรมซอฟแวร์และความสำคัญ

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

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

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

ความแตกต่างของวิศวกรรมซอฟแวร์และวิศวกรรมระบบ
วิศวกรรมระบบ (System Engineering) เกี่ยวกับทุกๆ ด้านของการพัฒนาและการเปลี่ยนแปลงของระบบที่มีความสลับซับซ้อน โดยมีซอฟแวร์เป็นแกนหลักในการทำงานของระบบ ดังนั้นวิศวกรรมระบบจึงเกี่ยวข้องกับการพัฒนาฮาร์ดแวร์ นโยบาย ออกแบบ พัฒนากระบวนการและระบบไปพร้อมๆ กัน วิศวกรรมระบบเป็นการประทำที่ก่อให้เกิดการกำหนดระบบ ระบุถึงสถาปัตยกรรมทั้งระบบ แล้วนำส่วนประกอบที่แตกต่างกันมาประสานเข้าด้วยกันจนกลายเป็นระบบ 1 ระบบ
ความแตกจ่างของวิศวกรรมซอฟแวร์กับการวิเคราะห์ออกแบบระบบ
การวิเคราะห์ออกแบบระบบ (System Analysis and Design) เป็นการศึกษา วิเคราะห์ และแยกปัญหาที่เกิดขึ้นในระบบ แล้วทำการออกแบบระบบ และกำหนดคุณสมบัติทางเทคนิค แต่ขั้นตอนของวิศวกรรมซอฟแวร์จะมีมากกว่าขั้นตอนของการวิเคราะห์และออกแบบ ระบบ ที่มีเพียงกิจกรรมที่สำคัญคือ การจัดทำความต้องการ การวิเคราะห์ และการออกแบบ เท่านั้น
บุคคลที่เกี่ยวข้องกับงานวิศวกรรมซอฟแวร์
ผู้ผลิตซอฟแวร์ต้องติดต่อสื่อสารกับบุคคลหลายกลุ่มแตกต่างกันไป ขึ้นอยู่กับขนาดและระดับความยากของโครงการผลิตซอฟแวร์ โดยทั่วไปสามารถจำแนกออกเป็น 3 กลุ่ม ได้แก่ ผู้ใช้ (User) ลูกค้า (Customer) และนักพัฒนา (Developer)
ลูกค้า อาจเป็นบุคคล องค์กร หรือบริษัท ที่ต้องการให้มีการผลิตซอฟแวร์ และเป็นผู้จ่ายเงิน นักพัฒนา อาจเป็น บุคคล บริษัท หรือองค์กรก็ได้เช่นกัน แต่เป็นผู้ทำหน้าที่สร้างซอฟแวร์อาจจำแนกเป็น  ผู้ที่มีหน้าที่หลักในการ วิศวกรรมซอฟแวร์ นั่นคือ วิศวกรซอฟแวร์  ผู้ใช้คือ ผู้ใช้ระบบที่แท้จริง ที่ต้องใช้งานคอมพิวเตอร์และซอฟแวร์ของระบบเป็นงานประจำ

ความสัมพันธ์ระหว่างกลุ่มบุคคลที่เกี่ยวข้องกับงานวิศวกรรมซอฟแวร์

วิศวกรซอฟแวร์ ที่ต้องรับผิดชอบงานส่วนใหญ่ของวิศวกรรมซอฟแวร์ จะต้องเป็นผู้ที่มีความรู้ และทักษะต่างๆ ตลอดจนมีบุคลิกภาพดังต่อไปนี้
ความรู้ทางด้านการผลิตซอฟแวร์ เกี่ยวกับทักษะ เครื่องมือ กระบวนการจัดการ ที่ช่วยสนับสนุนการผลิตซอฟแวร์
ความรู้ทางด้านการบริหารโครงการ เกี่ยวกับการวางแผน การกำหนดกิจกรรม การจัดสรรทรัพยากร การติตามและการควบคุมการดำเนินการต่างๆ
ความรู้ด้านการจัดการ เกี่ยวกับกระบวนการนำทรัพยากรการบริหารมาใช้ให้บรรลุวัตถุประสงค์ตามขั้นตอน การบริหารคือ การวางแผน การจัดการองค์กร การชี้นำและการควบคุมงานให้สัมฤทธิ์ผล
ความรู้ทางด้านธุรกิจ เกี่ยวกับกิจกรรมต่างๆ ของการซื้อขายสินค้า หรือการบริหารจัดการตามความต้องการของผู้บริโภค ตลอดจนกลยุทธ์ต่างๆ ที่จะช่วยให้ได้เปรียบคู่แข่งขัน
ความรู้ทางต้านงานประชาสัมพันธ์ เกี่ยวกับการติดต่อสื่อสารกับผู้รับข่าวสาร ไม่ว่าจะเป็นลูกค้า หรือแม้แต่เพื่อนร่วมงานในองค์กร
ความน่าเชื่อถือ เกี่ยวกับการสร้างความน่าเชื่อถือให้กับลูกค้า ทีมงานและบุคคลทุกฝ่าย ที่เกี่ยวข้องให้ยอมรับในศักยภาพของตน
ความรู้สึกไว เกี่ยวกับการรับรู้และการคาดคะเนผลกระทบของปัญหาที่เกิดขึ้นระหว่างตนกับ บุคคลอื่น พร้อมที่จะเจรจาไกล่เกลี่ยปัญหาที่เกิดข้อพิพาทขึ้น
ความเป็นผู้นำ เกี่ยวกับการใช้อำนาจหน้าที่และจูงใจให้บุคคลอื่นปฏิบัติตาม
ความอดทนต่อภาวะความกดดัน เกี่ยวกับความตึงเครียด ซึ่งจะส่งผลกระทบต่อการปฏิบัติโครงการ และสามารถแก้ไขปัญหาต่างๆ ที่เข้ามาได้อย่างมีประสิทธิภาพ
ความรับยืดหยุ่นสูง เกี่ยวกับความสารมารถในการปรับตัวในการเปลี่ยนแปลงของสภาพแวะล้อม โดยอยู่บนพื้นฐานของผลประโยชน์ร่วมกัน
ความรับผิดชอบสูง เกี่ยวกับการรับมอบหมายงานหรือหน้าที่ ซึ่งจะต้องบริหารโครงการผลิตซอฟแวร์ให้ประสบความสำเร็จ ตามเจตนารมณ์ขององค์กร
ความยุติธรรม เกี่ยวกับความถูกต้อง เละจริยธรรมอันดีงาม โดยปราศจาการาเลือกปฎิบัติเอนเอียงไปด้านใดด้านหนึ่งโดยขาดเหตุผลอันสมควร
1.3        องค์ประกอบของวิศวกรรมซอฟแวร์
องค์ประกอบของวิศวกรรมซอฟแวร์แบ่งออกเป็น 2 ส่วน ตามการแบ่งของ Waman S Jawadekar ดังนี้
ส่วนที่ 1 วิศวกรรมระบบ หมายถึง กระบวนการศึกษาและวิเคราะห์ของระบบที่มีความสลับซับซ้อน เพื่อสนับสนุนการทำงานในส่วนที่ 2
ส่วนที่ 2 วิศวกรรมการผลิต หมายถึง กระบวนการแปลสภาพความต้องการของระบบ ให้กลายเป็นซอฟแวร์อันเป็นเป้าหมายสำคัญทางด้านวิศวหรรมซอฟแวร์


องค์ประกอบของวิศวกรรมซอฟแวร์

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

ในส่วนวิศวกรรมการผลิต มีกิจการรมต่างๆ ที่จะต้องดำเนินการตามขั้นตอนดังต่อไปนี้

1.        กำหนดความต้องการและจัดทำข้อกำหนดคุณสมบัติ
2.        ออกแบบแนวทางแก้ไขปัญหาให้สอดคล้องกับความต้องการ
3.        พิจารณาสถาปัตยกรรมให้สอดคล้องกับแนวทางแก้ไขปัญหา
4.        วางแผนโครงการผลิตซอฟแวร์
5.        ทดสอบซอฟแวร์ในแต่ละคอมโพเน้นท์
6.        ผนวกคอมโพเน้นท์ต่างๆ รวมเป็นระบบเดียวกัน
7.        ทดสอบการผนวกรวมระบบ พร้อมตรวจสอบความถูกต้องและความสอดคล้องกับความต้องการที่ได้กำหนดไว้
8.        พิจารณากลยุทธ์ในการนำไปใช้งาน
9.        นำไปใช้งาน
10.        ปรับเปลี่ยนกระบวนการจัดการ
11.        บำรุงรักษาและติดตั้งซอฟแวร์

1.4        วิวัฒนาการของวิศวกรรมซอฟแวร์

วิศวกรรมซอฟแวร์ ได้มีวิวัฒนาการอย่างต่อเนื่องจากอดีตจนถึงปัจจุบัน สามารถแบ่งออกเป็น 3 ช่วง โดยมีรายละเอียด ดังนี้
ช่วงระหว่างปี ค.ศ. 1945 ถึง 1965 จุดเริ่มต้นของวิศวกรรมซอฟแวร์
คำว่า วิศวกรรมซอฟแวร์ ได้กล่าวขานและนำไปใช้งานเป็นครั้งแรกปลายปี ค.ศ. 1950 จนถึงปี ค.ศ. 1960 ซึ่งขณะนั้นรู้จักกันเพียงกลุ่มของวิศวกรซอฟแวร์ที่เกี่ยวข้องกับแวดวง วิศวกรรมคอมพิวเตอร์ อิเล็กทรอนิกส์ และสถาปนิก เท่านั้น การผลิตจะมุ่งเน้นที่ซอฟแวร์เป็นสำคัญ จนกระทั้งองค์กรนาโต้ ได้มีการจัดสัมมนาวิศวกรรมซอฟแวร์ถึงสองครั้ง (ปี ค.ศ. 1968 และ ค.ศ. 1969) ณ ประเทศเยอรมัน ทำให้วิศวกรรมซอฟแวร์เป็นที่รู้จักและเป็นที่ยอมรับกันอย่างแพร่หลายในระดับ มืออาชีพในเวลาต่อมา
ช่วงระหว่างปี ค.ศ. 1965 ถึง ค.ศ. 1985 วิกฤติซอฟแวร์
วิศวกรรมซอฟแวร์ได้มาถึงจุดวิกฤติในช่วงปี ค.ศ. 1960 ถึง ค.ศ. 1980 ทั้งนี้ปัญหาที่เกิดขึ้นอันเนื่องจากโครงการผลิตซอฟแวร์นั่นเอง ไม่ว่าจะเป็นเรื่องของต้นทุนของค่าใช้จ่ายที่เกินงบประมาณ หรือแม้แต่ตารางกำหนดระยะเวลาในการดำเนินงานยังไม่เหมาะสมเพียงพอ ซึ่งเป็นสาเหตุสำคัญที่ก่อให้เกิดความเสียหาย และสงผลให้โครงการต้องประสบความล้มเหลว จนเป็นวิกฤติที่ต้องว่าจ้างวิศวกรซอฟแวร์ระดับมืออาชีพที่สามารถผลิตซอฟแวร์ คุณภาพสูงได้ โดยจะแสดงกรณีตัวอย่างไว้พอสังเขปดังนี้
ซอฟแวร์ระบบปฏิบัติการ OS/360 ใช้ระยะเวลาในการพัฒนานานถึง 10 ปี และใช้เงินลงทุนถึงพันล้านเหรียญและจำนวนวิศวกรซอฟแวร์ถึง 1000 คน
ซอฟแวร์ระบบรักษาความปลอดภัยของฐานจรวดนำวิถีแอร์เรียน พบว่าระบบมีช่องโหว่ของระบบ ทำให้แฮกเกอร์เจาะเข้าสู่ระบบได้ และขโมยรหัสผ่านในการควบคุมฐานปล่อยจรวดจนเป็นเหตุให้เกิดระเบิดขึ้นในเวลา ต่อมา
ซอฟแวร์ควบคุมระบบการแผ่รังสีสำหรับเครื่องรักษาผู้ป่วยด้วยรังสีวิทยา พบข้อล้มเหลวในขณะปฏิบัติงานทำให้กัมมันตรังสีจากหลอดบรรจุไหลออกจากหลอก บรรจุเข้าสู่ผู้ป่วยจนทำให้เสียชีวิต
ช่วงปี ค.ศ. 19855 ถึง ปัจจุบัน ฟองสบู่แตก
ตลอดเวลาที่ผ่านมาการแก้ปัญหาวิกฤติซอฟแวร์ยังคงดำเนินต่อไปเฉพาะในแวดวงงาน วิจัย เท่านั้น และต่อมาเทคโนโลยีสมัยใหม่ และวิธีการพัฒนาซอฟแวร์ในรูปแบบต่างๆ ได้หลั่งไหลเข้ามาอย่างต่อเนื่องมากมาย ไม่ว่าจะเป็นเครื่องมือ เทคนิค กระบวนการ สหวิทยาการ หรือแม้แต่เส้นทางไปสู่มืออาชีพ จนกล่าวได้ว่าเป็นยุคของการแก้ปัญหาวิกฤติซอฟแวร์อย่างแท้จริง โดยมีปัจจัยที่เป็นแรงขับเคลื่อนดังนี้
เครื่องมือ มีการคิดค้นและพัฒนาเครื่องมือขึ้นมาเพื่ออำนวยความสะดวกในการพัฒนาซอฟแวร์ ได้แก่การโปรแกรมมิ่งเชิงโครงสร้าง การโปรแกรมมิ่งเชิงวัตถุ เคสทูล ภาษาเอด้า เอกสารควบคุมการผลิต มาตรฐาน และยูเอ็มแอล
สหวิทยาการ มีผู้ที่เกี่ยวข้องเป็นจำนวนมากพาดพิงถึงกรณีวิกฤติซอฟแวร์ อันเนื่องมาจากวิศวกรซอฟแวร์ส่วนใหญ่ ยังขาดทักษะการผสมผสานระหว่างศาสตร์และศิลป์เข้าด้วยกัน
วิธีการที่ถูกแบบแผน มีความเชื่อว่าหากนำวิธีการหรือระเบียบปฏิบัติอันเป็นที่ยอมรับด้านวิศวกรรม ที่เหมาะสมมาใช้ในการผลิตซอฟแวร์แล้ว จะสามารถคาดการณ์ได้ว่าการผลิตซอฟแวร์จะเป็นอีกแขนงหนึ่งของวิศวกรรมศาสตร์ ซึ่งจะเป็นหนทางที่จะพิสูจน์ความถูกต้องของซอฟแวร์เอง
กระบวนการ มีการเสนอกระบวนการหลากหลายรูปแบบ และระเบียบวิธีปฏิบัติต่างๆ ที่มีลักษณะคล้ายกับแนวทางของ CMM ที่ใช้ปรับปรุงกระบวนการผลิต
ความเป็นมืออาชีพ นำพาไปสู่การผลิตซอฟแวร์ที่ถูกจริยธรรม การมีใบอนุญาตการประกอบอาชีพ
1.5        คุณลักษณะของซอฟแวร์ที่มีคุณภาพ

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

วิศวกรรมซอฟแวร์เป็นงานที่แทรกซึมอยู่ในทุกขั้นตอนของกระบวนการผลิตซอฟแวร์ ดังนั้น ระเบียบวิธีปฏิบัติของวิศวกรรมซอฟแวร์ จึงเป็นไปตามแนวทางการพัฒนาซอฟแวร์ ซึ่งมีสองแนวทางที่รู้จักกันอย่างกว้างขวางคือ


1.        แนวทางเชิงโครงสร้าง  (Structured Approach)
เป็นแนวทางแบบตั้งเดิม มีการแบ่งระบบและความต้องการออกเป็นระบบย่อย ตามลักษณะฟังก์ชันงานและแต่ละระบบย่อยสามารถแบ่งออกเป็นส่วนย่อยลงไปได้อีก หากยังมีความสลับซับซ้อนอยู่ จึงเป็นโครงสร้างแบบสำดับชั้น ระเบียบวิธีการปฏิบัติชนิดหนึ่งที่นิยมนำมาใช้ในขั้นตอนการวิเคราะห์ออกแบบ ระบบ คือ การวิเคราะห์และโดย Yourdan & Demarco
2.        แนวทางเชิงวัตถุ (Object-Oriented Approach)
เป็นแนวทางใหม่ที่คิดค้นโดย Grady Booch, James Rubaugh และ Ivar Jacobson ด้วยวิธีการวิเคราะห์และอกแบบระบบเชิงวัตถุ เป็นการวิเคราะห์ระบบโดยหารมองทุกย่างในระบบเป็นอ็อบเจ็กต์ ซึ่งภายในอ็อบเจ็กต์นั้น จะมีทั้งส่วนข้อมูลและพฤติกรรมของระบบรวมอยู่ด้วย ทำให้การวิเคราะห์และออกแบบระบบเร็วขึ้นด้วย ซึ่งปัจจุบันได้รับความนิยมย่างสูงและกำลังเพิ่มขึ้นในอนาคตด้วย

เครดิต http://www.softwaresiam.com/index.php/software/28-software-engineering

การแทนโครงสร้างข้อมูลกราฟ



การแทนโครงสร้างข้อมูลกราฟ

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

1. Adjacency Matrices คือ การแทนด้วยอาร์เรย์ขนาด N x N ด้วยการกำหนดหมายเลข 1 ในแถวที่ i และสดมภ์ที่ j ในเมตริกซ์ โดยที่ i และ j เป็นหมายเลขโหนดของกราฟ ถ้า Aij มีค่าเป็น 1 หมายถึง มีความสัมพันธ์ระหว่างโหนด i ไปโหนด j (มีเส้นเชื่อมจาก i ไป j) ถ้า Aij มีค่าเป็น 0 หมายถึง ไม่มีความสัมพันธ์ระหว่างโหนด i ไปโหนด j ไม่มีเส้นเชื่อมจาก i ไป j )



2. Node Directory หรือ Linked list จากการแทนกราฟด้วยอาร์เรย์จะต้องมีการเก็บข้อมูลเส้นทางเชื่อมต่อทุก ๆ เส้นทางที่เกิดขึ้น ทำให้สิ้นเปลืองเนื้อที่ของหน่วยความจำ เนื่องจากต้องมีการจอง

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

ซึ่งมี 2 แบบ คือ Node Directory และ Multi-list

Node Directory

การแทนกราฟด้วยโครงสร้างข้อมูลแบบ Node Directory ประกอบด้วยข้อมูล 2 ส่วน คือ

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

- Edge Information คือ ส่วนของข้อมูลตำแหน่งที่อยู่ของโหนดต่อไป ซึ่งประกอบด้วย เซ็ตของโครงสร้างข้อมูลของการเชื่อมโยง คือชื่อโหนด (Node Identifier) และ พอยน์เตอร์ที่ชี้ไปยังสมาชิกตัวถัดไป











Multi-list

การแทนกราฟด้วย Multi-list ประกอบด้วย 2 ส่วนคือ ส่วนที่เป็น Node Directory ที่จัดเก็บข้อมูล

จริง ๆ และส่วนของ Edge Information ซึ้งข้อมูลในส่วนของ Edge Information ซึ้งข้องมูลในส่วนของ Edge Information จะประกอบด้วยข้อมูล 4 ส่วน คือ (1) ข้อมูลชื่อของโหนด i (Vi) (2) ตำแหน่งของข้อมูลโหนดถัดจากโหนด I (Next i) (3) ชื่อ j (Vi) และ (4) พอยน์เตอร์ที่ใช้ไปยังตำแหน่งของข้อมูลโหนดถัดจากโหนด j (Next j) โดยในโหนด Directory จะชี้ไปยัง Edge Information แต่ละตัว


เครดิต https://sites.google.com/site/graphg6/kraf-khux-1/kar-thaen-khorngsrang-khxmul-kraf

การเรียงลำดับข้อมูล(Sorting)



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

ประเภทของการจัดเรียงลำดับข้อมูล

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

วิธีการต่าง ๆ สำหรับการจัดเรียงลำดับข้อมูล

         วิธีการในการจัดเรียงลำดับข้อมูลภายใน ได้แก่

         1.       การจัดเรียงลำดับข้อมูลแบบ Bubble Sort
         2.       การจัดเรียงลำดับข้อมูลแบบ Selection Sort
         3.       การจัดเรียงลำดับข้อมูลแบบ Insertion Sort
         4.       การจัดเรียงลำดับข้อมูลแบบ Quick Sort
         5.       การจัดเรียงลำดับข้อมูลแบบ Shell Sort
         6.       การจัดเรียงลำดับข้อมูลแบบ Heap Sort
         7.       การจัดเรียงลำดับข้อมูลแบบ Radix Sort

         วิธีการในการจัดเรียงลำดับข้อมูลภายนอก ได้แก่

         1.       การจัดเรียงลำดับข้อมูลแบบ Merge Sort
         2.       การ Run List
         3.       การเรียงข้อมูลบนดิสก์
         4.       การเรียงข้อมูลบนเทป
การจัดเรียงข้อมูลแบบ Bubble Sort
         เป็นวิธีการจัดเรียงลำดับข้อมูลด้วยการเปรียบเทียบคีย์ในตำแหน่งที่อยู่ติดกันทีละคู่ ถ้าคีย์ที่เปรียบเทียบไม่อยู่ในตำแหน่งที่ต้องการแล้วให้ทำการสลับที่กันระหว่างข้อมูล 2 ตัวนั้น ทิศทางการทำงานอาจจะทำจากคู่ซ้ายไปขวา หรือคู่ขวาไปซ้าย หรือคู่บนลงล่าง หรือคู่ล่างขึ้นบน ก็ได้
         ในแต่ละรอบของการเปรียบเทียบ คีย์ที่มีค่ามากจะถูกสลับที่ไปอยู่ในตำแหน่งตอนท้าย หรือคีย์ที่มีค่าน้อยจะถูกสลับไปอยู่ในตำแหน่งตอนบน สำหรับตัวอย่างนี้จะเริ่มเปรียบเทียบข้อมูลคู่ท้ายก่อน โดยให้ข้อมูลที่มีค่ามากสลับไปอยู่ด้านท้ายของข้อมูล  หรือข้อมูลที่มีค่าข้อมูลมากอยู่ทางด้านล่างของแถวนั่นเอง  ดังตัวอย่างต่อไปนี้

Unsorted
รอบที่  เปรียบเทียบทั้งหมด  ครั้ง
รอบที่  เปรียบเทียบทั้งหมด  ครั้ง
36
36      36      36      36      36      36      36      36     5
5        5        5        5        5        5        5        5     
27
27      27      27      27      27      27      27      5       36
36      36     36       36      36      36      36      9
23
23      23      23      23      23      23      5       27      27 
27      27     27      27      27      27       9       36
33
33      33      33      33      33      5       23      23      23
23      23     23      23      23      9       27       27
32
32      32      32      32      5       33      33      33      33
33     33      33      33      9        33      33      33
18
18      18      18      5       32       32     32      32      32  
32      32      32      9       33      33     33       33
5
5        5        5       18      18       18      18      18     18
18      18      9       32      32      32      32       32
13
13      9       9        9         9        9        9        9        9
9        9       18       9       32       32      32      32
9
9       13      13      13       13      13      13     13      13  
10      10     10      10     10        10      10     10
10
10     10      10      10       10      10      10     10      10       
13      13     13      13     13        13      13     13

List  2
รอบที่  เปรียบเทียบ  ครั้ง
รอบที่  เปรียบเทียบ  ครั้ง 
รอบที่  5  =  5  ครั้ง
5
5        5        5        5        5        5        5
5        5        5        5        5        5
5        5        5        5        5
9
9        9        9        9        9        9        9
9        9        9        9        9        9
9        9        9        9        9
36
36      36     36       36      36    36      10
10      10      10      10     10      10
10      10      10      10     10
27
27      27     27      27      27     10      36
36      36     36       36      36     13      
13      13      13     13      13
23
23      23     23      23      10     27      27
27      27     27       27      13     36
36      36     36      36      18
33
33      33      33     10      23     23      23
23     23      23      13       27     27
27      27     27      18     36
32
32      32      10      33      33    33      33
33     33     13       23      23      23
23     23     18      2 7     27
18
18      10       32     32      32    32      32
32               13      33      33      33      33
33     18      23     23      23
10
10      18       18     18      18    18      18
13     32     32      32      32       32
18     33      33     33      33
13
13      13       13     13      13    13      13
18     18      18    18       18       18
32     32      32     32      32
List  5
รอบที่  6  =  4   ครั้ง
รอบที่  7  =  3
8   =  2
9  =  1

5
5        5        5        5
5        5        5
5        5
5

9
9        9        9        9
9        9        9
9        9
9

10
10      10      10      10
10      10      10
10      10
10

13
13      13       13     13
13      13       13
13      13
13

18
18     18       18     18
18     18      18
18     18
18

36
36     36       36      23
23     23      23
23     23 
23

27
27     27       23      36
36     27      27
27     27
27

23
23     23       27      27
27     36      36
36     32
32

33
32     32       32     32
32     32      32
32     36
33

32
33      33    33      33
33      33    33
33      33
36


         จะเห็นได้ว่าข้อมูลมีการสลับที่กันไปเรื่อย ๆ  จนได้ข้อมูลที่มีการเรียงลำดับเป็นที่เรียบร้อยแล้ว  ซึ่งมีการจัดเรียง  n  -   1  รอบ  โดยในแต่ละรอบจะมีการเปรียบเทียบคีย์เป็น   n  -  1,  n  -  2,  n  -  3,….,3 ,2,1  ดังนั้น  จำนวนการเปรียบเทียบทั้งหมดจะเป็น
         1+2+3+…+(n  -  2)  +  (n  -  1)                                     =              n(n  -  1)/2
                                                                                                =              (n 2  -  n)/2
         จากตัวอย่างเมื่อแทนในสูตรจะได้                             =              (10 2  -  10)/2
                                                                                                =              (100  -  10)/2
                                                                                                =              90/2
                                                                                                =              45

Algorithm  BUBBLE

         เพื่อใช้ในการจัดเรียงข้อมูลในอาร์เรย์  จากน้อยไปหามาก  โดยที่
                N             แทน        จำนวนข้อมูลทั้งหมด
                I               แทน        ตัวแปรนับรอบ
                J              แทน        ตัวแปรนับรอบ
                TEMP     แทน        ตัวแปรสำรองเพื่อเก็บค่าข้อมูล
1.               [ทำสิ่งต่อไปนี้ซ้ำ ๆ  จนถึงข้อ  3.  โดยที่ตัวแปร  I  เริ่มจาก  จนถึง  โดยเพิ่มค่าขึ้นครั้งละ  1]
REPEAT  THRU  STEP  3.  FOR  I  =  2  TO  N  STEP  1
2.               [ทำสิ่งต่อไปนี้ซ้ำ ๆ  จนถึงข้อ  3.  โดยที่ตัวแปร  J  เริ่มจาก  จนถึง  โดยลดค่าลงครั้งละ  1]
REPEAT  THRU  STEP  3.  FOR  J  =  N  TO  I  STEP  -1
3.               [เปรียบเทียบข้อมูล]
IF  A[J]  <  A[J-1]  THEN
        TEMP  =  A[J] 
        A[J]  =  A[J-1]
        A[J-1]  =  TEMP
ENDIF
4.               [จบการทำงาน]
EXIT

การจัดเรียงข้อมูลแบบ  Selection  Sort
         การจัดเรียงข้อมูลวิธีการนี้เป็นวิธีการที่ง่ายที่สุด  โดยเริ่มจาก 
1.               เลือกค่าของข้อมูลที่มีค่าน้อยที่สุด
2.               นำมาแลกเปลี่ยนกับค่าในตำแหน่งแรกสุดของกลุ่ม  A(1)
       หลังจากนั้นก็กระทำตามหลักการทั้ง  กับข้อมูลที่เหลือ  คือในครั้งที่  ค่า  A(2)  จะถูกแลกเปลี่ยนกับค่าที่เลือกแล้ว
ว่าน้อยที่สุดในลิสท์  A(2)…A(N)  และในครั้งที่  ค่า  A(3)  จะถูกแลกเปลี่ยนกับค่าที่เลือกแล้วว่าน้อยที่สุดในลิสท์  A(3)…A(N)  และเรื่อยไปจนกระทั่งเหลือข้อมูลที่จะเปรียบเทียบแค่  ค่าคือ  A(N-1)  และ  A(N)  ดังนั้น  จำนวนรอบในการกระทำเป็น  n-1  รอบ
ข้อมูลเดิม
44
33
11
55
77
90
40
60
99
22
88
66
I  =  1
44
33
11
55
77
90
40
60
99
22
88
66
I  =  2
11
33
44
55
77
90
40
60
99
22
88
66
I  =  3
11
22
44
55
77
 90
40
60
99
33
88
66
I  =  4
11
22
33
55
77
90
40
60
99
44
88
66
I  =  5
11
22
33
40
77
90
50
60
99
44
88
66
I  =  6
11
22
33
40
44
90
55
60
99
77
88
66
I  =  7
11
22
33
40
44
55
90
60
99
77
88
66
I  =  8
11
22
33
40
44
55
60
90
99
77
88
66
I  =  9
11
22
33
40
44
55
60
66
99
77
88
90
I  =  10
11
22
33
40
44
55
60
66
77
99
88
90

I  =  11
11
22
33
40
44
55
60
66
77
88
99
90
I  =  12
11
22
33
40
44
55
60
66
77
88
90
90

Algorithm  SELECTION
         เพื่อใช้ในการจัดเรียงข้อมูลในอาร์เรย์  จากน้อยไปหามาก  โดยที่
                N             แทน        จำนวนข้อมูลทั้งหมด
                I               แทน        ตัวแปรนับรอบ
                J              แทน        ตัวแปรนับรอบ
                MIN        แทน        ตัวแปรที่เก็บตำแหน่งของข้อมูลที่มีค่าที่น้อยที่สุด
                TEMP     แทน        ตัวแปรสำรองเพื่อเก็บค่าข้อมูล
1.               [ทำสิ่งต่อไปนี้ซ้ำ ๆ  จนถึงข้อ  5.   โดยที่ตัวแปร  เริ่มจาก  จนถึง  N-1  โดยเพิ่มค่าขึ้นครั้งละ  1]
REPEAT  THRU  STEP  5.  FOR  I  =  1  TO  N-1  STEP  1
2.               [กำหนดค่าเริ่มต้นให้ตัวแปร  MIN  โดยให้]
MIN  =  I
3.               [ทำสิ่งต่อไปนี้ซ้า ๆ  จนถึงข้อ  4.  โดยที่ตัวแปร  J  เริ่มจาก  I  +  1  จนถึง  N  โดยเพิ่มค่าขึ้นค่าลงครั้งละ]
REPEAT  THRU  STEP  4.  FOR  J  =  I  +  1  TO  N  STEP  1
4.               [เปรียบเทียบข้อมูล]
IF  A[J]  <  A[MIN]  THEN
        MIN  =  J
ENDIF
5.               [ทำการสลับตำแหน่งของข้อมูลตัวที่มีค่าน้อยที่สุด  กับตัวปัจจุบัน]
TEMP =  A[I]
A[I]  =  A[MIN] 
A[MIN]  =  TEMP
6.               [จบการทำงาน]
EXIT

         การเรียงลำดับข้อมูลแบบ  Selection  Sort  มีการจัดเรียงทั้งหมด   n  -  1  รอบ  โดยในแต่ละรอบจะมีการเปรียบเทียบคีย์  ดังนี้
         รอบที่  1        จำนวนการเปรียบเทียบทั้งหมดจะเป็น               n  -  1  ครั้ง
         รอบที่  2        จำนวนการเปรียบเทียบทั้งหมดจะเป็น               n  -  2  ครั้ง
         รอบที่  3        จำนวนการเปรียบเทียบทั้งหมดจะเป็น               n  -  3  ครั้ง
                                                                .
                                                                .
                                                                .
         รอบที่  n  -  2                จำนวนการเปรียบเทียบทั้งหมดจะเป็น  ครั้ง
         รอบที่  n  -  1                จำนวนการเปรียบเทียบทั้งหมดจะเป็น  ครั้ง
         ดังนั้น  จำนวนการเปรียบเทียบทั้งหมดจะเป็น
         1+2+3+…+(n-2)+(n-1                  =  n(n-1)/2
                                                                =  (n 2  - n)/2