SlideShare a Scribd company logo
1 of 45
Download to read offline
บทที่ 7
กราฟ (Graph)
นิยามกราฟ
• กราฟ เป็ นโครงสร้างที่นามาใช้เพื่อแสดงความสัมพันธ์ระหว่างวัตถุ โดย
                          ํ
  แทนวัตถด้วยเวอร์เท็กซ์ และเชื่อมโยงความสัมพันธ์ดวยเอดจ์
           ุ                                           ้
• เขียนในรู ปของสัญลักษณ์ได้เป็ น G = (V,E)
• ซึ่ง V(G) คือ เซตของเวอร์เทกซ์ท่ีไม่ใช่เซ็ตว่าง และมีจานวนจํากัด
                                                         ํ
• E(G) คือ เซตของเอดจ ซึ่ งเขียนด้วยค่ของเวอรเทกซ
        คอ เซตของเอดจ์ ซงเขยนดวยคู องเวอร์เท็กซ์
                           เอดจ์
               A                              B
             เวอร์เท็กซ์                 เวอร์เท็กซ์
องค์ ประกอบโครงสร้ างข้ อมููลแบบกราฟ




V = {1, 2, 3, 4}
    {
E = {(1,2), (1,4), (2,3), (3,4)}
ตวอยาง
                ตัวอย่ าง

                 เวอร์ เท็กซ์ V(G) ได้ แก่ A B C D E
    A       B    เอดจ์์ E(G) ไ ้ แก่่ ได้
                  เส้ นทีเ่ ชื่อมโยงจาก A ไป B
                 เส้้ นทีเ่ี ชืื่อมโยงจาก A ไป C
                                   โ
                 เส้ นทีเ่ ชื่อมโยงจาก A ไป D
                 เส้้ นทีเ่ี ชืื่อมโยงจาก A ไป E
                                   โ
C   D   E        เส้ นทีเ่ ชื่อมโยงจาก B ไป E
                 V(G) = {A, B, C, D, E}
                 E(G) = {(A,B), (A,C), (A,D), (A,E), (B,E)}
7.1.2 ชนิดของกราฟ
          1) กราฟแบบไม่มีทิศทาง (Undirected Graph) จะเป็ น
   กราฟที่มีเส้นเชื่อมโยงระหว่างเวอร์เทกซ์ท้ ง 2 ซึ่ งไม่มีทิศทางว่าจากเวอร์
                                             ั
   เทกซ์ใดไปยังเวอร์เทกซ์ใด การเขียนเซตของเส้นเชื่อมโยงจะเขียนอยูใน      ่
   เครองหมายวงเลบ
   เครื่ องหมายวงเล็บ
กราฟแบบไม่ มทศทาง
                   ี ิ




V(G) = {a, b, c, d}
  ( ) { , , , }
E(G) = {(a,b) , (b,c), (c,d), (d,b), (a,c)}
หรือ
E(G) = {(b,a) , (c,b), (d,c), (b,d), (c,a)}
        {(b ) ( b) (d ) (b d) ( )}
ภาพตวอยางกราฟไมมทศทาง
ภาพตัวอย่ างกราฟไม่ มทศทาง
                     ี ิ




       V(G) = {1 2 3 4 5}
              {1, 2, 3, 4,
       E(G) = {(1,2) , (2,4), (4,5), (5,3), (3,4), (2,3)}
ภาพตัวอย่ างกราฟไม่ มทศทาง
                     ี ิ
กราฟทมทศทาง
               กราฟทีมทศทาง (Digraph)
                     ่ ี ิ
 •        กราฟแบบมีทศทาง = กราฟที่มีเอดจ์์ เป็ นหัวลูกศร ซึ่ ึ งแสดงทิศทาง
                          ิ
     จากเวอร์ เท็กซ์ หนึ่ง ไปยังอีกเวอร์ เท็กซ์ หนึ่ง (Directed Graph)

                        A                      B



                      กรุุงเทพ              เวียงจันทร์

จากภาพ มีเส้นทางจากกรุ งเทพไปเวียงจันทร์ แต่ไม่มีเส้นทางจากเวียงจันทร์
ไปกรุ งเทพ
กราฟแบบมีทศทาง
                       ิ
V(G) = {a, b, c, d}
E(G) = {<a,b> , <a,c>, <b,d>, <d,c>, <c,b>}
ภาพตัวอย่ างกราฟแบบมีทศทาง
                      ิ
ภาพตัวอย่ างกราฟแบบมีทศทาง
                      ิ
ระดับขั้นเข้ าและระดับขั้นออก
              ั ้ ั ้ (In-degree) ื ํ
         ระดบขนเข้า (In degree) คอ จานวนของเอดจทเข้าไป
                                                ์ ี่ ้
     ยังเวอร์เทกซ์น้ น ๆ
                     ั
        ระดับขั้นออก(Out-degree) คือ จํานวนของเอดจ์ที่ออกจาก
     เวอรเทกซนน
     เวอร์เทกซ์น้ น ๆ
                   ั
กราฟสมบูรณ
                                กราฟสมบรณ์
•        กราฟที่ทุกเวอร์์เท็กซ์์มีเอดจ์เ์ ชื่ือมโยงไปยังเวอร์์เท็กซ์์ที่เหลืือ
                            ็                      ไ             ็
    ทั้งหมด
                                      A



                             B                  C


     ในกราฟสมบูรณ์ สามารถคํานวณจํานวนเอดจ์ ได้ จาก N*(N-1)/2
สู ตรหาจานวนเอดจของกราฟไมมทศทาง
     สตรหาจํานวนเอดจ์ ของกราฟไม่ มทศทาง = (N * (N – 1)) / 2
                                  ี ิ

กราฟแบบไม่มีทิศทาง และจํานวนเวอร์เทกซ์ท่ีมีท้ งหมด เท่ากับ 4 เวอร์เทกซ์ จึง
                                              ั
คํานวณหาจํานวนเอดจ์ได้ดงนี้
                        ั
     สู ตรหาจํานวนเอดจ์ของกราฟไม่มีทิศทาง = (N * (N – 1)) / 2
                                            = (4 * (4 – 1)) / 2
                                          = (4 * 3 ) / 2
                                          = 12 / 2
                                          = 6 เส้น
สูตรหาจํํานวนเอดจ์์ ของกราฟมีทศทาง
                                  ฟ ี ิ         = N * (N –1)
จากภาพที่ (ข) ซึ่ งเป็ นกราฟแบบมีทิศทาง และจํานวนเวอร์เทกซ์ที่มี
ทั้งหมดเท่ากับ 4 เวอร์เทกซ์ จึงคํานวณหาจํานวนเอดจ์ได้ดงนี้
                                                         ั
              ํ            ์
     สู ตรหาจานวนเอดจของกราฟมทศทางฟ ี ิ         = N * (N –1)     1)
                                                = 4 * ( 4 – 1)
                                               =4*3
                                               = 12 เส้้น
