slide1
Download
Skip this Video
Download Presentation
ACS 7101/3 – Advanced Algorithm Design

Loading in 2 Seconds...

play fullscreen
1 / 21

ACS 7101/3 – Advanced Algorithm Design - PowerPoint PPT Presentation


  • 147 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' ACS 7101/3 – Advanced Algorithm Design ' - jennifer-stone


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

ACS 7101/3 – Advanced Algorithm Design

Finding the maximum matching of a bipartite graph

Final Project

November 2008

slide2

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

slide3

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

slide4

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

slide5

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

slide6

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

slide7

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

slide8

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

slide9

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

slide10

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

slide11

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

slide12

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

slide13

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

slide14

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

slide15

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

slide16

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

slide17

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

slide18

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

slide19

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

slide20

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

slide21

Finding the maximum matching of a bipartite graph

Questions?

ACS 7101 – Advance Data Structures

November 2008

ad