Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Another one of Data Structure
Advertisements

รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี
Stack.
Linked-List (รายการโยง)
Asst.Prof. Dr.Surasak Mungsing
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
Linked List List is group of nodes that consists of data and link.
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
Shortest-Path Algorithms
WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 6 Graph 1.
การเขียนโปรแกรมภาษาปาสคาล โดยใช้โครงสร้างหลักทั้ง 3 โครงสร้าง
DATA STRUCTURE AND ALGORITHM Linked List.
หน่วยที่ 6 กราฟ (Graphs)
การใช้งาน Microsoft Excel
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
Trees Hierarchical Structures. Outlines Definition of trees Modeling by trees Properties of trees Applications – Binary search trees – Prefix codes –
หลักการโปรแกรม 1 Lecture 8: การทำซ้ำ (while, do-while)
รศ. ดร. บุญธีร์ เครือตราชู รศ. กฤตวัน ศิริบูรณ์ KMITL Data Structures & Algorithms : Stack & Queue 1 Stack & Queue Lecturers : Boontee Kruatrachue.
QueueQueue Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Linked List ( ต่อ ) Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
โปรแกรมคำนวณคะแนน สหกรณ์ ตามเกณฑ์ดีเด่นแห่งชาติ กรมส่งเสริม สหกรณ์ กองพัฒนาสหกรณ์ด้านการเงิน และร้านค้า วิธีการใ ช้
การเลือกข้อมูลจาก List การกำหนดเงื่อนไขการป้อนข้อมูลด้วย Data Validation การใส่ Comment / แสดง / แก้ไข / ลบ.
คำสั่งควบคุมการทำงาน
Queue Lecturer : Kritawan Siriboon, Room no. 913
ACM ICPC Training Nattee Niparnan.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การทดสอบซอฟต์แวร์ Software Testing
บทที่ 12 กราฟ (Graph).
การติดต่อฐานข้อมูลและการแสดงผล
พื้นฐานการเขียนแบบทางวิศวกรรม
โครงสร้างข้อมูลและอัลกอริทึมเบื้องต้น
บทที่ 3 การวิเคราะห์ Analysis.
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
Trees (2) University of Phayao Sanchai Yeewiyom
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
Work Shop 1.
การบัญชีต้นทุนช่วง (Process Costing).
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 13: การคำนวณได้และการตัดสินใจของปัญหา ที่ยากต่อการแก้ไข.
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
Vernier เวอร์เนียร์ คือเครื่องมือที่ใช้วัดระยะ (distance) หรือ ความยาว (length) ให้ได้ค่าอย่างละเอียด เวอร์เนียร์ต่างจากไม้บรรทัดทั่วๆไป เพราะมี 2 สเกล.
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
Linked List Lecturer : Kritawan Siriboon, Room no. 913
B92 Protocol Alice สุ่ม string a string a (data bits)
Asst.Prof. Dr.Surasak Mungsing
Rewrite by Burin Rujjanapan Updated:
ขั้นตอนการออกแบบ ผังงาน (Flow Chart)
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
Problem Solving ขั้นตอนวิธีและการแก้ปัญหาสำหรับวิทยาการคอมพิวเตอร์
กำหนดกรอบระยะเวลาการขึ้นทะเบียนปี2556/57 1. ข้าว
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
State Table ตารางสถานะ ปรับปรุง 18 เมษายน 2562
2. ประโยคเงื่อนไข ข้อความที่ประกอบด้วย 2 ข้อความที่เชื่อมต่อกันด้วย ถ้า... แล้ว... เรียกข้อความในลักษณะเช่นนี้ว่า ประโยคเงื่อนไข - เรียกข้อความที่ตามหลัง.
บทที่7 ทฤษฎีกราฟเบื้องต้น
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data Structures & Algorithms Using Python
Data Structures and Algorithms 2/2561
Data Structures & Algorithms Using Python
การเปลี่ยนแปลงประมาณการทางบัญชี และข้อผิดพลาด
9. GRAPH ALGORITHMS.
2 โครงสร้างข้อมูลแบบสแตก (STACK).
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
Introducing Business Process Management (BPM) III
การวิเคราะห์และออกแบบขั้นตอนวิธี
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 12: เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Dynamic.
ใบสำเนางานนำเสนอ:

Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley

