วันจันทร์ที่ 7 กันยายน พ.ศ. 2552

DTS09-01/09/2552

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

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

ลักษณะของกราฟ
-กราฟที่มีลักษณะต่อเนื่อง (Connected) เป็นกราฟที่มีเส้นทางเชื่อมจากโหนดใดๆ

ไปยังโหนดอื่นเสมอ
-กราฟที่มีลักษณะเป็นวิถี (Path) มีเส้นเชื่อมไปยังโหนดต่างๆ อย่างเป็นลำดับ โดยแต่ละโหนดจะเป็นโหนดที่ใกล้กันกับโหนดที่อยู่ถัดไป

-กราฟที่เป็นวัฎจักร (Cycle) ต้องมีอย่างน้อย 3 โหนด ที่โหนดสุดท้ายต้องเชื่อม
กับโหนดแรก
-กราฟที่มีลักษณะไม่ต่อเนื่อง (Disconnected) ไม่มีเส้นทางเชื่อมจากโหนด 3

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