กราฟทมนาหนก
               กราฟทีมนําหนัก (Weighted Graphs)
                     ่ ี ้
•         กราฟที่แต่่ ละเอดจ์์ จะมีค่าบ่งบอกถึึงความหมายอย่างใดอย่างหนึ่ ึง
    เช่น ระยะทาง ความเร็ว เวลาเดินทาง ค่ าโดยสาร เป็ นต้น
                                              101
                     ปทมธานี
                       ุ                                                สระบรี
                                                                            ุ
          46                            101
                                                              58
                               107                  นครนายก
    กรุงเทพ
                                            100                    29
               82
                               ฉะเชงเทรา
                               ฉะเชิงเทรา         76           ปราจนบุร
                                                               ปราจีนบรี
กราฟทมนาหนก
กราฟทีมนําหนัก
      ่ ี ้
เส้ นทาง (Path) ของกราฟ คือ ลําดับของเวอร์เทกซ์ที่ถูกเชื่อมต่อ
  ดวยเอดจ โดยเริ่ มตั้งแต่เวอร์เทกซ์แรกไปจนถึงเวอร์เทกซ์สดทายหรอ
  ด้วยเอดจ์ โดยเรมตงแตเวอรเทกซแรกไปจนถงเวอรเทกซสุ ดท้ายหรื อ
  เวอร์เทกซ์ที่ตองการ
                ้




เส้ นทางจาก A ไป E
      P1 = (A, B, C, D, E) ความยาวของเส้นทางเท่ากับ 4
เสนทางจาก
เส้ นทางจาก A ไป H
      P2 = (A, B, C, F, G, H)ความยาวของเส้นทางเท่ากับ 5
การแทนกราฟดวยอะเรยสองมต
    การแทนกราฟด้ วยอะเรย์ สองมิติ

     B
                          A   B   C     D
                      A
                          0   1     1   1
A             C       B
                          1   0     0   1
                      C   1   0     0   1
     D                    1   1     1   0
                      D
การแทนทีกราฟ
        ่
การแทนทกราฟ
การแทนทีกราฟ
        ่
การแทนทกราฟ
การแทนทีกราฟ
        ่
การทองไปในกราฟ
           การท่ องไปในกราฟ (Graph traversal)
•         การท่่ องไปในกราฟ (graph traversal) คืือ กระบวนการเข้าไป
                   ไ ใ                                                 ้ไ
    เยือนโหนดในกราฟ โดยมีหลักในการทํางานคือ แต่ละโหนดจะถูก
    เยือนเพียงครั้งเดียว สําหรับการท่องไปในทรี เพื่อเยือนแต่ละโหนดนั้น
    จะมเสนทางเดยว แตในกราฟระหวางโหนดอาจจะมหลายเสนทาง
    จะมีเส้นทางเดียว แต่ในกราฟระหว่างโหนดอาจจะมีหลายเส้นทาง
    ดังนั้นเพือปองกันการท่ องไปในเส้ นทางทีซํ้าเดิมจึงจําเป็ นต้ องทํา
              ่ ้                           ่
    เครื่องหมายมาร์ คบิตบริเวณทีได้ เยือนเสร็จเรียบร้ อยแล้วเพื่อไม่ให้เข้า
    เครองหมายมารคบตบรเวณทไดเยอนเสรจเรยบรอยแลวเพอไมใหเขา
                                 ่
    ไปเยือนอีก สําหรับเทคนิคการท่องไปในกราฟมี 2 แบบดังนี้
สํ าหรับเทคนิคการท่ องไปในกราฟมี 2 แบบดังนี้
• การท่ องแบบกว้ าง (Breadth first traversal) วิธีน้ ีทาโดยเลือกโหนด
                                                         ํ
                                                    ั
  ที่เป็ นจุดเริ่ มต้น ต่อมาให้เยือนโหนดอื่นที่ใกล้กนกับโหนดเริ่ มต้นทีละ
  ระดับ จนกระทังเยือนหมดทุุกโหนดในกราฟ ตัวอย่างแสดงเส้นทาง
                      ่
  การท่องแบบกว้างทีละโหนดตามลําดับ
            A                   การท่่ องไปแนวกว้้ าง A B C D E F
                                         ไป


B                        C                D


            E                    F
การท่่ องไปในกราฟแนวกว้้ าง
         ไปใ ฟ
      การทองไปแนวกวาง
      การท่ องไปแนวกว้ าง = A   G   B H   E   C F   D
