1 / 21

ACS 7101/3 – Advanced Algorithm Design

ACS 7101/3 – Advanced Algorithm Design. Finding the maximum matching of a bipartite graph. Final Project. November 2008. Finding the maximum matching of a bipartite graph. From an initial matching. We want to find the maximum matching. 1 2 3 4 5 6.

Télécharger la présentation

ACS 7101/3 – Advanced Algorithm Design

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ACS 7101/3 – Advanced Algorithm Design Finding the maximum matching of a bipartite graph Final Project November 2008

  2. Finding the maximum matching of a bipartite graph From an initial matching We want to find the maximum matching 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 10 11 12 7 8 9 10 11 12 • preconditions: • The graph stored in a text file is represented by positive integer numbers. • The nodes must be consecutive and no node should be represented with a number bigger than the total number of nodes. • This code is designed for a balanced bipartite graph. Notes: • Since we are using positive integers to name each node, we are not going to • use the index 0 of the array. ACS 7101 – Advance Data Structures November 2008

  3. Finding the maximum matching of a bipartite graph The general procedure is: M1 G1 G1’ P M1 P = M2 M2 G2 G2’ P1 & P2 M2 P1 P2 = M3 In this example M3 is the maximum matching ACS 7101 – Advance Data Structures November 2008

  4. Finding the maximum matching of a bipartite graph We start with the graph stored in a text file as pairs u, v Store the file in memory using an Array of Objects Graph.txt 1 7 2 8 2 9 3 9 3 10 4 10 11 … … 1 2 3 4 5 6 7 8 9 10 11 12 ACS 7101 – Advance Data Structures November 2008

  5. Finding the maximum matching of a bipartite graph M1 G1 • count the nodes • readFile.cpp • randomMatching.cpp • or exampleMatching.cpp • initialize rest of the Array G1 G1 is a directed graph ACS 7101 – Advance Data Structures November 2008

  6. Finding the maximum matching of a bipartite graph G1 G1’ : finding j* • Level 0: (first half)‏ • if M = 0 => L = 0 • while j* != 0 • Level k odd (we want to go down on the directed graph)‏ • for the first half • assign k to all the nodes minus the one pointed by pm in the list • Level k even (we want to go up)‏ • for the second half • assign k to all the matching node • Note: • when L = current level and M = 0 => j* = L • findLevels.cpp ACS 7101 – Advance Data Structures November 2008

  7. Finding the maximum matching of a bipartite graph G1’ P • Use a stack to keep track of the path • Starting at Level 0: • Push (i)‏ • Read the list while it doesn’t belong to a path (P = 0) AND is not pointed by pm • while level(j) is greater than 0 and <= j*, AND it doesn't belong to a path AND it does belong to a matching: push(j); level ++; 1 2 3 4 5 6 7 8 9 10 11 12 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  8. Finding the maximum matching of a bipartite graph P M1 P = M2 • If we found a free node then we found a path => empty the stack, set P to 1, • while doing the symmetric difference and updating the matching… • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  9. Finding the maximum matching of a bipartite graph P M2 P1 = M3 Idea behind the symmetric difference: 3 edges in the path: (1, 7)‏ (7, 6)‏ (6, 12)‏ 1 2 3 4 5 6 1 2 3 4 5 6 M2 P1 7 8 9 10 11 12 7 8 9 10 11 12 Edge (1, 7)‏ In M2 doesn’t belong to a match match (A[1].M = 0 AND A[7].M = 1)‏ M3 1 2 3 4 5 6 7 8 9 10 11 12 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  10. Finding the maximum matching of a bipartite graph P M2 P1 = M3 Idea behind the symmetric difference: 3 edges in the path: (1, 7)‏ (7, 6)‏ (6, 12)‏ 1 2 3 4 5 6 1 2 3 4 5 6 M2 P1 7 8 9 10 11 12 7 8 9 10 11 12 Edge (1, 7)‏ In M2 doesn’t belong to a match match (A[1].M = 0 AND A[7].M = 1)‏ M3 1 2 3 4 5 6 7 8 9 10 11 12 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  11. Finding the maximum matching of a bipartite graph P M2 P1 = M3 Idea behind the symmetric difference: 3 edges in the path: (1, 7)‏ (7, 6)‏ (6, 12)‏ 1 2 3 4 5 6 1 2 3 4 5 6 M2 P1 7 8 9 10 11 12 7 8 9 10 11 12 Edge (7, 6)‏ Is a matching in M2 ignore (A[7].M = 1 AND A[6].M = 1)‏ M3 1 2 3 4 5 6 7 8 9 10 11 12 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  12. Finding the maximum matching of a bipartite graph P M2 P1 = M3 Idea behind the symmetric difference: 3 edges in the path: (1, 7)‏ (7, 6)‏ (6, 12)‏ 1 2 3 4 5 6 1 2 3 4 5 6 M2 P1 7 8 9 10 11 12 7 8 9 10 11 12 Edge (6, 12)‏ In M2 doesn’t belong to a match match (A[6].M = 1 AND A[12].M = 0)‏ M3 1 2 3 4 5 6 7 8 9 10 11 12 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  13. Finding the maximum matching of a bipartite graph P M2 P1 = M3 How does the code work: We only evaluate alternate edges Edge (1, 7)‏ In M2 doesn’t belong to a match match (A[1].M = 0 AND A[7].M = 1) A[1].M = 1 AND A[7].M = 1 … … … Edge (6, 12)‏ In M2 doesn’t belong to a match match (A[6].M = 1 AND A[12].M = 0)‏ A[6].M = 1 AND A[12].M = 1 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  14. Finding the maximum matching of a bipartite graph P M2 P1 = M3 After repeating the process: M3 1 2 3 4 5 6 7 8 9 10 11 12 • findPaths.cpp ACS 7101 – Advance Data Structures November 2008

  15. Finding the maximum matching of a bipartite graph writeGraph.txt 1 7 Match 2 8 Match 2 9 3 9 3 10 Match … 7 1 Match 6 2 Match … The final step is to write al the pairs (u, v) back into a text file including the matching edges found ACS 7101 – Advance Data Structures November 2008

  16. Finding the maximum matching of a bipartite graph List of files coded: main.cpp linkedListBG.h graph.txt array.cpp readFile.cpp display.cpp randomMatching.cpp exampleMatching.cpp findLevels.cpp findPaths.cpp writeFile.cpp ACS 7101 – Advance Data Structures November 2008

  17. Finding the maximum matching of a bipartite graph Improvements to be done before testing it with bigger graphs: • Change “pos” to an auxiliary pointer • Store repeated calls to linked list in a variable • Check end of list (now is done with count() should be checking if the pointer points to null)‏ • error control: • Open file • List is empty • … • Finish the random initial matching • … ACS 7101 – Advance Data Structures November 2008

  18. Finding the maximum matching of a bipartite graph Problems encounter during the process: • The implementation was not clear in the book • How to store the graph in memory • How to mark the matching edges • How to find the levels • How to find the symmetric difference • C++ language • All the above plus • First time working with array of objects ever • Plus linked lists and pointers (everywhere) ACS 7101 – Advance Data Structures November 2008

  19. Finding the maximum matching of a bipartite graph Positive actions during the process : • C++ • Hello world • Books – exercises • coding pseudo codes and assignment 2 • design • Discussions with professor • brainstorming the Structure • writing the document ACS 7101 – Advance Data Structures November 2008

  20. Finding the maximum matching of a bipartite graph What is next: • Fix everything mentioned before • Create a function to generate a random graph • Test the code in an incremental way starting maybe with 50 nodes and increment it up to 20.000 nodes ACS 7101 – Advance Data Structures November 2008

  21. Finding the maximum matching of a bipartite graph Questions? ACS 7101 – Advance Data Structures November 2008

More Related