ACS 7101/3 – Advanced Algorithm Design
This presentation is the property of its rightful owner.
Sponsored Links
1 / 21

ACS 7101/3 – Advanced Algorithm Design PowerPoint PPT Presentation


  • 102 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

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.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


Acs 7101 3 advanced algorithm design

ACS 7101/3 – Advanced Algorithm Design

Finding the maximum matching of a bipartite graph

Final Project

November 2008


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

The general procedure is:

M1G1G1’PM1 P = M2

M2G2G2’P1 & P2 M2 P1 P2 = M3

In this example M3 is the maximum matching

ACS 7101 – Advance Data Structures

November 2008


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

M1G1

  • 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

G1G1’ : 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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM1 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM2 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM2 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM2 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM2 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM2 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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

PM2 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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

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


Acs 7101 3 advanced algorithm design

Finding the maximum matching of a bipartite graph

Questions?

ACS 7101 – Advance Data Structures

November 2008


  • Login