Git Product home page Git Product logo

networkx's People

Contributors

alexbrc avatar aweinstein avatar bjedwards avatar branliu0 avatar chebee7i avatar dschult avatar hagberg avatar henrikhaugboelle avatar jamalsenouci avatar janmeier avatar jarrodmillman avatar jfinkels avatar jg-you avatar jtorrents avatar k-karakatsanis avatar kpetridis24 avatar loicseguin avatar mcognetta avatar michael-e-rose avatar mriduls avatar orkohunter avatar progval avatar rossbar avatar sanketdg avatar stefanv avatar thegreathippo avatar theosotr avatar wangz10 avatar wuhaochen avatar ysitu avatar

Stargazers

 avatar

networkx's Issues

Cases of MONO, SUB, IND

When checking for Feasibility of a candidate pair, take into consideration the cases of graph monomorphism, subgraph isomorphism and induced graph isomorphism

Adjust DFS for VF2++

Use the dfs_edges by networkx and modify it accordingly so that it fits VF2++

Yield results

All functions returning large structures should be handled with yield statements.

Ordering issue

Ordering crashes if G1 and G2 do not have the same labels. Should we just add a precheck to make sure that all labels in G1 are present in G2 or should we tackle this another way?

VF2++ states

Create a class, to store the necessary information of each state of the algorithm, in a stack structure (LIFO)

Implement VF2++

Finalize every feature and combine them to form the algorithm.

Create the user function

This requires that the structure of the implementation is similar to the already existing isomorphism functions of networkx. Implement a GraphMatcher for VF2++, a VF2++ userfunc that initializes a VF2++ GraphMatcher object. Also create a new is_isomorphic function that will process the graphs based on VF2++ (already exists for VF2)

VF2++ wrapper class

Create the class containing the most significant entities (like helper functions and the states). The implementation should be object-oriented.

BFS optimization

The current implementation computes the neighbors at distance k, by re-evaluating the neighbors at distance k-1. Make sure that every level is only computed once.
see: "d_level_bfs_tree" function

Graph labeling in the VF2++ preprocessing

The current implementation of the node ordering only takes into consideration, the node degrees. The node labels should be included as well.

Note: Decide how will the labels be represented. For example, we could initialize the algorithm by gathering the labels of each node in a dictionary, which will be used by VF2++. This should be performed during the initialisation of the VF2++ GraphMatcher.

Discuss whether there should be a variable "with_labels" to indicate that we should take labels into consideration as well.

Candidates and Feasibility

Part of the consistency check is being performed by the candidate selection. To pick candidates we take the intersections of neighborhoods in G2, of nodes _v which map back to covered neighbors _u of u (m[_u] = _v) and _u in G[u] and _v in G[v]. This is basically the consistency check.
@dschult

To force the program to test the consistency only we need to write unit tests without the labels (or assign the same labels). In the current unit tests, the labels are different, so when feasibility fails, it's always due to label inconsistencies, so we don't have a clear view on what happens in different cases of degree inconsistencies (this check is second in order).

Benchmark the Ti computing

Create benchmarking environment to compare the incremental Ti updating vs the brute force Ti computing

Update T1/T2/T1_tilde/T2_tilde

Update Ti/Ti_tilde instead of re-computing them in every function call. When the mapping is extended, just add the neighbors of the two new nodes that are not in the mapping.

Optimizations

Apply optimizations throughout the code. Look for:

  • Redundant/repeated operations and iterations
  • Things that might be checked by more than one functions (see candidates and feasibility)
  • Use profiler IPython %prof to check memory usage

Feasibility check ISO

The feasibility rules of the VF2++ should be implemented. These rules decide whether a pair of candidate nodes can establish a successful mapping.

Replace list with deque

Node ordering is only used for inserting and popping from the left end. It would be more efficient to use a deque.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.