A C D B F E D C B A B adjacent to A  A adjacent to B Graph Definitions Graph G = (V, E) V = set of vertices (nodes) E = set of edges (arcs) A C D B V = { A, B, C, D } E = { (A,C), (B,A), (B,C) } Directed graph (Digraph) has directions associate with edges. (A,B) ≠ (B,A) F E D C B A Undirected graph has no direction associate with edges. (F,E) = (E,F) B adjacent to A  A adjacent to B B adjacent to A ถ้ามี edge (A,B) є E ดังนั้นสำหรับ undirected graph : B adjacent to A  A adjacent to B

6 5 1 2 A B C D loop Graph Definitions ABD length = 2 unweigthed ABCD length = 3 unweigthed ABCD length = 2 + 2 + 1 = 5 weigthed Weighted graph has weight assigned to each edge. Such weights might represent costs, lengths or capacities, etc. depending on the problem at hand. Path : sequence of nodes W1, W2, W3, ..., Wn when (W1, W2), (W2, W3), . . ., (Wn-1, Wn) є E 2 paths from A to D : ABCD and ABD Path length = # of edges in a path (unweighted graph) = sum of weights of all edges in a path (weighted graph) Loop : path of length 0 from v to v ie. think that there is edge(v,v).

ABC ABCDA ABCDEDBA ABCDBA Cycle, Simple Path simple path non simple path acyclic simple cycle cycle Path : เสมือนทางเดิน Simple path: path ซึ่ง vertices ไม่ซ้ำ ไม่เดินไปที่ๆเดินไปแล้ว (เว้น vertex แรกกับ vertex สุดท้ายซ้ำได้) Cycle graph (circular graph) : มี cycle อย่างน้อย 1 cycle (มี vertices ซึ่งวนกลับมาที่เดิม เป็น closed chain) Cycle in undirected graph: edges ต้องไม่ใช่ edge เดียวกัน ie. path UVU ไม่ควรเป็น cycle เพราะ (U,V) และ (V,U) เป็น edge เดียวกัน Acyclic Graph: no cycle Directed Acyclic Graph = DAG ==> Tree

Connected VS Disconnected Undirected graph Connected มี path จากทุก vertex ไปยังทุก vertex Disconnected Directed graph Weakly Connected complete graph มี edge เชื่อมทุกคู่ของ nodes Indegree จำนวน edges ที่เข้า vertex Outdegree จำนวน edges ที่ออกจาก vertex • has indegree = 2 • has outdegree = 1

Graph Examples Airport System, Traffic Flow, ...

Graph Representations 3 6 7 5 2 1 4 Or Linked List of vertices

Topological Order Prog Data Struct Digital Micro Robot DataBase Prog Topological Order order ใน acyclic graph ซึ่ง ถ้ามี path จาก vi ถึง vj แล้ว vj จะต้องอยู่หลัง vi ใน order เช่น Prog Data Struct Digital Micro Robot DataBase

Depth First Traversals Depth First Traversal ถ้าพึ่ง visit V หาก V มี adjacent node ที่ยังไม่ได้ visit ให้ visit ตัวใดตัวหนึ่ง แล้ว ทำอย่างนี้กับ node ที่พึ่ง visit ไปเรื่อยๆ เมื่อ node ที่พึ่ง visit ไม่มี adjacent node ที่ยังไม่ได้ visit เหลือแล้ว จึงค่อยกลับมา visit adjacent node ของ node ก่อนหน้าที่ยังเหลืออยู่ depth first traverse จึงใช้ stack ช่วย 8 4 7 3 2 1 9 5 6 10 11 3 6 7 5 2 1 4 8 9

Depth First Traversals G B E C H F D A B E G F C H D Result:

Bredth First Traversals 3 6 7 5 2 1 4 8 9 10 11 5 6 8 3 2 1 7 9 4 Bredth First Traversal (Level Order) ถ้าพึ่ง visit V ถ้า V มี adjacent node ที่ยังไม่ได้ visit ให้ visit ทุกตัวที่ adjacent กับมัน แล้วทำขบวนการนี้ไปเรื่อยๆ กับ node ที่ถูก visit ไปตามลำดับการถูก visit ก่อนหลัง bredth first traverse จึงใช้ queue ช่วย

Bredth First Traversals G B E C H F D A B D G E F C H Result:

Depth First Traversals depth_first ( void (*fp)(Vertex* ) )const // ฟังก์ชั่น ptr fp เช่น print, ... init bool visited [MAX] = false for all vertices. for all un-visited vertex v // run for disconnected graph node traverse (&v, visited, fp); // เช่น fp = &print(Vertex*); 3 6 7 5 2 1 4 8 9 visited F 1 2 3 4 5 6 7 8 9 ... traverse(Vertex *v, bool visited[ ],void(*fp)(Vertex*)) const (*fp)(v) ; // run ฟังก์ชั่น fp on v visited[*v] = true; // set v to be already visited for all un-visited w that adjacent to v traverse (&w, visited, fp); 8 4 7 3 2 1 9 5 6 10 11