การท่ องแบบลึก (Depth first traversal)
• การทํางานคล้ายกับการท่องทีละระดับของทรี โดยกําหนดเริ่มต้ นที่
  โหนดแรกและเยอนโหนดถดไปตามแนววถนนจนกระทงนาไปสู
  โหนดแรกและเยือนโหนดถัดไปตามแนววิถน้ันจนกระทังนําไปส่ ปลาย
                                                  ี             ่
  วิถน้ัน จากนั้น ย้อนกลับ (backtrack) ตามแนววิถีเดิมนั้น จนกระทัง
     ี                                                                     ่
  สามารถดําเนิินการต่่อเนื่ืองเข้าสู่ แนววิถีอื่น ๆ เพืื่อเยือนโหนดอื่ืน ๆ
                                 ้         ิ                 ื โ
  ต่อไปจนครบทุกโหนด
                                       A

                          B                       C                D
                                                      8




                                     E                    F
ABECFD
การทองไปในกราฟแนวลก
การท่ องไปในกราฟแนวลึก
การทองไปแนวลก
การท่ องไปแนวลึก = A B C D E F G H
•      Spanning Tree คือต้นไม้ที่ประกอบด้วยโหนดทุกโหนดของ
      กราฟ โดยแต่ ละคู่ของโหนดจะต้ องมีเส้ นเชืื่อมเพียงเส้ นเดียว นันคืือไ มี
                                                                     ่ ไม่
      loop หรือ cycle
    • สมมติสถานการณ์ให้กราฟแสดงเส้นทางการบินระหว่าง 7 เมือง แต่ดวย         ้
      เหตุผลทางธุรกจทาใหตองปดเสนทางการบนไปใหมากทสุ ดแตยงคง
      เหตผลทางธรกิจทําให้ตองปิ ดเส้นทางการบินไปให้มากที่สดแต่ยงคง
                            ้                                         ั
      สามารถเชื่อมต่อถึงกันได้หมด

a           b           a           b           a           b
                                                                        1.   ห้ามมี 2 เส้น
c                   d   c                   d   c                   d
                                                                        2.   ห้ามตัดเส้นออก
    e                       e           f           e           f       3.   ห้ามมี cycle
                f
        g                       g                       g
Minimum spanning tree
      MST หมายถึงเวทจ์กราฟและเป็ นสแปนนิ่งทรี ที่มีค่านํ้าหนักรวมกัน
      แล้วมีค่าน้อยที่สุด
          .29          2                              .29          2
 0                     .51
                                              0                    .51
            .31                                         .31
                                    6                                           6
          .32          7      .25
                               25                     .32          7      .25
                                                                           25
                 .21                                         .21
.60                                         .60
           1                        .51                1                        .51
                             .46                                         .46

           3                                           3
                       .34                                         .34
          .18                                         .18

                .40                                         .40
      5                        4                  5                        4
Minimum spanning tree
• Representation

          .29         2                            0 1       2 3 4 5 6 7
 0                       .51                 0     * .32   .29 * * .60 .51 .31
                .31
                                       6     1   .32 *      * * * * * .21
          .32         7          .25

.60
                  .21
                                             2   .29 *       * * * * * *
          1                            .51
                                             3     * *       * * .34 .18 * *
                               .46
                                             4     * *       * .34 * .40 .51 .46
          3                                  5
                        .34
                                                 .60 *       * .18 .40 * * *
          .18

                .40
                                             6   .51 *
                                                  51         * * .51 * * .25
                                                                    51        25
      5                         4            7   .31 .21     * * .46 * .25 *
วิธีการในการหา Minimum Spanning Tree ทีนิยมใช้
                                            ่
                    มี 3 วิธี ดังต่ อไปนี้
1.Kruskal’s Algorithm
    Kruskal s
    Kruskal’s Algorithm ค้ นพบโดย Joseph Kruskal ในปี 1956 โดยมีหลักการ
                                  คนพบโดย                      ในป        โดยมหลกการ
    ดังต่ อไปนี้
1. เลอก
1 เลือก Edge ใน Graph ทีมี Weight ตําสด เปน edge เริ่มต้ น
                                ทม่           ตาสุ ด เป็ น
                                               ่              เรมตน
2. จากนั้นให้ เพิม Edge ทีมี Weight ตําสุ ดทีเ่ หลืออยู่ ทีจะไม่ ทาให้ เกิด Simple Circuit
                 ่            ่             ่               ่        ํ
    กับ Edge ทีเี่ ลือกไว้้ แล้้ ว ทําการหยุดหลังจากได้้ n-1 Edge เลือกได้้ n-1 edges
      ั              ื ไ             ํ             ั ไ                  ื ไ
                       เลือก edge ทีส้ั นทีสุด
                                        ่ ่
                                                               เลอกได
                                                               เลือกได้
                       รวม edge นี้ ถ้ าไม่ เกิดวงจร           n-1 edges
Kruskal’s Algorithm
• เรยงลาดบ weight จากนอยไปมาก
    ี ํ ั ih          ้ ไป
3-5 = .18 
1-7 = .21 
1 7 21                       .29
                              29       2
6-7 = .25                0               .51
                                 .31

0-2 = .29                                        6
                             .32       7 .25
0-7 = .31              .60
                                    .21


0-1 = .32 เกิดวงจร            1                   .51
                                              .46

4.3 = .34                    3
4-5 = .40 เกิดวงจร                      .34
                             .18

4-7 = .46 
4 7 46
                            5 .40  40
                                                4
0-6 = .51
4-6 = .51
0-5 = .60
2.Prim s
              2 Prim’s algorithm