Bredth First Traversals bredth_first ( void (*fp)( Vertex* ) ) const // ฟังก์ชั่น ptr fp เช่น print, ... init bool visited [MAX]; = false for all vertices. empty queue q; for all un-visited vertex v // run for disconnected graph node enqueue(q, v) while (not empty q) w = q.dequeue() if (!visited[w]) visited[w] = true; // set w to be already visited (*fp) (&w); for all un-visited x that adjacent w and x is not in q q.enqueue(x) 5 6 8 3 2 1 7 9 4 visited F 1 2 3 4 5 6 7 8 9 ... 3 6 7 5 2 1 4 10 11 8 9

5 1 2 4 6 8 10 3 start Shortest Path shortest weighted path v1 to v6 : = v1,v4,v7,v6 cost = 1+4+1 = 6 shortest unweighted path v1 to v6 : = v1,v4,v6 cost = 2

Greedy Algorithm : เลือกอันที่ดีที่สุดสำหรับ stage ปัจจุบัน (อาจไม่ได้ optimum solution) ตย. แลกเหรียญให้ได้จำนวนเหรียญน้อยที่สุด quarter 25 cents dime 10 cents suppose we have 12_cent_coin == > 12 cents nikle 5 cents penny 1 cents 15 cents : Greedy → 12, 1, 1, 1 : (optimum → 10, 5)

Weighted Shortest Paths (Dijkstra’s algorithm) Greedy : for each current stage, choose the best. สำหรับ vertex v ใดๆ เก็บข้อมูล 3 ตัว : distance = ระยะจากจุด start ไปยัง vertex นั้นๆ known เป็นจริง เมื่อทราบระยะ distance ที่สั้นที่สุดแล้ว path = vertex ก่อนหน้ามันใน shortest path vertices ทั้งหมด : known = flase; start_vertex : distance = 0; vertices อื่นๆ : distance = ; for( ; ;) v = vertex ที่มี dist. น้อยที่สุด ที่ known ยังเป็น false if (ไม่มี v ) break; v.known = true; for each w adjacent to v ซึ่งยังไม่ถูก process if (w.dist > v.dist + weight(vw)) ปรับ w.dist เป็นค่าใหม่ซึ่งน้อยกว่า w.path = v;  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 T F

Weighted Shortest Paths (Dijkstra’s algorithm) distance known  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 T F Weighted Shortest Paths (Dijkstra’s algorithm) distance Greedy : for each current stage, choose the best. vertices ทั้งหมด : known = flase; start_vertex : distance = 0; vertices อื่นๆ : distance = ; for( ; ;) v = vertex ที่มี dist. น้อยที่สุด ที่ known ยังเป็น false if (ไม่มี v ) break; v.known = true; for each w adjacent to v ซึ่งยังไม่ถูก process if (w.dist > v.dist + weight(vw)) ปรับ w.dist เป็นค่าใหม่ซึ่งน้อยกว่า w.path = v; distance path (from)  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5, v3 9, v3 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5(5<9),v3 9, v3 T F 1,v0 3(3<12), v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5, v3 9, v3 3, v3 T F 1,v0

Weighted Shortest Paths (Dijkstra’s algorithm)  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 T F  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 T F 1,v0 Weighted Shortest Paths (Dijkstra’s algorithm) 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5, v3 9, v3 T F 1,v0 3(3<12), v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5, v3 9, v3 3, v3 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5(5<9),v3 9, v3 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5,v3 98,v32 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5,v3 86,v26 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5,v3 6,v6 T 1,v0

Weighted Shortest Paths (Dijkstra’s algorithm)  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 T F  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 T F 1,v0 Weighted Shortest Paths (Dijkstra’s algorithm) 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5,v3 98,v32 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5, v3 9, v3 T F 1,v0 3(3<12), v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5, v3 9, v3 3, v3 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5(5<9),v3 8, v2 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5,v3 86,v26 T F 1,v0 3, v3 v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 2,v0 5,v3 6,v6 T 1,v0

Data Structure option adjacency matrix  v5 v6 v4 v1 v0 v3 5 1 2 4 6 8 10 3 start v2 T F 1 2 3 4 5 6 weights 1 2 3 4 5 6 10 8 name distance known path V0 1 V1 2 V2 3 V3 4 V4 5 V5 6 v6