•     หลักการของ Prim’s Algorithm เริ่ มต้นจากเวอร์์เท็กซ์์ที่กาหนดแล้ว
                                                                     ็ ํ
  หาเวอร์เท็กซ์ขางเคียง เรี ยงตามค่านํ้าหนักของเอดจ์ มีข้นตอนดังนี้
                ้                                                 ั
•              1. เลือก 1 จุด
•              2. เลืือก edge สั้ นสุ ดทีี่ต่อกับทีี่ได้เ้ ลืือกไว้้
                                  ั             ั               ไ
•              3. รวม edge นี้ถาไม่เกิดวงจร
                          g ้
Prim s
                     Prim’s algorithm

- เลือก 1 จุด
- เลืือก edge สั้ ันสุ ดทีี่ต่อกับที่ีได้เ้ ลืือกไว้้
                                 ั               ไ
- รวม edge นี้ถาไม่เกิดวงจร
                   ้

                 A                                                A
                             1                              14                1
         14          8                                                8
            13           7                                   13           7
    B            C               D                      B         C               D
                         6                                        3       6       7
                 3               7

                 E           1   F                                E           1   F
3 Dijkstra’s algorithm
             Dijkstra s
•                                                          ่
           วิธีการของ Dijkstra จะทําใ ได้สิ่ งทีี่เรีี ยกว่า single-source shortest
             ิ                       ํ ให้้ ้
     path หรื อเส้นทางที่ส้ นที่สุดจากจุดเดียว โดยใช้ priority queue ช่วยใน
                                ั
     การทํางาน มีีข้ นตอนดังนี้ ี
                       ั
1.   เลือกจุุดเริ่ มต้น
2.   ตรวจสอบค่านํ้าหนักกับจุดที่เชื่อมต่อทุกจุด นําค่านํ้าหนักเก็บใน
     priority queue แล้วเลือกเส้นที่มีค่าตํ่าสด
                         แลวเลอกเสนทมคาตาสุ ด
3.   เยียมจุดที่เลือกใหม่ แล้วทําซํ้า 2-3 จนกว่าจะเยียมครบทุกจุด
         ่                                                   ่
                              ้    ็
     ข้อกําหนด : การนําข้อมูลเก็บในคิว เป็็ นไปตาม priority นันคืือ ค่า
       ้                                           ไ                    ่
     นํ้าหนักน้อย มี priority สู งกว่า
Dijkstra s
Dijkstra’s algorithm
• single-source                                AD1    DE7   AC8
  shortest path
                                               DC8 DF8 EF8        EC10 AB14 CB21
               A
      14                       1
                   8                                     AB14 AC8 AD1
          13               7
 B             C                   D                     AD1   AC8  AB14       1
               3           6           7
                                               DC8 DE7  DF8
               E                       F       DE7    AC8 DC8           AB14       2
                               1
                                                                  DF8
           A
     14                    1
                   8                           EF8 EC10
      13               7
B          C                       D       3   AC8    DC8 DF8     EF8   EC10 AB14
           3           6           7           CB21
           E               1       F       4   DC8 DF8 EF8        EC10 AB14 CB21
แบบฝกหด
                             แบบฝึ กหัด
• 1 จากภาพต่่ อไปนีี้ จงแทนกราฟด้้ วยอะเรย์์ สองมิติ
  1.           ไป             ฟ                   ิ

         1                      2


          4                    3

2. กราฟสมบูรณ์แบบไม่มีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 7 เวอร์เทกซ์
                                                    ั
จงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์
3. กราฟสมบูรณ์แบบมีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 8 เวอร์เทกซ์
                                                 ั
จงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์
4. จากกราฟต่อไปนี้ จงท่องไปในแนวลึก และ แนวกว้าง
           โดยมีจุดเริ่ มต้นที่ เวอร์เทกซ์ B
5. จากภาพต่อไปนี้ จงหาระยะทางโดยใช้วธีการของ Dijkstra
                                       ิ
                     โดยเริ่ มที่จุด B
                         2
                 A               B        4
                                               C
                     6           10
                                      7

             E           3
                                 D
                                          12
         5                   2

                         1
             F                   G

More Related Content

What's hot

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 Dimitris Psounis
 
การแจกแจงความน่าจะเป็น
การแจกแจงความน่าจะเป็นการแจกแจงความน่าจะเป็น
การแจกแจงความน่าจะเป็นSariffuddeen Samoh
 
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
Κεφ. 3 Δομές Δεδομένων και ΑλγόριθμοιΚεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
Κεφ. 3 Δομές Δεδομένων και ΑλγόριθμοιΙωάννου Γιαννάκης
 
การเขียนโปรแกรมเบื้องต้น
การเขียนโปรแกรมเบื้องต้นการเขียนโปรแกรมเบื้องต้น
การเขียนโปรแกรมเบื้องต้นเสย ๆๆๆๆ
 
สมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียวสมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียวPiyanouch Suwong
 
Prims Algorithm
Prims AlgorithmPrims Algorithm
Prims AlgorithmSriram Raj
 
คณิตศาสตร์ ม.3 เรื่องเซต
คณิตศาสตร์ ม.3 เรื่องเซตคณิตศาสตร์ ม.3 เรื่องเซต
คณิตศาสตร์ ม.3 เรื่องเซตChokchai Taveecharoenpun
 
ไฟฟ้าสถิต (Electrostatics)
ไฟฟ้าสถิต (Electrostatics)ไฟฟ้าสถิต (Electrostatics)
ไฟฟ้าสถิต (Electrostatics)Worrachet Boonyong
 
Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Anand Ingle
 
งานอนุกรมเรขาคณิต
งานอนุกรมเรขาคณิตงานอนุกรมเรขาคณิต
งานอนุกรมเรขาคณิตaossy
 

What's hot (20)

Stack Operation In Data Structure
Stack Operation In Data Structure Stack Operation In Data Structure
Stack Operation In Data Structure
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
 
Graph1
Graph1Graph1
Graph1
 
การแจกแจงความน่าจะเป็น
การแจกแจงความน่าจะเป็นการแจกแจงความน่าจะเป็น
การแจกแจงความน่าจะเป็น
 
Binary search
Binary search Binary search
Binary search
 
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
Κεφ. 3 Δομές Δεδομένων και ΑλγόριθμοιΚεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
 
Data Structures - Lecture 10 [Graphs]
Data Structures - Lecture 10 [Graphs]Data Structures - Lecture 10 [Graphs]
Data Structures - Lecture 10 [Graphs]
 
การเขียนโปรแกรมเบื้องต้น
การเขียนโปรแกรมเบื้องต้นการเขียนโปรแกรมเบื้องต้น
การเขียนโปรแกรมเบื้องต้น
 
สมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียวสมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียว
 
Prims Algorithm
Prims AlgorithmPrims Algorithm
Prims Algorithm
 
คณิตศาสตร์ ม.3 เรื่องเซต
คณิตศาสตร์ ม.3 เรื่องเซตคณิตศาสตร์ ม.3 เรื่องเซต
คณิตศาสตร์ ม.3 เรื่องเซต
 
ไฟฟ้าสถิต (Electrostatics)
ไฟฟ้าสถิต (Electrostatics)ไฟฟ้าสถิต (Electrostatics)
ไฟฟ้าสถิต (Electrostatics)
 
Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure
 
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
 
Binary tree data structure
Binary tree data structureBinary tree data structure
Binary tree data structure
 
งานอนุกรมเรขาคณิต
งานอนุกรมเรขาคณิตงานอนุกรมเรขาคณิต
งานอนุกรมเรขาคณิต
 
Linked list
Linked listLinked list
Linked list
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Tries
TriesTries
Tries
 
Heap
HeapHeap
Heap
 

Similar to Graph (20)

Graph
GraphGraph
Graph
 
Graph theory
Graph theoryGraph theory
Graph theory
 
Graph
GraphGraph
Graph
 
Graph
GraphGraph
Graph
 
Graph shortest
Graph shortestGraph shortest
Graph shortest
 
Graph
GraphGraph
Graph
 
Graph
GraphGraph
Graph
 
Graph
GraphGraph
Graph
 
Graph
GraphGraph
Graph
 
Graph
GraphGraph
Graph
 
ทฤษฎีกราฟเบื้องต้น/Graph
ทฤษฎีกราฟเบื้องต้น/Graphทฤษฎีกราฟเบื้องต้น/Graph
ทฤษฎีกราฟเบื้องต้น/Graph
 
สรุปสาระสำคัญทฤษฎีกราฟเบื้องต้น
สรุปสาระสำคัญทฤษฎีกราฟเบื้องต้นสรุปสาระสำคัญทฤษฎีกราฟเบื้องต้น
สรุปสาระสำคัญทฤษฎีกราฟเบื้องต้น
 
ทฤษฎีกราฟเบื้องต้น
ทฤษฎีกราฟเบื้องต้นทฤษฎีกราฟเบื้องต้น
ทฤษฎีกราฟเบื้องต้น
 
ทฤษฎีกราฟเบื้องต้น
ทฤษฎีกราฟเบื้องต้นทฤษฎีกราฟเบื้องต้น
ทฤษฎีกราฟเบื้องต้น
 
2
22
2
 
2
22
2
 
31202 final532
31202 final53231202 final532
31202 final532
 
ข้อสอบ
ข้อสอบข้อสอบ
ข้อสอบ
 
Add m5-2-chapter2
Add m5-2-chapter2Add m5-2-chapter2
Add m5-2-chapter2
 
58210401119
5821040111958210401119
58210401119
 

More from suebloei

More from suebloei (7)

Sorting
SortingSorting
Sorting
 
Sorting
SortingSorting
Sorting
 
Nsc2012
Nsc2012Nsc2012
Nsc2012
 
Mark test
Mark testMark test
Mark test
 
Tree
TreeTree
Tree
 
Stack
StackStack
Stack
 
Check box
Check boxCheck box
Check box
 

Graph

  • 2. นิยามกราฟ • กราฟ เป็ นโครงสร้างที่นามาใช้เพื่อแสดงความสัมพันธ์ระหว่างวัตถุ โดย ํ แทนวัตถด้วยเวอร์เท็กซ์ และเชื่อมโยงความสัมพันธ์ดวยเอดจ์ ุ ้ • เขียนในรู ปของสัญลักษณ์ได้เป็ น G = (V,E) • ซึ่ง V(G) คือ เซตของเวอร์เทกซ์ท่ีไม่ใช่เซ็ตว่าง และมีจานวนจํากัด ํ • E(G) คือ เซตของเอดจ ซึ่ งเขียนด้วยค่ของเวอรเทกซ คอ เซตของเอดจ์ ซงเขยนดวยคู องเวอร์เท็กซ์ เอดจ์ A B เวอร์เท็กซ์ เวอร์เท็กซ์
  • 3. องค์ ประกอบโครงสร้ างข้ อมููลแบบกราฟ V = {1, 2, 3, 4} { E = {(1,2), (1,4), (2,3), (3,4)}
  • 4. ตวอยาง ตัวอย่ าง เวอร์ เท็กซ์ V(G) ได้ แก่ A B C D E A B เอดจ์์ E(G) ไ ้ แก่่ ได้ เส้ นทีเ่ ชื่อมโยงจาก A ไป B เส้้ นทีเ่ี ชืื่อมโยงจาก A ไป C โ เส้ นทีเ่ ชื่อมโยงจาก A ไป D เส้้ นทีเ่ี ชืื่อมโยงจาก A ไป E โ C D E เส้ นทีเ่ ชื่อมโยงจาก B ไป E V(G) = {A, B, C, D, E} E(G) = {(A,B), (A,C), (A,D), (A,E), (B,E)}
  • 5. 7.1.2 ชนิดของกราฟ 1) กราฟแบบไม่มีทิศทาง (Undirected Graph) จะเป็ น กราฟที่มีเส้นเชื่อมโยงระหว่างเวอร์เทกซ์ท้ ง 2 ซึ่ งไม่มีทิศทางว่าจากเวอร์ ั เทกซ์ใดไปยังเวอร์เทกซ์ใด การเขียนเซตของเส้นเชื่อมโยงจะเขียนอยูใน ่ เครองหมายวงเลบ เครื่ องหมายวงเล็บ
  • 6. กราฟแบบไม่ มทศทาง ี ิ V(G) = {a, b, c, d} ( ) { , , , } E(G) = {(a,b) , (b,c), (c,d), (d,b), (a,c)} หรือ E(G) = {(b,a) , (c,b), (d,c), (b,d), (c,a)} {(b ) ( b) (d ) (b d) ( )}
  • 7. ภาพตวอยางกราฟไมมทศทาง ภาพตัวอย่ างกราฟไม่ มทศทาง ี ิ V(G) = {1 2 3 4 5} {1, 2, 3, 4, E(G) = {(1,2) , (2,4), (4,5), (5,3), (3,4), (2,3)}
  • 9. กราฟทมทศทาง กราฟทีมทศทาง (Digraph) ่ ี ิ • กราฟแบบมีทศทาง = กราฟที่มีเอดจ์์ เป็ นหัวลูกศร ซึ่ ึ งแสดงทิศทาง ิ จากเวอร์ เท็กซ์ หนึ่ง ไปยังอีกเวอร์ เท็กซ์ หนึ่ง (Directed Graph) A B กรุุงเทพ เวียงจันทร์ จากภาพ มีเส้นทางจากกรุ งเทพไปเวียงจันทร์ แต่ไม่มีเส้นทางจากเวียงจันทร์ ไปกรุ งเทพ
  • 10. กราฟแบบมีทศทาง ิ V(G) = {a, b, c, d} E(G) = {<a,b> , <a,c>, <b,d>, <d,c>, <c,b>}
  • 13. ระดับขั้นเข้ าและระดับขั้นออก ั ้ ั ้ (In-degree) ื ํ ระดบขนเข้า (In degree) คอ จานวนของเอดจทเข้าไป ์ ี่ ้ ยังเวอร์เทกซ์น้ น ๆ ั ระดับขั้นออก(Out-degree) คือ จํานวนของเอดจ์ที่ออกจาก เวอรเทกซนน เวอร์เทกซ์น้ น ๆ ั
  • 14.
  • 15.
  • 16. กราฟสมบูรณ กราฟสมบรณ์ • กราฟที่ทุกเวอร์์เท็กซ์์มีเอดจ์เ์ ชื่ือมโยงไปยังเวอร์์เท็กซ์์ที่เหลืือ ็ ไ ็ ทั้งหมด A B C ในกราฟสมบูรณ์ สามารถคํานวณจํานวนเอดจ์ ได้ จาก N*(N-1)/2
  • 17.
  • 18.
  • 19. สู ตรหาจานวนเอดจของกราฟไมมทศทาง สตรหาจํานวนเอดจ์ ของกราฟไม่ มทศทาง = (N * (N – 1)) / 2 ี ิ กราฟแบบไม่มีทิศทาง และจํานวนเวอร์เทกซ์ท่ีมีท้ งหมด เท่ากับ 4 เวอร์เทกซ์ จึง ั คํานวณหาจํานวนเอดจ์ได้ดงนี้ ั สู ตรหาจํานวนเอดจ์ของกราฟไม่มีทิศทาง = (N * (N – 1)) / 2 = (4 * (4 – 1)) / 2 = (4 * 3 ) / 2 = 12 / 2 = 6 เส้น
  • 20. สูตรหาจํํานวนเอดจ์์ ของกราฟมีทศทาง ฟ ี ิ = N * (N –1) จากภาพที่ (ข) ซึ่ งเป็ นกราฟแบบมีทิศทาง และจํานวนเวอร์เทกซ์ที่มี ทั้งหมดเท่ากับ 4 เวอร์เทกซ์ จึงคํานวณหาจํานวนเอดจ์ได้ดงนี้ ั ํ ์ สู ตรหาจานวนเอดจของกราฟมทศทางฟ ี ิ = N * (N –1) 1) = 4 * ( 4 – 1) =4*3 = 12 เส้้น
  • 21. กราฟทมนาหนก กราฟทีมนําหนัก (Weighted Graphs) ่ ี ้ • กราฟที่แต่่ ละเอดจ์์ จะมีค่าบ่งบอกถึึงความหมายอย่างใดอย่างหนึ่ ึง เช่น ระยะทาง ความเร็ว เวลาเดินทาง ค่ าโดยสาร เป็ นต้น 101 ปทมธานี ุ สระบรี ุ 46 101 58 107 นครนายก กรุงเทพ 100 29 82 ฉะเชงเทรา ฉะเชิงเทรา 76 ปราจนบุร ปราจีนบรี
  • 23. เส้ นทาง (Path) ของกราฟ คือ ลําดับของเวอร์เทกซ์ที่ถูกเชื่อมต่อ ดวยเอดจ โดยเริ่ มตั้งแต่เวอร์เทกซ์แรกไปจนถึงเวอร์เทกซ์สดทายหรอ ด้วยเอดจ์ โดยเรมตงแตเวอรเทกซแรกไปจนถงเวอรเทกซสุ ดท้ายหรื อ เวอร์เทกซ์ที่ตองการ ้ เส้ นทางจาก A ไป E P1 = (A, B, C, D, E) ความยาวของเส้นทางเท่ากับ 4 เสนทางจาก เส้ นทางจาก A ไป H P2 = (A, B, C, F, G, H)ความยาวของเส้นทางเท่ากับ 5
  • 24. การแทนกราฟดวยอะเรยสองมต การแทนกราฟด้ วยอะเรย์ สองมิติ B A B C D A 0 1 1 1 A C B 1 0 0 1 C 1 0 0 1 D 1 1 1 0 D
  • 28. การทองไปในกราฟ การท่ องไปในกราฟ (Graph traversal) • การท่่ องไปในกราฟ (graph traversal) คืือ กระบวนการเข้าไป ไ ใ ้ไ เยือนโหนดในกราฟ โดยมีหลักในการทํางานคือ แต่ละโหนดจะถูก เยือนเพียงครั้งเดียว สําหรับการท่องไปในทรี เพื่อเยือนแต่ละโหนดนั้น จะมเสนทางเดยว แตในกราฟระหวางโหนดอาจจะมหลายเสนทาง จะมีเส้นทางเดียว แต่ในกราฟระหว่างโหนดอาจจะมีหลายเส้นทาง ดังนั้นเพือปองกันการท่ องไปในเส้ นทางทีซํ้าเดิมจึงจําเป็ นต้ องทํา ่ ้ ่ เครื่องหมายมาร์ คบิตบริเวณทีได้ เยือนเสร็จเรียบร้ อยแล้วเพื่อไม่ให้เข้า เครองหมายมารคบตบรเวณทไดเยอนเสรจเรยบรอยแลวเพอไมใหเขา ่ ไปเยือนอีก สําหรับเทคนิคการท่องไปในกราฟมี 2 แบบดังนี้
  • 29. สํ าหรับเทคนิคการท่ องไปในกราฟมี 2 แบบดังนี้ • การท่ องแบบกว้ าง (Breadth first traversal) วิธีน้ ีทาโดยเลือกโหนด ํ ั ที่เป็ นจุดเริ่ มต้น ต่อมาให้เยือนโหนดอื่นที่ใกล้กนกับโหนดเริ่ มต้นทีละ ระดับ จนกระทังเยือนหมดทุุกโหนดในกราฟ ตัวอย่างแสดงเส้นทาง ่ การท่องแบบกว้างทีละโหนดตามลําดับ A การท่่ องไปแนวกว้้ าง A B C D E F ไป B C D E F
  • 30. การท่่ องไปในกราฟแนวกว้้ าง ไปใ ฟ การทองไปแนวกวาง การท่ องไปแนวกว้ าง = A G B H E C F D
  • 31. การท่ องแบบลึก (Depth first traversal) • การทํางานคล้ายกับการท่องทีละระดับของทรี โดยกําหนดเริ่มต้ นที่ โหนดแรกและเยอนโหนดถดไปตามแนววถนนจนกระทงนาไปสู โหนดแรกและเยือนโหนดถัดไปตามแนววิถน้ันจนกระทังนําไปส่ ปลาย ี ่ วิถน้ัน จากนั้น ย้อนกลับ (backtrack) ตามแนววิถีเดิมนั้น จนกระทัง ี ่ สามารถดําเนิินการต่่อเนื่ืองเข้าสู่ แนววิถีอื่น ๆ เพืื่อเยือนโหนดอื่ืน ๆ ้ ิ ื โ ต่อไปจนครบทุกโหนด A B C D 8 E F ABECFD
  • 34. Spanning Tree คือต้นไม้ที่ประกอบด้วยโหนดทุกโหนดของ กราฟ โดยแต่ ละคู่ของโหนดจะต้ องมีเส้ นเชืื่อมเพียงเส้ นเดียว นันคืือไ มี ่ ไม่ loop หรือ cycle • สมมติสถานการณ์ให้กราฟแสดงเส้นทางการบินระหว่าง 7 เมือง แต่ดวย ้ เหตุผลทางธุรกจทาใหตองปดเสนทางการบนไปใหมากทสุ ดแตยงคง เหตผลทางธรกิจทําให้ตองปิ ดเส้นทางการบินไปให้มากที่สดแต่ยงคง ้ ั สามารถเชื่อมต่อถึงกันได้หมด a b a b a b 1. ห้ามมี 2 เส้น c d c d c d 2. ห้ามตัดเส้นออก e e f e f 3. ห้ามมี cycle f g g g
  • 35. Minimum spanning tree MST หมายถึงเวทจ์กราฟและเป็ นสแปนนิ่งทรี ที่มีค่านํ้าหนักรวมกัน แล้วมีค่าน้อยที่สุด .29 2 .29 2 0 .51 0 .51 .31 .31 6 6 .32 7 .25 25 .32 7 .25 25 .21 .21 .60 .60 1 .51 1 .51 .46 .46 3 3 .34 .34 .18 .18 .40 .40 5 4 5 4
  • 36. Minimum spanning tree • Representation .29 2 0 1 2 3 4 5 6 7 0 .51 0 * .32 .29 * * .60 .51 .31 .31 6 1 .32 * * * * * * .21 .32 7 .25 .60 .21 2 .29 * * * * * * * 1 .51 3 * * * * .34 .18 * * .46 4 * * * .34 * .40 .51 .46 3 5 .34 .60 * * .18 .40 * * * .18 .40 6 .51 * 51 * * .51 * * .25 51 25 5 4 7 .31 .21 * * .46 * .25 *
  • 37. วิธีการในการหา Minimum Spanning Tree ทีนิยมใช้ ่ มี 3 วิธี ดังต่ อไปนี้ 1.Kruskal’s Algorithm Kruskal s Kruskal’s Algorithm ค้ นพบโดย Joseph Kruskal ในปี 1956 โดยมีหลักการ คนพบโดย ในป โดยมหลกการ ดังต่ อไปนี้ 1. เลอก 1 เลือก Edge ใน Graph ทีมี Weight ตําสด เปน edge เริ่มต้ น ทม่ ตาสุ ด เป็ น ่ เรมตน 2. จากนั้นให้ เพิม Edge ทีมี Weight ตําสุ ดทีเ่ หลืออยู่ ทีจะไม่ ทาให้ เกิด Simple Circuit ่ ่ ่ ่ ํ กับ Edge ทีเี่ ลือกไว้้ แล้้ ว ทําการหยุดหลังจากได้้ n-1 Edge เลือกได้้ n-1 edges ั ื ไ ํ ั ไ ื ไ เลือก edge ทีส้ั นทีสุด ่ ่ เลอกได เลือกได้ รวม edge นี้ ถ้ าไม่ เกิดวงจร n-1 edges
  • 38. Kruskal’s Algorithm • เรยงลาดบ weight จากนอยไปมาก ี ํ ั ih ้ ไป 3-5 = .18  1-7 = .21  1 7 21 .29 29 2 6-7 = .25  0 .51 .31 0-2 = .29  6 .32 7 .25 0-7 = .31  .60 .21 0-1 = .32 เกิดวงจร 1 .51 .46 4.3 = .34  3 4-5 = .40 เกิดวงจร .34 .18 4-7 = .46  4 7 46 5 .40 40 4 0-6 = .51 4-6 = .51 0-5 = .60
  • 39. 2.Prim s 2 Prim’s algorithm • หลักการของ Prim’s Algorithm เริ่ มต้นจากเวอร์์เท็กซ์์ที่กาหนดแล้ว ็ ํ หาเวอร์เท็กซ์ขางเคียง เรี ยงตามค่านํ้าหนักของเอดจ์ มีข้นตอนดังนี้ ้ ั • 1. เลือก 1 จุด • 2. เลืือก edge สั้ นสุ ดทีี่ต่อกับทีี่ได้เ้ ลืือกไว้้ ั ั ไ • 3. รวม edge นี้ถาไม่เกิดวงจร g ้
  • 40. Prim s Prim’s algorithm - เลือก 1 จุด - เลืือก edge สั้ ันสุ ดทีี่ต่อกับที่ีได้เ้ ลืือกไว้้ ั ไ - รวม edge นี้ถาไม่เกิดวงจร ้ A A 1 14 1 14 8 8 13 7 13 7 B C D B C D 6 3 6 7 3 7 E 1 F E 1 F
  • 41. 3 Dijkstra’s algorithm Dijkstra s • ่ วิธีการของ Dijkstra จะทําใ ได้สิ่ งทีี่เรีี ยกว่า single-source shortest ิ ํ ให้้ ้ path หรื อเส้นทางที่ส้ นที่สุดจากจุดเดียว โดยใช้ priority queue ช่วยใน ั การทํางาน มีีข้ นตอนดังนี้ ี ั 1. เลือกจุุดเริ่ มต้น 2. ตรวจสอบค่านํ้าหนักกับจุดที่เชื่อมต่อทุกจุด นําค่านํ้าหนักเก็บใน priority queue แล้วเลือกเส้นที่มีค่าตํ่าสด แลวเลอกเสนทมคาตาสุ ด 3. เยียมจุดที่เลือกใหม่ แล้วทําซํ้า 2-3 จนกว่าจะเยียมครบทุกจุด ่ ่ ้ ็ ข้อกําหนด : การนําข้อมูลเก็บในคิว เป็็ นไปตาม priority นันคืือ ค่า ้ ไ ่ นํ้าหนักน้อย มี priority สู งกว่า
  • 42. Dijkstra s Dijkstra’s algorithm • single-source AD1 DE7 AC8 shortest path DC8 DF8 EF8 EC10 AB14 CB21 A 14 1 8 AB14 AC8 AD1 13 7 B C D AD1 AC8 AB14 1 3 6 7 DC8 DE7 DF8 E F DE7 AC8 DC8 AB14 2 1 DF8 A 14 1 8 EF8 EC10 13 7 B C D 3 AC8 DC8 DF8 EF8 EC10 AB14 3 6 7 CB21 E 1 F 4 DC8 DF8 EF8 EC10 AB14 CB21
  • 43. แบบฝกหด แบบฝึ กหัด • 1 จากภาพต่่ อไปนีี้ จงแทนกราฟด้้ วยอะเรย์์ สองมิติ 1. ไป ฟ ิ 1 2 4 3 2. กราฟสมบูรณ์แบบไม่มีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 7 เวอร์เทกซ์ ั จงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์ 3. กราฟสมบูรณ์แบบมีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 8 เวอร์เทกซ์ ั จงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์
  • 44. 4. จากกราฟต่อไปนี้ จงท่องไปในแนวลึก และ แนวกว้าง โดยมีจุดเริ่ มต้นที่ เวอร์เทกซ์ B
  • 45. 5. จากภาพต่อไปนี้ จงหาระยะทางโดยใช้วธีการของ Dijkstra ิ โดยเริ่ มที่จุด B 2 A B 4 C 6 10 7 E 3 D 12 5 2 1 F G