damecco.tex
author Madarasi Peter
Wed, 23 Nov 2016 21:15:26 +0100
changeset 12 d35847f14178
parent 11 e73184c3928f
child 13 a21760ed63d6
permissions -rw-r--r--
All proofs of vf2pp' section removed
alpar@0
     1
%% 
alpar@0
     2
%% Copyright 2007, 2008, 2009 Elsevier Ltd
alpar@0
     3
%% 
alpar@0
     4
%% This file is part of the 'Elsarticle Bundle'.
alpar@0
     5
%% ---------------------------------------------
alpar@0
     6
%% 
alpar@0
     7
%% It may be distributed under the conditions of the LaTeX Project Public
alpar@0
     8
%% License, either version 1.2 of this license or (at your option) any
alpar@0
     9
%% later version.  The latest version of this license is in
alpar@0
    10
%%    http://www.latex-project.org/lppl.txt
alpar@0
    11
%% and version 1.2 or later is part of all distributions of LaTeX
alpar@0
    12
%% version 1999/12/01 or later.
alpar@0
    13
%% 
alpar@0
    14
%% The list of all files belonging to the 'Elsarticle Bundle' is
alpar@0
    15
%% given in the file `manifest.txt'.
alpar@0
    16
%% 
alpar@0
    17
alpar@0
    18
%% Template article for Elsevier's document class `elsarticle'
alpar@0
    19
%% with numbered style bibliographic references
alpar@0
    20
%% SP 2008/03/01
alpar@0
    21
alpar@0
    22
\documentclass[preprint,12pt]{elsarticle}
alpar@0
    23
alpar@0
    24
%% Use the option review to obtain double line spacing
alpar@0
    25
%% \documentclass[authoryear,preprint,review,12pt]{elsarticle}
alpar@0
    26
alpar@0
    27
%% Use the options 1p,twocolumn; 3p; 3p,twocolumn; 5p; or 5p,twocolumn
alpar@0
    28
%% for a journal layout:
alpar@0
    29
%% \documentclass[final,1p,times]{elsarticle}
alpar@0
    30
%% \documentclass[final,1p,times,twocolumn]{elsarticle}
alpar@0
    31
%% \documentclass[final,3p,times]{elsarticle}
alpar@0
    32
%% \documentclass[final,3p,times,twocolumn]{elsarticle}
alpar@0
    33
%% \documentclass[final,5p,times]{elsarticle}
alpar@0
    34
%% \documentclass[final,5p,times,twocolumn]{elsarticle}
alpar@0
    35
alpar@0
    36
%% For including figures, graphicx.sty has been loaded in
alpar@0
    37
%% elsarticle.cls. If you prefer to use the old commands
alpar@0
    38
%% please give \usepackage{epsfig}
alpar@0
    39
alpar@0
    40
%% The amssymb package provides various useful mathematical symbols
alpar@0
    41
\usepackage{amssymb}
alpar@0
    42
%% The amsthm package provides extended theorem environments
alpar@0
    43
%% \usepackage{amsthm}
alpar@0
    44
alpar@0
    45
%% The lineno packages adds line numbers. Start line numbering with
alpar@0
    46
%% \begin{linenumbers}, end it with \end{linenumbers}. Or switch it on
alpar@0
    47
%% for the whole article with \linenumbers.
alpar@0
    48
%% \usepackage{lineno}
alpar@0
    49
alpar@2
    50
\usepackage{amsmath}
alpar@2
    51
%% \usepackage[pdftex]{graphicx}
alpar@2
    52
alpar@2
    53
\usepackage{pgfplots}
alpar@2
    54
\pgfplotsset{width=9cm}
alpar@2
    55
\pgfplotsset{compat=1.8}
alpar@2
    56
alpar@2
    57
\usepackage{caption}
alpar@2
    58
\usepackage{subcaption} 
alpar@2
    59
alpar@2
    60
\usepackage{algorithm}
alpar@2
    61
\usepackage{algpseudocode}
alpar@2
    62
\usepackage{tikz}
alpar@2
    63
alpar@2
    64
\usepackage{amsthm,amssymb}
alpar@2
    65
\renewcommand{\qedsymbol}{\rule{0.7em}{0.7em}}
alpar@2
    66
alpar@2
    67
\newtheorem{theorem}{Theorem}[subsection]
alpar@2
    68
\newtheorem{corollary}{Corollary}[theorem]
alpar@2
    69
\newtheorem{claim}[theorem]{Claim}
alpar@2
    70
alpar@2
    71
\newtheorem{definition}{Definition}[subsection]
alpar@2
    72
\newtheorem{notation}{Notation}[subsection]
alpar@2
    73
\newtheorem{example}{Example}[subsection]
alpar@2
    74
\usetikzlibrary{decorations.markings}
alpar@2
    75
\let\oldproofname=\proofname
alpar@2
    76
%% \renewcommand{\proofname}{\rm\bf{Proof:}}
alpar@2
    77
Madarasi@7
    78
\captionsetup{font=normalsize}
Madarasi@7
    79
alpar@1
    80
\journal{Discrete Applied Mathematics}
alpar@0
    81
alpar@0
    82
\begin{document}
alpar@0
    83
alpar@0
    84
\begin{frontmatter}
alpar@0
    85
alpar@0
    86
%% Title, authors and addresses
alpar@0
    87
alpar@0
    88
%% use the tnoteref command within \title for footnotes;
alpar@0
    89
%% use the tnotetext command for theassociated footnote;
alpar@0
    90
%% use the fnref command within \author or \address for footnotes;
alpar@0
    91
%% use the fntext command for theassociated footnote;
alpar@0
    92
%% use the corref command within \author for corresponding author footnotes;
alpar@0
    93
%% use the cortext command for theassociated footnote;
alpar@0
    94
%% use the ead command for the email address,
alpar@0
    95
%% and the form \ead[url] for the home page:
alpar@0
    96
%% \title{Title\tnoteref{label1}}
alpar@0
    97
%% \tnotetext[label1]{}
alpar@0
    98
%% \author{Name\corref{cor1}\fnref{label2}}
alpar@0
    99
%% \ead{email address}
alpar@0
   100
%% \ead[url]{home page}
alpar@0
   101
%% \fntext[label2]{}
alpar@0
   102
%% \cortext[cor1]{}
alpar@0
   103
%% \address{Address\fnref{label3}}
alpar@0
   104
%% \fntext[label3]{}
alpar@0
   105
alpar@1
   106
\title{Improved Algorithms for Matching Biological Graphs}
alpar@0
   107
alpar@0
   108
%% use optional labels to link authors explicitly to addresses:
alpar@0
   109
%% \author[label1,label2]{}
alpar@0
   110
%% \address[label1]{}
alpar@0
   111
%% \address[label2]{}
alpar@0
   112
alpar@1
   113
\author{Alp{\'a}r J{\"u}ttner and P{\'e}ter Madarasi}
alpar@0
   114
alpar@1
   115
\address{Dept of Operations Research, ELTE}
alpar@0
   116
alpar@0
   117
\begin{abstract}
alpar@1
   118
Subgraph isomorphism is a well-known NP-Complete problem, while its
alpar@1
   119
special case, the graph isomorphism problem is one of the few problems
alpar@1
   120
in NP neither known to be in P nor NP-Complete. Their appearance in
alpar@1
   121
many fields of application such as pattern analysis, computer vision
alpar@1
   122
questions and the analysis of chemical and biological systems has
alpar@1
   123
fostered the design of various algorithms for handling special graph
alpar@1
   124
structures.
alpar@0
   125
alpar@1
   126
The idea of using state space representation and checking some
alpar@1
   127
conditions in each state to prune the search tree has made the VF2
alpar@1
   128
algorithm one of the state of the art graph matching algorithms for
alpar@1
   129
more than a decade. Recently, biological questions of ever increasing
alpar@1
   130
importance have required more efficient, specialized algorithms.
alpar@1
   131
alpar@1
   132
This paper presents VF2++, a new algorithm based on the original VF2,
alpar@1
   133
which runs significantly faster on most test cases and performs
alpar@1
   134
especially well on special graph classes stemming from biological
alpar@1
   135
questions. VF2++ handles graphs of thousands of nodes in practically
alpar@1
   136
near linear time including preprocessing. Not only is it an improved
alpar@1
   137
version of VF2, but in fact, it is by far the fastest existing
alpar@1
   138
algorithm regarding biological graphs.
alpar@1
   139
alpar@1
   140
The reason for VF2++' superiority over VF2 is twofold. Firstly, taking
alpar@1
   141
into account the structure and the node labeling of the graph, VF2++
alpar@1
   142
determines a state order in which most of the unfruitful branches of
alpar@1
   143
the search space can be pruned immediately. Secondly, introducing more
alpar@1
   144
efficient - nevertheless still easier to compute - cutting rules
alpar@1
   145
reduces the chance of going astray even further.
alpar@1
   146
alpar@1
   147
In addition to the usual subgraph isomorphism, specialized versions
alpar@1
   148
for induced subgraph isomorphism and for graph isomorphism are
alpar@1
   149
presented. VF2++ has gained a runtime improvement of one order of
alpar@1
   150
magnitude respecting induced subgraph isomorphism and a better
alpar@1
   151
asymptotical behaviour in the case of graph isomorphism problem.
alpar@1
   152
alpar@1
   153
After having provided the description of VF2++, in order to evaluate
alpar@1
   154
its effectiveness, an extensive comparison to the contemporary other
alpar@1
   155
algorithms is shown, using a wide range of inputs, including both real
alpar@1
   156
life biological and chemical datasets and standard randomly generated
alpar@1
   157
graph series.
alpar@1
   158
alpar@1
   159
The work was motivated and sponsored by QuantumBio Inc., and all the
alpar@1
   160
developed algorithms are available as the part of the open source
alpar@1
   161
LEMON graph and network optimization library
alpar@1
   162
(http://lemon.cs.elte.hu).
alpar@0
   163
\end{abstract}
alpar@0
   164
alpar@0
   165
\begin{keyword}
alpar@0
   166
%% keywords here, in the form: keyword \sep keyword
alpar@0
   167
alpar@0
   168
%% PACS codes here, in the form: \PACS code \sep code
alpar@0
   169
alpar@0
   170
%% MSC codes here, in the form: \MSC code \sep code
alpar@0
   171
%% or \MSC[2008] code \sep code (2000 is the default)
alpar@0
   172
alpar@0
   173
\end{keyword}
alpar@0
   174
alpar@0
   175
\end{frontmatter}
alpar@0
   176
alpar@0
   177
%% \linenumbers
alpar@0
   178
alpar@0
   179
%% main text
alpar@2
   180
\section{Introduction}
alpar@2
   181
\label{sec:intro}
alpar@2
   182
alpar@3
   183
In the last decades, combinatorial structures, and especially graphs
alpar@3
   184
have been considered with ever increasing interest, and applied to the
alpar@3
   185
solution of several new and revised questions.  The expressiveness,
alpar@3
   186
the simplicity and the studiedness of graphs make them practical for
alpar@3
   187
modelling and appear constantly in several seemingly independent
alpar@3
   188
fields.  Bioinformatics and chemistry are amongst the most relevant
alpar@3
   189
and most important fields.
alpar@2
   190
alpar@3
   191
Complex biological systems arise from the interaction and cooperation
alpar@3
   192
of plenty of molecular components. Getting acquainted with such
alpar@3
   193
systems at the molecular level has primary importance, since
alpar@3
   194
protein-protein interaction, DNA-protein interaction, metabolic
alpar@3
   195
interaction, transcription factor binding, neuronal networks, and
alpar@3
   196
hormone signaling networks can be understood only this way.
alpar@2
   197
alpar@3
   198
For instance, a molecular structure can be considered as a graph,
alpar@3
   199
whose nodes correspond to atoms and whose edges to chemical bonds. The
alpar@3
   200
secondary structure of a protein can also be represented as a graph,
alpar@3
   201
where nodes are associated with aminoacids and the edges with hydrogen
alpar@3
   202
bonds. The nodes are often whole molecular components and the edges
alpar@3
   203
represent some relationships among them.  The similarity and
alpar@3
   204
dissimilarity of objects corresponding to nodes are incorporated to
alpar@3
   205
the model by \emph{node labels}.  Many other chemical and biological
alpar@3
   206
structures can easily be modeled in a similar way. Understanding such
alpar@3
   207
networks basically requires finding specific subgraphs, which can not
alpar@3
   208
avoid the application of graph matching algorithms.
alpar@2
   209
alpar@3
   210
Finally, let some of the other real-world fields related to some
alpar@3
   211
variants of graph matching be briefly mentioned: pattern recognition
alpar@3
   212
and machine vision \cite{HorstBunkeApplications}, symbol recognition
alpar@3
   213
\cite{CordellaVentoSymbolRecognition}, face identification
alpar@3
   214
\cite{JianzhuangYongFaceIdentification}.  \\
alpar@2
   215
alpar@3
   216
Subgraph and induced subgraph matching problems are known to be
alpar@3
   217
NP-Complete\cite{SubgraphNPC}, while the graph isomorphism problem is
alpar@3
   218
one of the few problems in NP neither known to be in P nor
alpar@3
   219
NP-Complete. Although polynomial time isomorphism algorithms are known
alpar@3
   220
for various graph classes, like trees and planar
alpar@3
   221
graphs\cite{PlanarGraphIso}, bounded valence
alpar@3
   222
graphs\cite{BondedDegGraphIso}, interval graphs\cite{IntervalGraphIso}
alpar@3
   223
or permutation graphs\cite{PermGraphIso}.
alpar@2
   224
alpar@3
   225
In the following, some algorithms based on other approaches are
alpar@3
   226
summarized, which do not need any restrictions on the graphs. However,
alpar@3
   227
an overall polynomial behaviour is not expectable from such an
alpar@3
   228
alternative, it may often have good performance, even on a graph class
alpar@3
   229
for which polynomial algorithm is known. Note that this summary
alpar@3
   230
containing only exact matching algorithms is far not complete, neither
alpar@3
   231
does it cover all the recent algorithms.
alpar@2
   232
alpar@3
   233
The first practically usable approach was due to
alpar@4
   234
Ullmann\cite{Ullmann} which is a commonly used depth-first
alpar@3
   235
search based algorithm with a complex heuristic for reducing the
alpar@3
   236
number of visited states. A major problem is its $\Theta(n^3)$ space
alpar@3
   237
complexity, which makes it impractical in the case of big sparse
alpar@3
   238
graphs.
alpar@2
   239
alpar@4
   240
In a recent paper, Ullmann\cite{UllmannBit} presents an
alpar@3
   241
improved version of this algorithm based on a bit-vector solution for
alpar@3
   242
the binary Constraint Satisfaction Problem.
alpar@2
   243
alpar@4
   244
The Nauty algorithm\cite{Nauty} transforms the two graphs to
alpar@3
   245
a canonical form before starting to check for the isomorphism. It has
alpar@3
   246
been considered as one of the fastest graph isomorphism algorithms,
alpar@3
   247
although graph categories were shown in which it takes exponentially
alpar@3
   248
many steps. This algorithm handles only the graph isomorphism problem.
alpar@2
   249
alpar@4
   250
The \emph{LAD} algorithm\cite{Lad} uses a depth-first search
alpar@3
   251
strategy and formulates the matching as a Constraint Satisfaction
alpar@3
   252
Problem to prune the search tree. The constraints are that the mapping
alpar@3
   253
has to be injective and edge-preserving, hence it is possible to
alpar@3
   254
handle new matching types as well.
alpar@2
   255
alpar@3
   256
The \textbf{RI} algorithm\cite{RI} and its variations are based on a
alpar@3
   257
state space representation. After reordering the nodes of the graphs,
alpar@3
   258
it uses some fast executable heuristic checks without using any
alpar@3
   259
complex pruning rules. It seems to run really efficiently on graphs
alpar@3
   260
coming from biology, and won the International Contest on Pattern
alpar@3
   261
Search in Biological Databases\cite{Content}.
alpar@2
   262
alpar@3
   263
The currently most commonly used algorithm is the
alpar@3
   264
\textbf{VF2}\cite{VF2}, the improved version of VF\cite{VF}, which was
alpar@3
   265
designed for solving pattern matching and computer vision problems,
alpar@3
   266
and has been one of the best overall algorithms for more than a
alpar@3
   267
decade. Although, it can't be up to new specialized algorithms, it is
alpar@3
   268
still widely used due to its simplicity and space efficiency. VF2 uses
alpar@3
   269
a state space representation and checks some conditions in each state
alpar@3
   270
to prune the search tree.
alpar@2
   271
alpar@3
   272
Our first graph matching algorithm was the first version of VF2 which
alpar@3
   273
recognizes the significance of the node ordering, more opportunities
alpar@3
   274
to increase the cutting efficiency and reduce its computational
alpar@3
   275
complexity. This project was initiated and sponsored by QuantumBio
alpar@3
   276
Inc.\cite{QUANTUMBIO} and the implementation --- along with a source
alpar@3
   277
code --- has been published as a part of LEMON\cite{LEMON} open source
alpar@3
   278
graph library.
alpar@2
   279
alpar@3
   280
This paper introduces \textbf{VF2++}, a new further improved algorithm
alpar@3
   281
for the graph and (induced)subgraph isomorphism problem, which uses
alpar@3
   282
efficient cutting rules and determines a node order in which VF2 runs
alpar@3
   283
significantly faster on practical inputs.
alpar@2
   284
alpar@3
   285
Meanwhile, another variant called \textbf{VF2 Plus}\cite{VF2Plus} has
alpar@3
   286
been published. It is considered to be as efficient as the RI
alpar@3
   287
algorithm and has a strictly better behavior on large graphs.  The
alpar@3
   288
main idea of VF2 Plus is to precompute a heuristic node order of the
alpar@3
   289
small graph, in which the VF2 works more efficiently.
alpar@2
   290
alpar@2
   291
\section{Problem Statement}
alpar@3
   292
This section provides a detailed description of the problems to be
alpar@3
   293
solved.
alpar@2
   294
\subsection{Definitions}
alpar@2
   295
alpar@3
   296
Throughout the paper $G_{small}=(V_{small}, E_{small})$ and
alpar@3
   297
$G_{large}=(V_{large}, E_{large})$ denote two undirected graphs.
alpar@2
   298
\begin{definition}\label{sec:ismorphic}
alpar@3
   299
$G_{small}$ and $G_{large}$ are \textbf{isomorphic} if $\exists M:
alpar@3
   300
  V_{small} \longrightarrow V_{large}$ bijection, for which the
alpar@3
   301
  following is true:
alpar@2
   302
\begin{center}
alpar@3
   303
$\forall u,v\in{V_{small}} : (u,v)\in{E_{small}} \Leftrightarrow
alpar@3
   304
  (M(u),M(v))\in{E_{large}}$
alpar@2
   305
\end{center}
alpar@2
   306
\end{definition}
alpar@3
   307
For the sake of simplicity in this paper subgraphs and induced
alpar@3
   308
subgraphs are defined in a more general way than usual:
alpar@2
   309
\begin{definition}
alpar@3
   310
$G_{small}$ is a \textbf{subgraph} of $G_{large}$ if $\exists I:
alpar@3
   311
  V_{small}\longrightarrow V_{large}$ injection, for which the
alpar@3
   312
  following is true:
alpar@2
   313
\begin{center}
alpar@2
   314
$\forall u,v \in{V_{small}} : (u,v)\in{E_{small}} \Rightarrow (I(u),I(v))\in E_{large}$
alpar@2
   315
\end{center}
alpar@2
   316
\end{definition}
alpar@2
   317
alpar@2
   318
\begin{definition} 
alpar@3
   319
$G_{small}$ is an \textbf{induced subgraph} of $G_{large}$ if $\exists
alpar@3
   320
  I: V_{small}\longrightarrow V_{large}$ injection, for which the
alpar@3
   321
  following is true:
alpar@2
   322
\begin{center}
alpar@3
   323
$\forall u,v \in{V_{small}} : (u,v)\in{E_{small}} \Leftrightarrow
alpar@3
   324
  (I(u),I(v))\in E_{large}$
alpar@2
   325
\end{center}
alpar@2
   326
\end{definition}
alpar@2
   327
alpar@2
   328
\begin{definition}
alpar@3
   329
$lab: (V_{small}\cup V_{large}) \longrightarrow K$ is a \textbf{node
alpar@3
   330
    label function}, where K is an arbitrary set. The elements in K
alpar@3
   331
  are the \textbf{node labels}. Two nodes, u and v are said to be
alpar@3
   332
  \textbf{equivalent}, if $lab(u)=lab(v)$.
alpar@2
   333
\end{definition}
alpar@2
   334
alpar@3
   335
When node labels are also given, the matched nodes must have the same
alpar@3
   336
labels.  For example, the node labeled isomorphism is phrased by
alpar@2
   337
\begin{definition}
alpar@3
   338
$G_{small}$ and $G_{large}$ are \textbf{isomorphic by the node label
alpar@3
   339
    function lab} if $\exists M: V_{small} \longrightarrow V_{large}$
alpar@3
   340
  bijection, for which the following is true:
alpar@2
   341
\begin{center}
alpar@3
   342
$(\forall u,v\in{V_{small}} : (u,v)\in{E_{small}} \Leftrightarrow
alpar@3
   343
  (M(u),M(v))\in{E_{large}})$ and $(\forall u\in{V_{small}} :
alpar@3
   344
  lab(u)=lab(M(u)))$
alpar@2
   345
\end{center}
alpar@2
   346
\end{definition}
alpar@2
   347
alpar@2
   348
The other two definitions can be extended in the same way.
alpar@2
   349
alpar@3
   350
Note that edge label function can be defined similarly to node label
alpar@3
   351
function, and all the definitions can be extended with additional
alpar@3
   352
conditions, but it is out of the scope of this work.
alpar@2
   353
alpar@3
   354
The equivalence of two nodes is usually defined by another relation,
alpar@3
   355
$\\R\subseteq (V_{small}\cup V_{large})^2$. This overlaps with the
alpar@3
   356
definition given above if R is an equivalence relation, which does not
alpar@3
   357
mean restriction in biological and chemical applications.
alpar@2
   358
alpar@2
   359
\subsection{Common problems}\label{sec:CommProb}
alpar@2
   360
alpar@3
   361
The focus of this paper is on two extensively studied topics, the
alpar@3
   362
subgraph isomorphism and its variations. However, the following
alpar@3
   363
problems also appear in many applications.
alpar@2
   364
alpar@3
   365
The \textbf{subgraph matching problem} is the following: is
alpar@3
   366
$G_{small}$ isomorphic to any subgraph of $G_{large}$ by a given node
alpar@3
   367
label?
alpar@2
   368
alpar@3
   369
The \textbf{induced subgraph matching problem} asks the same about the
alpar@3
   370
existence of an induced subgraph.
alpar@2
   371
alpar@3
   372
The \textbf{graph isomorphism problem} can be defined as induced
alpar@3
   373
subgraph matching problem where the sizes of the two graphs are equal.
alpar@2
   374
alpar@3
   375
In addition to existence, it may be needed to show such a subgraph, or
alpar@3
   376
it may be necessary to list all of them.
alpar@2
   377
alpar@3
   378
It should be noted that some authors misleadingly refer to the term
alpar@3
   379
\emph{subgraph isomorphism problem} as an \emph{induced subgraph
alpar@3
   380
  isomorphism problem}.
alpar@2
   381
alpar@3
   382
The following sections give the descriptions of VF2, VF2++, VF2 Plus
alpar@3
   383
and a particular comparison.
alpar@2
   384
alpar@2
   385
\section{The VF2 Algorithm}
alpar@3
   386
This algorithm is the basis of both the VF2++ and the VF2 Plus.  VF2
alpar@4
   387
is able to handle all the variations mentioned in Section
alpar@4
   388
  \ref{sec:CommProb}.  Although it can also handle directed graphs,
alpar@3
   389
for the sake of simplicity, only the undirected case will be
alpar@3
   390
discussed.
alpar@2
   391
alpar@2
   392
alpar@2
   393
\subsection{Common notations}
alpar@3
   394
\indent Assume $G_{small}$ is searched in $G_{large}$.  The following
alpar@3
   395
definitions and notations will be used throughout the whole paper.
alpar@2
   396
\begin{definition}
alpar@3
   397
A set $M\subseteq V_{small}\times V_{large}$ is called
alpar@3
   398
\textbf{mapping}, if no node of $V_{small}$ or of $V_{large}$ appears
alpar@3
   399
in more than one pair in M.  That is, M uniquely associates some of
alpar@3
   400
the nodes in $V_{small}$ with some nodes of $V_{large}$ and vice
alpar@3
   401
versa.
alpar@2
   402
\end{definition}
alpar@2
   403
alpar@2
   404
\begin{definition}
alpar@3
   405
Mapping M \textbf{covers} a node v, if there exists a pair in M, which
alpar@3
   406
contains v.
alpar@2
   407
\end{definition}
alpar@2
   408
alpar@2
   409
\begin{definition}
alpar@3
   410
A mapping $M$ is $\mathbf{whole\ mapping}$, if $M$ covers all the
alpar@3
   411
nodes in $V_{small}$.
alpar@2
   412
\end{definition}
alpar@2
   413
alpar@2
   414
\begin{notation}
alpar@3
   415
Let $\mathbf{M_{small}(s)} := \{u\in V_{small} : \exists v\in
alpar@3
   416
V_{large}: (u,v)\in M(s)\}$ and $\mathbf{M_{large}(s)} := \{v\in
alpar@3
   417
V_{large} : \exists u\in V_{small}: (u,v)\in M(s)\}$.
alpar@2
   418
\end{notation}
alpar@2
   419
alpar@2
   420
\begin{notation}
alpar@3
   421
Let $\mathbf{Pair(M,v)}$ be the pair of $v$ in $M$, if such a node
alpar@3
   422
exist, otherwise $\mathbf{Pair(M,v)}$ is undefined. For a mapping $M$
alpar@3
   423
and $v\in V_{small}\cup V_{large}$.
alpar@2
   424
\end{notation}
alpar@2
   425
alpar@2
   426
Note that if $\mathbf{Pair(M,v)}$ exists, then it is unique
alpar@2
   427
alpar@3
   428
The definitions of the isomorphism types can be rephrased on the
alpar@3
   429
existence of a special whole mapping $M$, since it represents a
alpar@3
   430
bijection. For example
alpar@2
   431
\begin{center}
alpar@3
   432
$M\subseteq V_{small}\times V_{large}$ represents an induced subgraph
alpar@3
   433
  isomorphism $\Leftrightarrow$ $M$ is whole mapping and $\forall u,v
alpar@3
   434
  \in{V_{small}} : (u,v)\in{E_{small}} \Leftrightarrow
alpar@3
   435
  (Pair(M,u),Pair(M,v))\in E_{large}$.
alpar@2
   436
\end{center}
alpar@2
   437
alpar@2
   438
\begin{definition}
alpar@2
   439
A set of whole mappings is called \textbf{problem type}.
alpar@2
   440
\end{definition}
alpar@3
   441
Throughout the paper, $\mathbf{PT}$ denotes a generic problem type
alpar@3
   442
which can be substituted by any problem type.
alpar@2
   443
alpar@3
   444
A whole mapping $W\mathbf{\ is\ of\ type\ PT}$, if $W\in PT$. Using
alpar@3
   445
this notations, VF2 searches a whole mapping $W$ of type $PT$.
alpar@2
   446
alpar@3
   447
For example the problem type of graph isomorphism problem is the
alpar@3
   448
following.  A whole mapping $W$ is in $\mathbf{ISO}$, iff the
alpar@4
   449
bijection represented by $W$ satisfies Definition~\ref{sec:ismorphic}.
alpar@4
   450
The subgraph- and induced subgraph matching problems can be formalized
alpar@4
   451
in a similar way. Let their problem types be denoted as $\mathbf{SUB}$
alpar@4
   452
and $\mathbf{IND}$.
alpar@2
   453
alpar@2
   454
\begin{definition}
alpar@2
   455
\label{expPT}
alpar@3
   456
$PT$ is an \textbf{expanding problem type} if $\ \forall\ W\in
alpar@3
   457
PT:\ \forall u_1,u_2\in V_{small}:\ (u_1,u_2)\in E_{small}\Rightarrow
alpar@3
   458
(Pair(W,u_1),Pair(W,u_2))\in E_{large}$, that is each edge of
alpar@3
   459
$G_{small}$ has to be mapped to an edge of $G_{large}$ for each
alpar@3
   460
mapping in $PT$.
alpar@2
   461
\end{definition}
alpar@2
   462
alpar@2
   463
Note that $ISO$, $SUB$ and $IND$ are expanding problem types.
alpar@2
   464
alpar@3
   465
This paper deals with the three problem types mentioned above only,
alpar@3
   466
but the following generic definitions make it possible to handle other
alpar@3
   467
types as well.  Although it may be challenging to find a proper
alpar@3
   468
consistency function and an efficient cutting function.
alpar@2
   469
alpar@2
   470
\begin{definition}
alpar@3
   471
Let M be a mapping. A logical function $\mathbf{Cons_{PT}}$ is a
alpar@3
   472
\textbf{consistency function by } $\mathbf{PT}$, if the following
alpar@3
   473
holds. If there exists whole mapping $W$ of type PT for which
alpar@3
   474
$M\subseteq W$, then $Cons_{PT}(M)$ is true.
alpar@2
   475
\end{definition}
alpar@2
   476
alpar@2
   477
\begin{definition} 
alpar@3
   478
Let M be a mapping. A logical function $\mathbf{Cut_{PT}}$ is a
alpar@3
   479
\textbf{cutting function by } $\mathbf{PT}$, if the following
alpar@3
   480
holds. $\mathbf{Cut_{PT}(M)}$ is false if $M$ can be extended to a
alpar@3
   481
whole mapping W of type PT.
alpar@2
   482
\end{definition}
alpar@2
   483
alpar@2
   484
\begin{definition}
alpar@3
   485
$M$ is said to be \textbf{consistent mapping by} $\mathbf{PT}$, if
alpar@3
   486
  $Cons_{PT}(M)$ is true.
alpar@2
   487
\end{definition}
alpar@2
   488
alpar@2
   489
$Cons_{PT}$ and $Cut_{PT}$ will often be used in the following form.
alpar@2
   490
\begin{notation}
alpar@3
   491
Let $\mathbf{Cons_{PT}(p, M)}:=Cons_{PT}(M\cup\{p\})$ and
alpar@3
   492
$\mathbf{Cut_{PT}(p, M)}:=Cut_{PT}(M\cup\{p\})$, where
alpar@3
   493
$p\in{V_{small}\!\times\!V_{large}}$ and $M\cup\{p\}$ is mapping.
alpar@2
   494
\end{notation}
alpar@2
   495
alpar@3
   496
$Cons_{PT}$ will be used to check the consistency of the already
alpar@3
   497
covered nodes, while $Cut_{PT}$ is for looking ahead to recognize if
alpar@3
   498
no whole consistent mapping can contain the current mapping.
alpar@2
   499
alpar@2
   500
\subsection{Overview of the algorithm}
alpar@3
   501
VF2 uses a state space representation of mappings, $Cons_{PT}$ for
alpar@3
   502
excluding inconsistency with the problem type and $Cut_{PT}$ for
alpar@3
   503
pruning the search tree.  Each state $s$ of the matching process can
alpar@3
   504
be associated with a mapping $M(s)$.
alpar@2
   505
alpar@4
   506
Algorithm~\ref{alg:VF2Pseu} is a high level description of
alpar@3
   507
the VF2 matching algorithm.
alpar@2
   508
alpar@2
   509
alpar@2
   510
\begin{algorithm}
alpar@3
   511
\algtext*{EndIf}%ne nyomtasson end if-et \algtext*{EndFor}%ne
alpar@3
   512
nyomtasson ..  \algtext*{EndProcedure}%ne nyomtasson ..
alpar@2
   513
\caption{\hspace{0.5cm}$A\ high\ level\ description\ of\ VF2$}\label{alg:VF2Pseu}
alpar@2
   514
\begin{algorithmic}[1]
alpar@2
   515
alpar@3
   516
\Procedure{VF2}{State $s$, ProblemType $PT$} \If{$M(s$) covers
alpar@3
   517
  $V_{small}$} \State Output($M(s)$) \Else
alpar@2
   518
  
alpar@3
   519
  \State Compute the set $P(s)$ of the pairs candidate for inclusion
alpar@3
   520
  in $M(s)$ \ForAll{$p\in{P(s)}$} \If{Cons$_{PT}$($p, M(s)$) $\wedge$
alpar@3
   521
    $\neg$Cut$_{PT}$($p, M(s)$)} \State Compute the nascent state
alpar@3
   522
  $\tilde{s}$ by adding $p$ to $M(s)$ \State \textbf{call}
alpar@3
   523
  VF2($\tilde{s}$, $PT$) \EndIf \EndFor \EndIf \EndProcedure
alpar@2
   524
\end{algorithmic}
alpar@2
   525
\end{algorithm}
alpar@2
   526
alpar@2
   527
alpar@3
   528
The initial state $s_0$ is associated with $M(s_0)=\emptyset$, i.e. it
alpar@3
   529
starts with an empty mapping.
alpar@2
   530
alpar@3
   531
For each state $s$, the algorithm computes $P(s)$, the set of
alpar@3
   532
candidate node pairs for adding to the current state $s$.
alpar@2
   533
alpar@3
   534
For each pair $p$ in $P(s)$, $Cons_{PT}(p,M(s))$ and
alpar@3
   535
$Cut_{PT}(p,M(s))$ are evaluated. If $Cons_{PT}(p,M(s))$ is true and
alpar@3
   536
$Cut_{PT}(p,M(s))$ is false, the successor state $\tilde{s}=s\cup
alpar@3
   537
\{p\}$ is computed, and the whole process is recursively applied to
alpar@3
   538
$\tilde{s}$. Otherwise, $\tilde{s}$ is not consistent by $PT$ or it
alpar@3
   539
can be proved that $s$ can not be extended to a whole mapping.
alpar@2
   540
Madarasi@11
   541
In order to make sure of the correctness, see
alpar@2
   542
\begin{claim}
alpar@3
   543
Through consistent mappings, only consistent whole mappings can be
alpar@3
   544
reached, and all of the whole mappings are reachable through
alpar@3
   545
consistent mappings.
alpar@2
   546
\end{claim}
alpar@2
   547
alpar@3
   548
Note that a state may be reached in many different ways, since the
alpar@3
   549
order of insertions into M does not influence the nascent mapping. In
alpar@3
   550
fact, the number of different ways which lead to the same state can be
alpar@3
   551
exponentially large. If $G_{small}$ and $G_{large}$ are circles with n
alpar@3
   552
nodes and n different node labels, there exists exactly one graph
alpar@3
   553
isomorphism between them, but it will be reached in $n!$ different
alpar@3
   554
ways.
alpar@2
   555
alpar@2
   556
However, one may observe
alpar@2
   557
alpar@2
   558
\begin{claim}
alpar@2
   559
\label{claim:claimTotOrd}
alpar@3
   560
Let $\prec$ an arbitrary total ordering relation on $V_{small}$.  If
alpar@3
   561
the algorithm ignores each $p=(u,v) \in P(s)$, for which
alpar@2
   562
\begin{center}
alpar@2
   563
$\exists (\hat{u},\hat{v})\in P(s): \hat{u} \prec u$,
alpar@2
   564
\end{center}
alpar@3
   565
then no state can be reached more than ones and each state associated
alpar@3
   566
with a whole mapping remains reachable.
alpar@2
   567
\end{claim}
alpar@2
   568
alpar@3
   569
Note that the cornerstone of the improvements to VF2 is a proper
alpar@3
   570
choice of a total ordering.
alpar@2
   571
alpar@2
   572
\subsection{The candidate set P(s)}
alpar@2
   573
\label{candidateComputingVF2}
alpar@2
   574
$P(s)$ is the set of the candidate pairs for inclusion in $M(s)$.
alpar@3
   575
Suppose that $PT$ is an expanding problem type, see
alpar@4
   576
Definition~\ref{expPT}.
alpar@2
   577
alpar@2
   578
\begin{notation}
alpar@3
   579
Let $\mathbf{T_{small}(s)}:=\{u \in V_{small} : u$ is not covered by
alpar@3
   580
$M(s)\wedge\exists \tilde{u}\in{V_{small}: (u,\tilde{u})\in E_{small}}
alpar@3
   581
\wedge \tilde{u}$ is covered by $M(s)\}$, and
alpar@3
   582
\\ $\mathbf{T_{large}(s)}\!:=\!\{v \in\!V_{large}\!:\!v$ is not
alpar@3
   583
covered by
alpar@3
   584
$M(s)\wedge\!\exists\tilde{v}\!\in\!{V_{large}\!:\!(v,\tilde{v})\in\!E_{large}}
alpar@3
   585
\wedge \tilde{v}$ is covered by $M(s)\}$
alpar@2
   586
\end{notation}
alpar@2
   587
alpar@3
   588
The set $P(s)$ includes the pairs of uncovered neighbours of covered
alpar@3
   589
nodes and if there is not such a node pair, all the pairs containing
alpar@3
   590
two uncovered nodes are added. Formally, let
alpar@2
   591
\[
alpar@2
   592
 P(s)\!=\!
alpar@2
   593
  \begin{cases} 
alpar@3
   594
   T_{small}(s)\times T_{large}(s)&\hspace{-0.15cm}\text{if }
alpar@3
   595
   T_{small}(s)\!\neq\!\emptyset\!\wedge\!T_{large}(s)\!\neq
alpar@3
   596
   \emptyset,\\ (V_{small}\!\setminus\!M_{small}(s))\!\times\!(V_{large}\!\setminus\!M_{large}(s))
alpar@3
   597
   &\hspace{-0.15cm}otherwise.
alpar@2
   598
  \end{cases}
alpar@2
   599
\]
alpar@2
   600
alpar@2
   601
\subsection{Consistency}
alpar@3
   602
This section defines the consistency functions for the different
alpar@4
   603
problem types mentioned in Section~\ref{sec:CommProb}.
alpar@2
   604
\begin{notation}
alpar@3
   605
Let $\mathbf{\Gamma_{small} (u)}:=\{\tilde{u}\in V_{small} :
alpar@3
   606
(u,\tilde{u})\in E_{small}\}$\\ Let $\mathbf{\Gamma_{large}
alpar@3
   607
  (v)}:=\{\tilde{v}\in V_{large} : (v,\tilde{v})\in E_{large}\}$
alpar@2
   608
\end{notation}
alpar@3
   609
Suppose $p=(u,v)$, where $u\in V_{small}$ and $v\in V_{large}$, $s$ is
alpar@3
   610
a state of the matching procedure, $M(s)$ is consistent mapping by
alpar@3
   611
$PT$ and $lab(u)=lab(v)$.  $Cons_{PT}(p,M(s))$ checks whether
alpar@3
   612
including pair $p$ into $M(s)$ leads to a consistent mapping by $PT$.
alpar@2
   613
alpar@2
   614
\subsubsection{Induced subgraph isomorphism}
alpar@3
   615
$M(s)\cup \{(u,v)\}$ is a consistent mapping by $IND$ $\Leftrightarrow
alpar@3
   616
(\forall \tilde{u}\in M_{small}: (u,\tilde{u})\in E_{small}
alpar@3
   617
\Leftrightarrow (v,Pair(M(s),\tilde{u}))\in E_{large})$.\newline The
alpar@3
   618
following formulation gives an efficient way of calculating
alpar@3
   619
$Cons_{IND}$.
alpar@2
   620
\begin{claim}
alpar@3
   621
$Cons_{IND}((u,v),M(s)):=(\forall \tilde{v}\in \Gamma_{large}(v)
alpar@3
   622
  \ \cap\ M_{large}(s):\\(Pair(M(s),\tilde{v}),u)\in E_{small})\wedge
alpar@3
   623
  (\forall \tilde{u}\in \Gamma_{small}(u)
alpar@3
   624
  \ \cap\ M_{small}(s):(v,Pair(M(s),\tilde{u}))\in E_{large})$ is a
alpar@3
   625
  consistency function in the case of $IND$.
alpar@2
   626
\end{claim}
alpar@2
   627
alpar@2
   628
\subsubsection{Graph isomorphism}
alpar@3
   629
$M(s)\cup \{(u,v)\}$ is a consistent mapping by $ISO$
alpar@3
   630
$\Leftrightarrow$ $M(s)\cup \{(u,v)\}$ is a consistent mapping by
alpar@3
   631
$IND$.
alpar@2
   632
\begin{claim}
alpar@3
   633
$Cons_{ISO}((u,v),M(s))$ is a consistency function by $ISO$ if and
alpar@3
   634
  only if it is a consistency function by $IND$.
alpar@2
   635
\end{claim}
alpar@2
   636
\subsubsection{Subgraph isomorphism}
alpar@3
   637
$M(s)\cup \{(u,v)\}$ is a consistent mapping by $SUB$ $\Leftrightarrow
alpar@3
   638
(\forall \tilde{u}\in M_{small}:\\(u,\tilde{u})\in E_{small}
alpar@3
   639
\Rightarrow (v,Pair(M(s),\tilde{u}))\in E_{large})$.
alpar@2
   640
\newline
alpar@3
   641
The following formulation gives an efficient way of calculating
alpar@3
   642
$Cons_{SUB}$.
alpar@2
   643
\begin{claim}
alpar@3
   644
$Cons_{SUB}((u,v),M(s)):= (\forall \tilde{u}\in \Gamma_{small}(u)
alpar@3
   645
  \ \cap\ M_{small}(s):\\(v,Pair(M(s),\tilde{u}))\in E_{large})$ is a
alpar@3
   646
  consistency function by $SUB$.
alpar@2
   647
\end{claim}
alpar@2
   648
alpar@2
   649
\subsection{Cutting rules}
alpar@3
   650
$Cut_{PT}(p,M(s))$ is defined by a collection of efficiently
alpar@3
   651
verifiable conditions. The requirement is that $Cut_{PT}(p,M(s))$ can
alpar@3
   652
be true only if it is impossible to extended $M(s)\cup \{p\}$ to a
alpar@3
   653
whole mapping.
alpar@2
   654
\begin{notation}
alpar@2
   655
alpar@3
   656
Let $\mathbf{\tilde{T}_{small}}(s):=(V_{small}\backslash
alpar@3
   657
M_{small}(s))\backslash T_{small}(s)$, and
alpar@3
   658
\\ $\mathbf{\tilde{T}_{large}}(s):=(V_{large}\backslash
alpar@3
   659
M_{large}(s))\backslash T_{large}(s)$.
alpar@2
   660
\end{notation}
alpar@2
   661
\subsubsection{Induced subgraph isomorphism}
alpar@2
   662
\begin{claim}
alpar@3
   663
$Cut_{IND}((u,v),M(s)):= |\Gamma_{large} (v)\ \cap\ T_{large}(s)| <
alpar@3
   664
  |\Gamma_{small} (u)\ \cap\ T_{small}(s)| \vee |\Gamma_{large}(v)\cap
alpar@3
   665
  \tilde{T}_{large}(s)| < |\Gamma_{small}(u)\cap
alpar@3
   666
  \tilde{T}_{small}(s)|$ is a cutting function by $IND$.
alpar@2
   667
\end{claim}
alpar@2
   668
\subsubsection{Graph isomorphism}
alpar@3
   669
Note that the cutting function of induced subgraph isomorphism defined
alpar@3
   670
above is a cutting function by $ISO$, too, however it is less
alpar@3
   671
efficient than the following while their computational complexity is
alpar@3
   672
the same.
alpar@2
   673
\begin{claim}
alpar@3
   674
$Cut_{ISO}((u,v),M(s)):= |\Gamma_{large} (v)\ \cap\ T_{large}(s)| \neq
alpar@3
   675
  |\Gamma_{small} (u)\ \cap\ T_{small}(s)| \vee |\Gamma_{large}(v)\cap
alpar@3
   676
  \tilde{T}_{large}(s)| \neq |\Gamma_{small}(u)\cap
alpar@3
   677
  \tilde{T}_{small}(s)|$ is a cutting function by $ISO$.
alpar@2
   678
\end{claim}
alpar@2
   679
alpar@2
   680
\subsubsection{Subgraph isomorphism}
alpar@2
   681
\begin{claim}
alpar@3
   682
$Cut_{SUB}((u,v),M(s)):= |\Gamma_{large} (v)\ \cap\ T_{large}(s)| <
alpar@3
   683
  |\Gamma_{small} (u)\ \cap\ T_{small}(s)|$ is a cutting function by
alpar@3
   684
  $SUB$.
alpar@2
   685
\end{claim}
alpar@3
   686
Note that there is a significant difference between induced and
alpar@3
   687
non-induced subgraph isomorphism:
alpar@2
   688
alpar@2
   689
\begin{claim}
alpar@2
   690
\label{claimSUB}
alpar@3
   691
$Cut_{SUB}'((u,v),M(s)):= |\Gamma_{large} (v)\ \cap\ T_{large}(s)| <
alpar@3
   692
|\Gamma_{small} (u)\ \cap\ T_{small}(s)| \vee |\Gamma_{large}(v)\cap
alpar@3
   693
\tilde{T}_{large}(s)| < |\Gamma_{small}(u)\cap \tilde{T}_{small}(s)|$
alpar@3
   694
is \textbf{not} a cutting function by $SUB$.
alpar@2
   695
\end{claim}
alpar@2
   696
alpar@2
   697
\section{The VF2++ Algorithm}
alpar@3
   698
Although any total ordering relation makes the search space of VF2 a
alpar@3
   699
tree, its choice turns out to dramatically influence the number of
alpar@3
   700
visited states. The goal is to determine an efficient one as quickly
alpar@3
   701
as possible.
alpar@2
   702
alpar@3
   703
The main reason for VF2++' superiority over VF2 is twofold. Firstly,
alpar@3
   704
taking into account the structure and the node labeling of the graph,
alpar@3
   705
VF2++ determines a state order in which most of the unfruitful
alpar@3
   706
branches of the search space can be pruned immediately. Secondly,
alpar@3
   707
introducing more efficient --- nevertheless still easier to compute
alpar@3
   708
--- cutting rules reduces the chance of going astray even further.
alpar@2
   709
alpar@3
   710
In addition to the usual subgraph isomorphism, specialized versions
alpar@3
   711
for induced subgraph isomorphism and for graph isomorphism have been
alpar@3
   712
designed. VF2++ has gained a runtime improvement of one order of
alpar@3
   713
magnitude respecting induced subgraph isomorphism and a better
alpar@3
   714
asymptotical behaviour in the case of graph isomorphism problem.
alpar@2
   715
alpar@3
   716
Note that a weaker version of the cutting rules and the more efficient
alpar@3
   717
candidate set calculating were described in \cite{VF2Plus}, too.
alpar@2
   718
alpar@3
   719
It should be noted that all the methods described in this section are
alpar@3
   720
extendable to handle directed graphs and edge labels as well.
alpar@2
   721
alpar@3
   722
The basic ideas and the detailed description of VF2++ are provided in
alpar@3
   723
the following.
alpar@2
   724
alpar@2
   725
\subsection{Preparations}
alpar@2
   726
\begin{claim}
alpar@2
   727
\label{claim:claimCoverFromLeft}
alpar@3
   728
The total ordering relation uniquely determines a node order, in which
alpar@3
   729
the nodes of $V_{small}$ will be covered by VF2. From the point of
alpar@3
   730
view of the matching procedure, this means, that always the same node
alpar@3
   731
of $G_{small}$ will be covered on the d-th level.
alpar@2
   732
\end{claim}
alpar@2
   733
alpar@2
   734
\begin{definition}
alpar@3
   735
An order $(u_{\sigma(1)},u_{\sigma(2)},..,u_{\sigma(|V_{small}|)})$ of
alpar@3
   736
$V_{small}$ is \textbf{matching order}, if exists $\prec$ total
alpar@3
   737
ordering relation, s.t. the VF2 with $\prec$ on the d-th level finds
alpar@3
   738
pair for $u_{\sigma(d)}$ for all $d\in\{1,..,|V_{small}|\}$.
alpar@2
   739
\end{definition}
alpar@2
   740
alpar@2
   741
\begin{claim}\label{claim:MOclaim}
alpar@3
   742
A total ordering is matching order, iff the nodes of every component
alpar@3
   743
form an interval in the node sequence, and every node connects to a
alpar@3
   744
previous node in its component except the first node of the
alpar@3
   745
component. The order of the components is arbitrary.  \\Formally
alpar@3
   746
spoken, an order
alpar@3
   747
$(u_{\sigma(1)},u_{\sigma(2)},..,u_{\sigma(|V_{small}|)})$ of
alpar@3
   748
$V_{small}$ is matching order $\Leftrightarrow$ $\forall
alpar@3
   749
G'_{small}=(V'_{small},E'_{small})\ component\ of\ G_{small}: \forall
alpar@3
   750
i: (\exists j : j<i\wedge u_{\sigma(j)},u_{\sigma(i)}\in
alpar@3
   751
V'_{small})\Rightarrow \exists k : k < i \wedge (\forall l: k\leq
alpar@3
   752
l\leq i \Rightarrow u_{l}\in V'_{small}) \wedge
alpar@3
   753
(u_{\sigma{(k)}},u_{\sigma{(i)}})\in E'_{small}$, where $i,j,k,l\in
alpar@3
   754
\{1,..,|V_{small}|\}$\newline
alpar@2
   755
\end{claim}
alpar@2
   756
alpar@3
   757
To summing up, a total ordering always uniquely determines a matching
alpar@3
   758
order, and every matching order can be determined by a total ordering,
alpar@3
   759
however, more than one different total orderings may determine the
alpar@3
   760
same matching order.
alpar@2
   761
\subsection{Idea behind the algorithm}
alpar@3
   762
The goal is to find a matching order in which the algorithm is able to
alpar@3
   763
recognize inconsistency or prune the infeasible branches on the
alpar@3
   764
highest levels and goes deep only if it is needed.
alpar@2
   765
alpar@2
   766
\begin{notation}
alpar@3
   767
Let $\mathbf{Conn_{H}(u)}:=|\Gamma_{small}(u)\cap H\}|$, that is the
alpar@3
   768
number of neighbours of u which are in H, where $u\in V_{small} $ and
alpar@3
   769
$H\subseteq V_{small}$.
alpar@2
   770
\end{notation}
alpar@2
   771
alpar@3
   772
The principal question is the following. Suppose a state $s$ is
alpar@3
   773
given. For which node of $T_{small}(s)$ is the hardest to find a
alpar@3
   774
consistent pair in $G_{large}$? The more covered neighbours a node in
alpar@3
   775
$T_{small}(s)$ has --- i.e. the largest $Conn_{M_{small}(s)}$ it has
alpar@3
   776
---, the more rarely satisfiable consistency constraints for its pair
alpar@3
   777
are given.
alpar@2
   778
alpar@3
   779
In biology, most of the graphs are sparse, thus several nodes in
alpar@3
   780
$T_{small}(s)$ may have the same $Conn_{M_{small}(s)}$, which makes
alpar@3
   781
reasonable to define a secondary and a tertiary order between them.
alpar@3
   782
The observation above proves itself to be as determining, that the
alpar@3
   783
secondary ordering prefers nodes with the most uncovered neighbours
alpar@3
   784
among which have the same $Conn_{M_{small}(s)}$ to increase
alpar@3
   785
$Conn_{M_{small}(s)}$ of uncovered nodes so much, as possible.  The
alpar@3
   786
tertiary ordering prefers nodes having the rarest uncovered labels.
alpar@2
   787
alpar@3
   788
Note that the secondary ordering is the same as the ordering by $deg$,
alpar@3
   789
which is a static data in front of the above used.
alpar@2
   790
alpar@3
   791
These rules can easily result in a matching order which contains the
alpar@3
   792
nodes of a long path successively, whose nodes may have low $Conn$ and
alpar@3
   793
is easily matchable into $G_{large}$. To avoid that, a BFS order is
alpar@3
   794
used, which provides the shortest possible paths.
alpar@2
   795
\newline
alpar@2
   796
alpar@3
   797
In the following, some examples on which the VF2 may be slow are
alpar@3
   798
described, although they are easily solvable by using a proper
alpar@3
   799
matching order.
alpar@2
   800
alpar@2
   801
\begin{example}
alpar@3
   802
Suppose $G_{small}$ can be mapped into $G_{large}$ in many ways
alpar@3
   803
without node labels. Let $u\in V_{small}$ and $v\in V_{large}$.
alpar@2
   804
\newline
alpar@2
   805
$lab(u):=black$
alpar@2
   806
\newline
alpar@2
   807
$lab(v):=black$
alpar@2
   808
\newline
alpar@3
   809
$lab(\tilde{u}):=red \ \forall \tilde{u}\in (V_{small}\backslash
alpar@3
   810
\{u\})$
alpar@2
   811
\newline
alpar@3
   812
$lab(\tilde{v}):=red \ \forall \tilde{v}\in (V_{large}\backslash
alpar@3
   813
\{v\})$
alpar@2
   814
\newline
alpar@2
   815
alpar@3
   816
Now, any mapping by the node label $lab$ must contain $(u,v)$, since
alpar@3
   817
$u$ is black and no node in $V_{large}$ has a black label except
alpar@3
   818
$v$. If unfortunately $u$ were the last node which will get covered,
alpar@3
   819
VF2 would check only in the last steps, whether $u$ can be matched to
alpar@3
   820
$v$.
alpar@2
   821
\newline
alpar@3
   822
However, had $u$ been the first matched node, u would have been
alpar@3
   823
matched immediately to v, so all the mappings would have been
alpar@3
   824
precluded in which node labels can not correspond.
alpar@2
   825
\end{example}
alpar@2
   826
alpar@2
   827
\begin{example}
alpar@3
   828
Suppose there is no node label given, $G_{small}$ is a small graph and
alpar@3
   829
can not be mapped into $G_{large}$ and $u\in V_{small}$.
alpar@2
   830
\newline
alpar@3
   831
Let $G'_{small}:=(V_{small}\cup
alpar@3
   832
\{u'_{1},u'_{2},..,u'_{k}\},E_{small}\cup
alpar@3
   833
\{(u,u'_{1}),(u'_{1},u'_{2}),..,(u'_{k-1},u'_{k})\})$, that is,
alpar@3
   834
$G'_{small}$ is $G_{small}\cup \{ a\ k$ long path, which is disjoint
alpar@3
   835
from $G_{small}$ and one of its starting points is connected to $u\in
alpar@3
   836
V_{small}\}$.
alpar@2
   837
\newline
alpar@3
   838
Is there a subgraph of $G_{large}$, which is isomorph with
alpar@3
   839
$G'_{small}$?
alpar@2
   840
\newline
alpar@3
   841
If unfortunately the nodes of the path were the first $k$ nodes in the
alpar@3
   842
matching order, the algorithm would iterate through all the possible k
alpar@3
   843
long paths in $G_{large}$, and it would recognize that no path can be
alpar@3
   844
extended to $G'_{small}$.
alpar@2
   845
\newline
alpar@3
   846
However, had it started by the matching of $G_{small}$, it would not
alpar@3
   847
have matched any nodes of the path.
alpar@2
   848
\end{example}
alpar@2
   849
alpar@3
   850
These examples may look artificial, but the same problems also appear
Madarasi@7
   851
in real-world instances, even though in a less obvious way.
alpar@2
   852
alpar@2
   853
\subsection{Total ordering}
alpar@3
   854
Instead of the total ordering relation, the matching order will be
alpar@3
   855
searched directly.
alpar@2
   856
\begin{notation}
alpar@3
   857
Let \textbf{F$_\mathcal{M}$(l)}$:=|\{v\in V_{large} :
alpar@3
   858
l=lab(v)\}|-|\{u\in V_{small}\backslash \mathcal{M} : l=lab(u)\}|$ ,
alpar@3
   859
where $l$ is a label and $\mathcal{M}\subseteq V_{small}$.
alpar@2
   860
\end{notation}
alpar@2
   861
alpar@2
   862
\begin{definition}Let $\mathbf{arg\ max}_{f}(S) :=\{u : u\in S \wedge f(u)=max_{v\in S}\{f(v)\}\}$ and $\mathbf{arg\ min}_{f}(S) := arg\ max_{-f}(S)$, where $S$ is a finite set and $f:S\longrightarrow \mathbb{R}$.
alpar@2
   863
\end{definition}
alpar@2
   864
alpar@2
   865
\begin{algorithm}
Madarasi@8
   866
\algtext*{EndIf}
Madarasi@8
   867
\algtext*{EndProcedure}
alpar@2
   868
\algtext*{EndWhile}
alpar@2
   869
\caption{\hspace{0.5cm}$The\ method\ of\ VF2++\ for\ determining\ the\ node\ order$}\label{alg:VF2PPPseu}
alpar@2
   870
\begin{algorithmic}[1]
alpar@3
   871
\Procedure{VF2++order}{} \State $\mathcal{M}$ := $\emptyset$
alpar@3
   872
\Comment{matching order} \While{$V_{small}\backslash \mathcal{M}
alpar@3
   873
  \neq\emptyset$} \State $r\in$ arg max$_{deg}$ (arg
alpar@3
   874
min$_{F_\mathcal{M}\circ lab}(V_{small}\backslash
alpar@3
   875
\mathcal{M})$)\label{alg:findMin} \State Compute $T$, a BFS tree with
alpar@3
   876
root node $r$.  \For{$d=0,1,...,depth(T)$} \State $V_d$:=nodes of the
alpar@3
   877
$d$-th level \State Process $V_d$ \Comment{See Algorithm
Madarasi@8
   878
  \ref{alg:VF2PPProcess1}} \EndFor
alpar@3
   879
\EndWhile \EndProcedure
alpar@2
   880
\end{algorithmic}
alpar@2
   881
\end{algorithm}
alpar@2
   882
alpar@2
   883
\begin{algorithm}
Madarasi@8
   884
\algtext*{EndIf}
Madarasi@8
   885
\algtext*{EndProcedure}%ne nyomtasson ..
alpar@2
   886
\algtext*{EndWhile}
Madarasi@8
   887
\caption{\hspace{.5cm}$The\ method\ for\ processing\ a\ level\ of\ the\ BFS\ tree$}\label{alg:VF2PPProcess1}
alpar@2
   888
\begin{algorithmic}[1]
alpar@3
   889
\Procedure{VF2++ProcessLevel1}{$V_{d}$} \While{$V_d\neq\emptyset$}
alpar@3
   890
\State $m\in$ arg min$_{F_\mathcal{M}\circ\ lab}($ arg max$_{deg}($arg
alpar@3
   891
max$_{Conn_{\mathcal{M}}}(V_{d})))$ \State $V_d:=V_d\backslash m$
alpar@3
   892
\State Append node $m$ to the end of $\mathcal{M}$ \State Refresh
alpar@3
   893
$F_\mathcal{M}$ \EndWhile \EndProcedure
alpar@2
   894
\end{algorithmic}
alpar@2
   895
\end{algorithm}
alpar@2
   896
alpar@4
   897
Algorithm~\ref{alg:VF2PPPseu} is a high level description of the
alpar@4
   898
matching order procedure of VF2++. It computes a BFS tree for each
alpar@3
   899
component in ascending order of their rarest $lab$ and largest $deg$,
alpar@4
   900
whose root vertex is the component's minimal
Madarasi@8
   901
node. Algorithm~\ref{alg:VF2PPProcess1} is a method to process a level of the BFS tree, which appends the nodes of the current level in descending
Madarasi@8
   902
lexicographic order by $(Conn_{\mathcal{M}},deg,-F_\mathcal{M})$ separately
Madarasi@8
   903
to $\mathcal{M}$, and refreshes $F_\mathcal{M}$ immediately.
alpar@2
   904
alpar@4
   905
Claim~\ref{claim:MOclaim} shows that Algorithm~\ref{alg:VF2PPPseu}
alpar@4
   906
provides a matching order.
alpar@2
   907
alpar@2
   908
alpar@2
   909
\subsection{Cutting rules}
alpar@2
   910
\label{VF2PPCuttingRules}
alpar@3
   911
This section presents the cutting rules of VF2++, which are improved
alpar@3
   912
by using extra information coming from the node labels.
alpar@2
   913
\begin{notation}
alpar@3
   914
Let $\mathbf{\Gamma_{small}^{l}(u)}:=\{\tilde{u} : lab(\tilde{u})=l
alpar@3
   915
\wedge \tilde{u}\in \Gamma_{small} (u)\}$ and
alpar@3
   916
$\mathbf{\Gamma_{large}^{l}(v)}:=\{\tilde{v} : lab(\tilde{v})=l \wedge
alpar@3
   917
\tilde{v}\in \Gamma_{large} (v)\}$, where $u\in V_{small}$, $v\in
alpar@3
   918
V_{large}$ and $l$ is a label.
alpar@2
   919
\end{notation}
alpar@2
   920
alpar@2
   921
\subsubsection{Induced subgraph isomorphism}
alpar@2
   922
\begin{claim}
alpar@2
   923
\[LabCut_{IND}((u,v),M(s))\!:=\!\!\!\!\!\bigvee_{l\ is\ label}\!\!\!\!\!\!\!|\Gamma_{large}^{l} (v) \cap T_{large}(s)|\!<\!|\Gamma_{small}^{l}(u)\cap T_{small}(s)|\ \vee\]\[\bigvee_{l\ is\ label} \newline |\Gamma_{large}^{l}(v)\cap \tilde{T}_{large}(s)| < |\Gamma_{small}^{l}(u)\cap \tilde{T}_{small}(s)|\] is a cutting function by IND.
alpar@2
   924
\end{claim}
alpar@2
   925
The following claims can be proven similarly.
alpar@2
   926
\subsubsection{Graph isomorphism}
alpar@2
   927
\begin{claim}
alpar@2
   928
\[LabCut_{ISO}((u,v),M(s))\!:=\!\!\!\!\!\bigvee_{l\ is\ label}\!\!\!\!\!\!\!|\Gamma_{large}^{l} (v) \cap T_{large}(s)|\!\neq\!|\Gamma_{small}^{l}(u)\cap T_{small}(s)|\  \vee\]\[\bigvee_{l\ is\ label} \newline |\Gamma_{large}^{l}(v)\cap \tilde{T}_{large}(s)| \neq |\Gamma_{small}^{l}(u)\cap \tilde{T}_{small}(s)|\] is a cutting function by ISO.
alpar@2
   929
\end{claim}
alpar@2
   930
alpar@2
   931
\subsubsection{Subgraph isomorphism}
alpar@2
   932
\begin{claim}
Madarasi@7
   933
\[LabCut_{SUB}((u,v),M(s))\!:=\!\!\!\!\!\bigvee_{l\ is\ label}\!\!\!\!\!\!\!|\Gamma_{large}^{l} (v) \cap T_{large}(s)|\!<\!|\Gamma_{small}^{l}(u)\cap T_{small}(s)|\] is a cutting function by SUB.
alpar@2
   934
\end{claim}
alpar@2
   935
alpar@2
   936
alpar@2
   937
alpar@2
   938
\subsection{Implementation details}
alpar@3
   939
This section provides a detailed summary of an efficient
alpar@3
   940
implementation of VF2++.
alpar@2
   941
\subsubsection{Storing a mapping}
alpar@3
   942
After fixing an arbitrary node order ($u_0, u_1, ..,
alpar@3
   943
u_{|G_{small}|-1}$) of $G_{small}$, an array $M$ is usable to store
alpar@3
   944
the current mapping in the following way.
alpar@2
   945
\[
alpar@3
   946
 M[i] =
alpar@2
   947
  \begin{cases} 
alpar@3
   948
   v & if\ (u_i,v)\ is\ in\ the\ mapping\\ INVALID &
alpar@3
   949
   if\ no\ node\ has\ been\ mapped\ to\ u_i.
alpar@2
   950
  \end{cases}
alpar@2
   951
\]
alpar@3
   952
Where $i\in\{0,1, ..,|G_{small}|-1\}$, $v\in V_{large}$ and $INVALID$
alpar@3
   953
means "no node".
alpar@2
   954
\subsubsection{Avoiding the recurrence}
alpar@4
   955
The recursion of Algorithm~\ref{alg:VF2Pseu} can be realized
Madarasi@9
   956
as a \textit{while loop}, which has a loop counter $depth$ denoting the
Madarasi@9
   957
all-time depth of the recursion. Fixing a matching order, let $M$
Madarasi@9
   958
denote the array storing the all-time mapping. Based on Claim~\ref{claim:claimCoverFromLeft},
alpar@3
   959
$M$ is $INVALID$ from index $depth$+1 and not $INVALID$ before
Madarasi@9
   960
$depth$. $M[depth]$ changes
alpar@3
   961
while the state is being processed, but the property is held before
alpar@3
   962
both stepping back to a predecessor state and exploring a successor
alpar@3
   963
state.
alpar@2
   964
alpar@3
   965
The necessary part of the candidate set is easily maintainable or
alpar@3
   966
computable by following
alpar@4
   967
Section~\ref{candidateComputingVF2}. A much faster method
alpar@3
   968
has been designed for biological- and sparse graphs, see the next
alpar@3
   969
section for details.
alpar@2
   970
alpar@2
   971
\subsubsection{Calculating the candidates for a node}
alpar@4
   972
Being aware of Claim~\ref{claim:claimCoverFromLeft}, the
alpar@3
   973
task is not to maintain the candidate set, but to generate the
alpar@3
   974
candidate nodes in $G_{large}$ for a given node $u\in V_{small}$.  In
alpar@3
   975
case of an expanding problem type and $M$ mapping, if a node $v\in
alpar@3
   976
V_{large}$ is a potential pair of $u\in V_{small}$, then $\forall
alpar@3
   977
u'\in V_{small} : (u,u')\in
alpar@3
   978
E_{small}\ and\ u'\ is\ covered\ by\ M\ \Rightarrow (v,Pair(M,u'))\in
alpar@3
   979
E_{large}$. That is, each covered neighbour of $u$ has to be mapped to
alpar@3
   980
a covered neighbour of $v$.
alpar@2
   981
alpar@3
   982
Having said that, an algorithm running in $\Theta(deg)$ time is
alpar@3
   983
describable if there exists a covered node in the component containing
Madarasi@9
   984
$u$, and a linear one other wise.
alpar@2
   985
alpar@2
   986
alpar@2
   987
\subsubsection{Determining the node order}
alpar@3
   988
This section describes how the node order preprocessing method of
alpar@3
   989
VF2++ can efficiently be implemented.
alpar@2
   990
alpar@3
   991
For using lookup tables, the node labels are associated with the
alpar@3
   992
numbers $\{0,1,..,|K|-1\}$, where $K$ is the set of the labels. It
Madarasi@9
   993
enables $F_\mathcal{M}$ to be stored in an array. At first, the node order
alpar@3
   994
$\mathcal{M}=\emptyset$, so $F_\mathcal{M}[i]$ is the number of nodes
alpar@3
   995
in $V_{small}$ having label i, which is easy to compute in
alpar@3
   996
$\Theta(|V_{small}|)$ steps.
alpar@2
   997
Madarasi@9
   998
Representing $\mathcal{M}\subseteq V_{small}$ as an array of
Madarasi@9
   999
size $|V_{small}|$, both the computation of the BFS tree, and processing its levels by Algorithm~\ref{alg:VF2PPProcess1} can be done inplace by swapping nodes.
alpar@2
  1000
alpar@3
  1001
After a node $u$ gets to the next place of the node order,
alpar@3
  1002
$F_\mathcal{M}[lab[u]]$ has to be decreased by one, because there is
alpar@3
  1003
one less covered node in $V_{large}$ with label $lab(u)$, that is why
alpar@3
  1004
min selection sort is preferred which gives the elements from left to
alpar@4
  1005
right in descending order, see Algorithm~\ref{alg:VF2PPProcess1}.
alpar@2
  1006
alpar@2
  1007
\subsubsection{Cutting rules}
alpar@4
  1008
In Section~\ref{VF2PPCuttingRules}, the cutting rules were
alpar@3
  1009
described using the sets $T_{small}$, $T_{large}$, $\tilde T_{small}$
alpar@3
  1010
and $\tilde T_{large}$, which are dependent on the all-time mapping
alpar@3
  1011
(i.e. on the all-time state). The aim is to check the labeled cutting
alpar@3
  1012
rules of VF2++ in $\Theta(deg)$ time.
alpar@2
  1013
alpar@3
  1014
Firstly, suppose that these four sets are given in such a way, that
alpar@3
  1015
checking whether a node is in a certain set takes constant time,
alpar@3
  1016
e.g. they are given by their 0-1 characteristic vectors. Let $L$ be an
alpar@3
  1017
initially zero integer lookup table of size $|K|$. After incrementing
alpar@3
  1018
$L[lab(u')]$ for all $u'\in \Gamma_{small}(u) \cap T_{small}(s)$ and
alpar@3
  1019
decrementing $L[lab(v')]$ for all $v'\in\Gamma_{large} (v) \cap
alpar@3
  1020
T_{large}(s)$, the first part of the cutting rules is checkable in
alpar@3
  1021
$\Theta(deg)$ time by considering the proper signs of $L$. Setting $L$
alpar@3
  1022
to zero takes $\Theta(deg)$ time again, which makes it possible to use
Madarasi@9
  1023
the same table through the whole algorithm. The second part of the
alpar@3
  1024
cutting rules can be verified using the same method with $\tilde
alpar@3
  1025
T_{small}$ and $\tilde T_{large}$ instead of $T_{small}$ and
alpar@3
  1026
$T_{large}$. Thus, the overall complexity is $\Theta(deg)$.
alpar@2
  1027
alpar@3
  1028
An other integer lookup table storing the number of covered neighbours
alpar@3
  1029
of each node in $G_{large}$ gives all the information about the sets
alpar@3
  1030
$T_{large}$ and $\tilde T_{large}$, which is maintainable in
alpar@3
  1031
$\Theta(deg)$ time when a pair is added or substracted by incrementing
alpar@3
  1032
or decrementing the proper indices. A further improvement is that the
alpar@3
  1033
values of $L[lab(u')]$ in case of checking $u$ is dependent only on
alpar@3
  1034
$u$, i.e. on the size of the mapping, so for each $u\in V_{small}$ an
alpar@3
  1035
array of pairs (label, number of such labels) can be stored to skip
alpar@3
  1036
the maintaining operations. Note that these arrays are at most of size
alpar@3
  1037
$deg$. Skipping this trick, the number of covered neighbours has to be
alpar@3
  1038
stored for each node of $G_{small}$ as well to get the sets
alpar@3
  1039
$T_{small}$ and $\tilde T_{small}$.
alpar@2
  1040
alpar@3
  1041
Using similar tricks, the consistency function can be evaluated in
alpar@3
  1042
$\Theta(deg)$ steps, as well.
alpar@2
  1043
alpar@2
  1044
\section{The VF2 Plus Algorithm}
alpar@3
  1045
The VF2 Plus algorithm is a recently improved version of VF2. It was
alpar@3
  1046
compared with the state of the art algorithms in \cite{VF2Plus} and
alpar@3
  1047
has proven itself to be competitive with RI, the best algorithm on
alpar@3
  1048
biological graphs.  \\ A short summary of VF2 Plus follows, which uses
alpar@3
  1049
the notation and the conventions of the original paper.
alpar@2
  1050
alpar@2
  1051
\subsection{Ordering procedure}
alpar@3
  1052
VF2 Plus uses a sorting procedure that prefers nodes in $V_{small}$
alpar@3
  1053
with the lowest probability to find a pair in $V_{small}$ and the
alpar@3
  1054
highest number of connections with the nodes already sorted by the
alpar@3
  1055
algorithm.
alpar@2
  1056
alpar@2
  1057
\begin{definition}
alpar@3
  1058
$(u,v)$ is a \textbf{feasible pair}, if $lab(u)=lab(v)$ and
alpar@3
  1059
  $deg(u)\leq deg(v)$, where $u\in{V_{small}}$ and $ v\in{V_{large}}$.
alpar@2
  1060
\end{definition}
alpar@3
  1061
$P_{lab}(L):=$ a priori probability to find a node with label $L$ in
alpar@3
  1062
$V_{large}$
alpar@2
  1063
\newline
alpar@3
  1064
$P_{deg}(d):=$ a priori probability to find a node with degree $d$ in
alpar@3
  1065
$V_{large}$
alpar@2
  1066
\newline
alpar@3
  1067
$P(u):=P_{lab}(L)*\bigcup_{d'>d}P_{deg}(d')$\\ $M$ is the set of
alpar@3
  1068
already sorted nodes, $T$ is the set of nodes candidate to be
alpar@3
  1069
selected, and $degreeM$ of a node is the number of its neighbours in
alpar@3
  1070
$M$.
alpar@2
  1071
\begin{algorithm}
alpar@3
  1072
\algtext*{EndIf}%ne nyomtasson end if-et \algtext*{EndFor}%ne
alpar@3
  1073
nyomtasson ..  \algtext*{EndProcedure}%ne nyomtasson ..
alpar@2
  1074
\algtext*{EndWhile}
alpar@2
  1075
\caption{}\label{alg:VF2PlusPseu}
alpar@2
  1076
\begin{algorithmic}[1]
alpar@3
  1077
\Procedure{VF2 Plus order}{} \State Select the node with the lowest
alpar@3
  1078
$P$.  \If {more nodes share the same $P$} \State select the one with
alpar@3
  1079
maximum degree \EndIf \If {more nodes share the same $P$ and have the
alpar@3
  1080
  max degree} \State select the first \EndIf \State Put the selected
alpar@3
  1081
node in the set $M$. \label{alg:putIn} \State Put all its unsorted
alpar@3
  1082
neighbours in the set $T$.  \If {$M\neq V_{small}$} \State From set
alpar@3
  1083
$T$ select the node with maximum $degreeM$.  \If {more nodes have
alpar@3
  1084
  maximum $degreeM$} \State Select the one with the lowest $P$ \EndIf
alpar@3
  1085
\If {more nodes have maximum $degreeM$ and $P$} \State Select the
alpar@3
  1086
first.  \EndIf \State \textbf{goto \ref{alg:putIn}.}  \EndIf
alpar@2
  1087
\EndProcedure
alpar@2
  1088
\end{algorithmic}
alpar@2
  1089
\end{algorithm}
alpar@2
  1090
alpar@4
  1091
Using these notations, Algorithm~\ref{alg:VF2PlusPseu}
alpar@3
  1092
provides the description of the sorting procedure.
alpar@2
  1093
alpar@3
  1094
Note that $P(u)$ is not the exact probability of finding a consistent
alpar@3
  1095
pair for $u$ by choosing a node of $V_{large}$ randomly, since
alpar@3
  1096
$P_{lab}$ and $P_{deg}$ are not independent, though calculating the
alpar@3
  1097
real probability would take quadratic time, which may be reduced by
alpar@3
  1098
using fittingly lookup tables.
alpar@2
  1099
alpar@2
  1100
\section{Experimental results}
alpar@3
  1101
This section compares the performance of VF2++ and VF2 Plus. Both
alpar@3
  1102
algorithms have run faster with orders of magnitude than VF2, thus its
alpar@3
  1103
inclusion was not reasonable.
alpar@2
  1104
\subsection{Biological graphs}
alpar@3
  1105
The tests have been executed on a recent biological dataset created
alpar@3
  1106
for the International Contest on Pattern Search in Biological
Madarasi@7
  1107
Databases\cite{Content}, which has been constructed of molecule,
Madarasi@7
  1108
protein and contact map graphs extracted from the Protein Data
alpar@3
  1109
Bank\cite{ProteinDataBank}.
alpar@2
  1110
alpar@3
  1111
The molecule dataset contains small graphs with less than 100 nodes
alpar@3
  1112
and an average degree of less than 3. The protein dataset contains
alpar@3
  1113
graphs having 500-10 000 nodes and an average degree of 4, while the
alpar@3
  1114
contact map dataset contains graphs with 150-800 nodes and an average
alpar@3
  1115
degree of 20.  \\
alpar@2
  1116
alpar@3
  1117
In the following, the induced subgraph isomorphism and the graph
alpar@3
  1118
isomorphism will be examined.
alpar@2
  1119
Madarasi@7
  1120
This dataset provides graph pairs, between which all the induced subgraph isomorphisms have to be found. For run time results, please see Figure~\ref{fig:bioIND}.
Madarasi@7
  1121
Madarasi@7
  1122
In an other experiment, the nodes of each graph in the database had been
Madarasi@7
  1123
shuffled, and an isomorphism between the shuffled and the original
Madarasi@7
  1124
graph was searched. The solution times are shown on Figure~\ref{fig:bioISO}.
Madarasi@7
  1125
Madarasi@7
  1126
alpar@2
  1127
alpar@2
  1128
\begin{figure}[H]
Madarasi@7
  1129
\vspace*{-2cm}
Madarasi@7
  1130
\hspace*{-1.5cm}
Madarasi@7
  1131
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1132
\begin{figure}[H]
Madarasi@7
  1133
\begin{tikzpicture}[trim axis left, trim axis right]
Madarasi@7
  1134
\begin{axis}[title=Molecules ISO,xlabel={target size},ylabel={time (ms)},legend entries={VF2 Plus,VF2++},grid
Madarasi@7
  1135
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
Madarasi@7
  1136
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1137
  format/1000 sep = \thinspace}]
Madarasi@7
  1138
%\addplot+[only marks] table {proteinsOrig.txt};
Madarasi@7
  1139
\addplot table {Orig/moleculesIso.txt}; \addplot[mark=triangle*,mark
Madarasi@7
  1140
  size=1.8pt,color=red] table {VF2PPLabel/moleculesIso.txt};
Madarasi@7
  1141
\end{axis}
Madarasi@7
  1142
\end{tikzpicture}
Madarasi@7
  1143
\caption{In the case of molecules, there is not such a significant
Madarasi@7
  1144
  difference, but VF2++ seems to be faster as the number of nodes
Madarasi@7
  1145
  increases.}\label{fig:ISOMolecule}
Madarasi@7
  1146
\end{figure}
Madarasi@7
  1147
\end{subfigure}
Madarasi@7
  1148
\hspace*{1.5cm}
Madarasi@7
  1149
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1150
\begin{figure}[H]
Madarasi@7
  1151
\begin{tikzpicture}[trim axis left, trim axis right]
Madarasi@7
  1152
\begin{axis}[title=Contact maps ISO,xlabel={target size},ylabel={time (ms)},legend entries={VF2 Plus,VF2++},grid
Madarasi@7
  1153
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
Madarasi@7
  1154
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1155
  format/1000 sep = \thinspace}]
Madarasi@7
  1156
%\addplot+[only marks] table {proteinsOrig.txt};
Madarasi@7
  1157
\addplot table {Orig/contactMapsIso.txt}; \addplot[mark=triangle*,mark
Madarasi@7
  1158
  size=1.8pt,color=red] table {VF2PPLabel/contactMapsIso.txt};
Madarasi@7
  1159
\end{axis}
Madarasi@7
  1160
\end{tikzpicture}
Madarasi@7
  1161
\caption{The results are closer to each other on contact maps, but
Madarasi@7
  1162
  VF2++ still performs consistently better.}\label{fig:ISOContact}
Madarasi@7
  1163
\end{figure}
Madarasi@7
  1164
\end{subfigure}
Madarasi@7
  1165
alpar@2
  1166
\begin{center}
Madarasi@7
  1167
\vspace*{-0.5cm}
Madarasi@7
  1168
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1169
\begin{figure}[H]
Madarasi@7
  1170
\begin{tikzpicture}[trim axis left, trim axis right]
Madarasi@7
  1171
\begin{axis}[title=Proteins ISO,xlabel={target size},ylabel={time (ms)},legend entries={VF2 Plus,VF2++},grid
Madarasi@7
  1172
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
Madarasi@7
  1173
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1174
  format/1000 sep = \thinspace}]
Madarasi@7
  1175
%\addplot+[only marks] table {proteinsOrig.txt};
Madarasi@7
  1176
\addplot table {Orig/proteinsIso.txt}; \addplot[mark=triangle*,mark
Madarasi@7
  1177
  size=1.8pt,color=red] table {VF2PPLabel/proteinsIso.txt};
Madarasi@7
  1178
\end{axis}
Madarasi@7
  1179
\end{tikzpicture}
Madarasi@7
  1180
\caption{On protein graphs, VF2 Plus has a super linear time
Madarasi@7
  1181
  complexity, while VF2++ runs in near constant time. The difference
Madarasi@7
  1182
  is about two order of magnitude on large graphs.}\label{fig:ISOProt}
Madarasi@7
  1183
\end{figure}
Madarasi@7
  1184
\end{subfigure}
Madarasi@7
  1185
\end{center}
Madarasi@7
  1186
\vspace*{-0.6cm}
Madarasi@7
  1187
\caption{\normalsize{Graph isomomorphism on biological graphs}}\label{fig:bioISO}
Madarasi@7
  1188
\end{figure}
Madarasi@7
  1189
Madarasi@7
  1190
Madarasi@7
  1191
\begin{figure}[H]
Madarasi@7
  1192
\vspace*{-2cm}
Madarasi@7
  1193
\hspace*{-1.5cm}
Madarasi@7
  1194
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1195
\begin{figure}[H]
Madarasi@7
  1196
\begin{tikzpicture}[trim axis left, trim axis right]
Madarasi@7
  1197
\begin{axis}[title=Molecules IND,xlabel={target size},ylabel={time (ms)},legend entries={VF2 Plus,VF2++},grid
Madarasi@7
  1198
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
Madarasi@7
  1199
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1200
  format/1000 sep = \thinspace}]
Madarasi@7
  1201
%\addplot+[only marks] table {proteinsOrig.txt};
Madarasi@7
  1202
\addplot table {Orig/Molecules.32.txt}; \addplot[mark=triangle*,mark
Madarasi@7
  1203
  size=1.8pt,color=red] table {VF2PPLabel/Molecules.32.txt};
Madarasi@7
  1204
\end{axis}
Madarasi@7
  1205
\end{tikzpicture}
Madarasi@7
  1206
\caption{In the case of molecules, the algorithms have
Madarasi@7
  1207
  similar behaviour, but VF2++ is almost two times faster even on such
Madarasi@7
  1208
  small graphs.} \label{fig:INDMolecule}
Madarasi@7
  1209
\end{figure}
Madarasi@7
  1210
\end{subfigure}
Madarasi@7
  1211
\hspace*{1.5cm}
Madarasi@7
  1212
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1213
\begin{figure}[H]
Madarasi@7
  1214
\begin{tikzpicture}[trim axis left, trim axis right]
Madarasi@7
  1215
\begin{axis}[title=Contact maps IND,xlabel={target size},ylabel={time (ms)},legend entries={VF2 Plus,VF2++},grid
Madarasi@7
  1216
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
Madarasi@7
  1217
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1218
  format/1000 sep = \thinspace}]
Madarasi@7
  1219
%\addplot+[only marks] table {proteinsOrig.txt};
Madarasi@7
  1220
\addplot table {Orig/ContactMaps.128.txt};
Madarasi@7
  1221
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
Madarasi@7
  1222
        {VF2PPLabel/ContactMaps.128.txt};
Madarasi@7
  1223
\end{axis}
Madarasi@7
  1224
\end{tikzpicture}
Madarasi@7
  1225
\caption{On contact maps, VF2++ runs in near constant time, while VF2
Madarasi@7
  1226
  Plus has a near linear behaviour.} \label{fig:INDContact}
Madarasi@7
  1227
\end{figure}
Madarasi@7
  1228
\end{subfigure}
Madarasi@7
  1229
Madarasi@7
  1230
\begin{center}
Madarasi@7
  1231
\vspace*{-0.5cm}
Madarasi@7
  1232
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1233
\begin{figure}[H]
Madarasi@7
  1234
\begin{tikzpicture}[trim axis left, trim axis right]
alpar@2
  1235
  \begin{axis}[title=Proteins IND,xlabel={target size},ylabel={time (ms)},legend entries={VF2 Plus,VF2++},grid
alpar@3
  1236
  =major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1237
    west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1238
    format/1000 sep = \thinspace}] %\addplot+[only marks] table
alpar@3
  1239
    {proteinsOrig.txt}; \addplot[mark=*,mark size=1.2pt,color=blue]
alpar@3
  1240
    table {Orig/Proteins.256.txt}; \addplot[mark=triangle*,mark
alpar@3
  1241
      size=1.8pt,color=red] table {VF2PPLabel/Proteins.256.txt};
alpar@2
  1242
  \end{axis}
alpar@2
  1243
  \end{tikzpicture}
alpar@3
  1244
\caption{Both the algorithms have linear behaviour on protein
alpar@3
  1245
  graphs. VF2++ is more than 10 times faster than VF2
alpar@3
  1246
  Plus.} \label{fig:INDProt}
alpar@2
  1247
\end{figure}
Madarasi@7
  1248
\end{subfigure}
alpar@2
  1249
\end{center}
Madarasi@7
  1250
\vspace*{-0.5cm}
Madarasi@7
  1251
\caption{\normalsize{Graph isomomorphism on biological graphs}}\label{fig:bioIND}
alpar@2
  1252
\end{figure}
alpar@2
  1253
alpar@2
  1254
alpar@2
  1255
alpar@2
  1256
alpar@2
  1257
alpar@2
  1258
\subsection{Random graphs}
alpar@3
  1259
This section compares VF2++ with VF2 Plus on random graphs of a large
alpar@3
  1260
size. The node labels are uniformly distributed.  Let $\delta$ denote
alpar@3
  1261
the average degree.  For the parameters of problems solved in the
alpar@3
  1262
experiments, please see the top of each chart.
alpar@2
  1263
\subsubsection{Graph isomorphism}
alpar@3
  1264
To evaluate the efficiency of the algorithms in the case of graph
alpar@3
  1265
isomorphism, connected graphs of less than 20 000 nodes have been
alpar@3
  1266
considered. Generating a random graph and shuffling its nodes, an
Madarasi@7
  1267
isomorphism had to be found. Figure \ref{fig:randISO} shows the runtime results
alpar@4
  1268
on graph sets of various density.
alpar@2
  1269
Madarasi@7
  1270
Madarasi@7
  1271
Madarasi@7
  1272
Madarasi@12
  1273
\begin{figure}
Madarasi@7
  1274
\vspace*{-1.5cm}
Madarasi@7
  1275
\hspace*{-1.5cm}
Madarasi@7
  1276
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1277
\begin{center}
alpar@2
  1278
\begin{tikzpicture}
Madarasi@7
  1279
\begin{axis}[title={Random ISO, $\delta = 5$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1280
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1281
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1282
  format/1000 sep = \space}]
alpar@2
  1283
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1284
\addplot table {randGraph/iso/vf2pIso5_1.txt};
alpar@3
  1285
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1286
        {randGraph/iso/vf2ppIso5_1.txt};
alpar@2
  1287
\end{axis}
alpar@2
  1288
\end{tikzpicture}
alpar@2
  1289
\end{center}
Madarasi@7
  1290
\end{subfigure}
Madarasi@7
  1291
%\hspace{1cm}
Madarasi@7
  1292
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1293
\begin{center}
alpar@2
  1294
\begin{tikzpicture}
Madarasi@7
  1295
\begin{axis}[title={Random ISO, $\delta = 10$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1296
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1297
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1298
  format/1000 sep = \space}]
alpar@2
  1299
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1300
\addplot table {randGraph/iso/vf2pIso10_1.txt};
alpar@3
  1301
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1302
        {randGraph/iso/vf2ppIso10_1.txt};
alpar@2
  1303
\end{axis}
alpar@2
  1304
\end{tikzpicture}
alpar@2
  1305
\end{center}
Madarasi@7
  1306
\end{subfigure}
Madarasi@7
  1307
%%\hspace{1cm}
Madarasi@7
  1308
\hspace*{-1.5cm}
Madarasi@7
  1309
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1310
\begin{center}
alpar@2
  1311
\begin{tikzpicture}
Madarasi@7
  1312
\begin{axis}[title={Random ISO, $\delta = 15$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1313
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1314
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1315
  format/1000 sep = \space}]
alpar@2
  1316
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1317
\addplot table {randGraph/iso/vf2pIso15_1.txt};
alpar@3
  1318
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1319
        {randGraph/iso/vf2ppIso15_1.txt};
alpar@2
  1320
\end{axis}
alpar@2
  1321
\end{tikzpicture}
alpar@2
  1322
\end{center}
Madarasi@7
  1323
     \end{subfigure}
Madarasi@7
  1324
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1325
\begin{center}
alpar@2
  1326
\begin{tikzpicture}
Madarasi@7
  1327
\begin{axis}[title={Random ISO, $\delta = 35$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1328
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1329
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1330
  format/1000 sep = \space}]
alpar@2
  1331
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1332
\addplot table {randGraph/iso/vf2pIso35_1.txt};
alpar@3
  1333
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1334
        {randGraph/iso/vf2ppIso35_1.txt};
alpar@2
  1335
\end{axis}
alpar@2
  1336
\end{tikzpicture}
alpar@2
  1337
\end{center}
Madarasi@7
  1338
\end{subfigure}
Madarasi@7
  1339
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1340
\hspace*{-1.5cm}
alpar@2
  1341
\begin{tikzpicture}
Madarasi@7
  1342
\begin{axis}[title={Random ISO, $\delta = 45$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1343
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1344
  west},scaled x ticks = false,x tick label style={/pgf/number
Madarasi@7
  1345
  format/1000 sep = \space}]
alpar@2
  1346
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1347
\addplot table {randGraph/iso/vf2pIso45_1.txt};
alpar@3
  1348
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1349
        {randGraph/iso/vf2ppIso45_1.txt};
alpar@2
  1350
\end{axis}
alpar@2
  1351
\end{tikzpicture}
Madarasi@7
  1352
\end{subfigure}
Madarasi@7
  1353
\hspace*{-1.5cm}
Madarasi@7
  1354
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1355
\begin{tikzpicture}
Madarasi@7
  1356
\begin{axis}[title={Random ISO, $\delta = 100$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1357
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1358
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1359
  format/1000 sep = \thinspace}]
alpar@2
  1360
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1361
\addplot table {randGraph/iso/vf2pIso100_1.txt};
alpar@3
  1362
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1363
        {randGraph/iso/vf2ppIso100_1.txt};
alpar@2
  1364
\end{axis}
alpar@2
  1365
\end{tikzpicture}
Madarasi@7
  1366
\end{subfigure}
alpar@2
  1367
\vspace*{-0.8cm}
Madarasi@7
  1368
\caption{IND on graphs having an average degree of
Madarasi@7
  1369
  5.}\label{fig:randISO}
alpar@2
  1370
\end{figure}
alpar@2
  1371
alpar@2
  1372
Madarasi@7
  1373
Madarasi@7
  1374
Madarasi@7
  1375
Madarasi@7
  1376
Madarasi@7
  1377
Madarasi@7
  1378
Madarasi@7
  1379
Madarasi@7
  1380
alpar@3
  1381
Considering the graph isomorphism problem, VF2++ consistently
alpar@3
  1382
outperforms its rival especially on sparse graphs. The reason for the
alpar@3
  1383
slightly super linear behaviour of VF2++ on denser graphs is the
alpar@3
  1384
larger number of nodes in the BFS tree constructed in
alpar@4
  1385
Algorithm~\ref{alg:VF2PPPseu}.
alpar@2
  1386
alpar@2
  1387
\subsubsection{Induced subgraph isomorphism}
alpar@3
  1388
This section provides a comparison of VF2++ and VF2 Plus in the case
alpar@3
  1389
of induced subgraph isomorphism. In addition to the size of the large
alpar@3
  1390
graph, that of the small graph dramatically influences the hardness of
alpar@3
  1391
a given problem too, so the overall picture is provided by examining
alpar@3
  1392
small graphs of various size.
alpar@2
  1393
alpar@3
  1394
For each chart, a number $0<\rho< 1$ has been fixed and the following
alpar@3
  1395
has been executed 150 times. Generating a large graph $G_{large}$,
alpar@3
  1396
choose 10 of its induced subgraphs having $\rho\ |V_{large}|$ nodes,
alpar@3
  1397
and for all the 10 subgraphs find a mapping by using both the graph
alpar@3
  1398
matching algorithms.  The $\delta = 5, 10, 35$ and $\rho = 0.05, 0.1,
Madarasi@10
  1399
0.3, 0.6, 0.8, 0.95$ cases have been examined, see
alpar@4
  1400
Figure~\ref{fig:randIND5}, \ref{fig:randIND10} and
Madarasi@10
  1401
\ref{fig:randIND35}.
alpar@2
  1402
alpar@2
  1403
alpar@2
  1404
alpar@2
  1405
alpar@2
  1406
Madarasi@12
  1407
\begin{figure}
Madarasi@7
  1408
\vspace*{-1.5cm}
Madarasi@7
  1409
\hspace*{-1.5cm}
alpar@2
  1410
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1411
\begin{center}
alpar@2
  1412
\begin{tikzpicture}
alpar@2
  1413
\begin{axis}[title={Random IND, $\delta = 5$, $\rho = 0.05$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1414
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1415
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1416
  format/1000 sep = \space}]
alpar@2
  1417
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1418
\addplot table {randGraph/ind/vf2pInd5_0.05.txt};
alpar@3
  1419
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1420
        {randGraph/ind/vf2ppInd5_0.05.txt};
alpar@2
  1421
\end{axis}
alpar@2
  1422
\end{tikzpicture}
alpar@2
  1423
\end{center}
alpar@2
  1424
     \end{subfigure}
alpar@2
  1425
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1426
\begin{center}
alpar@2
  1427
\begin{tikzpicture}
alpar@2
  1428
\begin{axis}[title={Random IND, $\delta = 5$, $\rho = 0.1$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1429
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1430
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1431
  format/1000 sep = \space}]
alpar@2
  1432
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1433
\addplot table {randGraph/ind/vf2pInd5_0.1.txt};
alpar@3
  1434
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1435
        {randGraph/ind/vf2ppInd5_0.1.txt};
alpar@2
  1436
\end{axis}
alpar@2
  1437
\end{tikzpicture}
alpar@2
  1438
\end{center}
alpar@2
  1439
\end{subfigure}
Madarasi@7
  1440
\hspace*{-1.5cm}
alpar@2
  1441
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1442
\begin{center}
alpar@2
  1443
\begin{tikzpicture}
alpar@2
  1444
\begin{axis}[title={Random IND, $\delta = 5$, $\rho = 0.3$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1445
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1446
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1447
  format/1000 sep = \space}]
alpar@2
  1448
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1449
\addplot table {randGraph/ind/vf2pInd5_0.3.txt};
alpar@3
  1450
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1451
        {randGraph/ind/vf2ppInd5_0.3.txt};
alpar@2
  1452
\end{axis}
alpar@2
  1453
\end{tikzpicture}
alpar@2
  1454
\end{center}
alpar@2
  1455
     \end{subfigure}
alpar@2
  1456
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1457
\begin{center}
alpar@2
  1458
\begin{tikzpicture}
alpar@2
  1459
\begin{axis}[title={Random IND, $\delta = 5$, $\rho = 0.6$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1460
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1461
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1462
  format/1000 sep = \space}]
alpar@2
  1463
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1464
\addplot table {randGraph/ind/vf2pInd5_0.6.txt};
alpar@3
  1465
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1466
        {randGraph/ind/vf2ppInd5_0.6.txt};
alpar@2
  1467
\end{axis}
alpar@2
  1468
\end{tikzpicture}
alpar@2
  1469
\end{center}
alpar@2
  1470
\end{subfigure}
alpar@2
  1471
\begin{subfigure}[b]{0.55\textwidth}
Madarasi@7
  1472
\hspace*{-1.5cm}
alpar@2
  1473
\begin{tikzpicture}
alpar@2
  1474
\begin{axis}[title={Random IND, $\delta = 5$, $\rho = 0.8$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1475
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1476
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1477
  format/1000 sep = \space}]
alpar@2
  1478
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1479
\addplot table {randGraph/ind/vf2pInd5_0.8.txt};
alpar@3
  1480
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1481
        {randGraph/ind/vf2ppInd5_0.8.txt};
alpar@2
  1482
\end{axis}
alpar@2
  1483
\end{tikzpicture}
alpar@2
  1484
     \end{subfigure}
Madarasi@7
  1485
     \hspace*{-1.5cm}
alpar@2
  1486
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1487
\begin{tikzpicture}
alpar@2
  1488
\begin{axis}[title={Random IND, $\delta = 5$, $\rho = 0.95$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1489
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1490
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1491
  format/1000 sep = \thinspace}]
alpar@2
  1492
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1493
\addplot table {randGraph/ind/vf2pInd5_0.95.txt};
alpar@3
  1494
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1495
        {randGraph/ind/vf2ppInd5_0.95.txt};
alpar@2
  1496
\end{axis}
alpar@2
  1497
\end{tikzpicture}
alpar@2
  1498
\end{subfigure}
alpar@2
  1499
\vspace*{-0.8cm}
alpar@3
  1500
\caption{IND on graphs having an average degree of
alpar@3
  1501
  5.}\label{fig:randIND5}
alpar@2
  1502
\end{figure}
alpar@2
  1503
alpar@2
  1504
alpar@2
  1505
\begin{figure}[H]
Madarasi@7
  1506
\vspace*{-1.5cm}
Madarasi@7
  1507
\hspace*{-1.5cm}
alpar@2
  1508
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1509
\begin{center}
Madarasi@7
  1510
\hspace*{-0.5cm}
alpar@2
  1511
\begin{tikzpicture}
alpar@2
  1512
\begin{axis}[title={Random IND, $\delta = 10$, $\rho = 0.05$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1513
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1514
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1515
  format/1000 sep = \space}]
alpar@2
  1516
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1517
\addplot table {randGraph/ind/vf2pInd10_0.05.txt};
alpar@3
  1518
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1519
        {randGraph/ind/vf2ppInd10_0.05.txt};
alpar@2
  1520
\end{axis}
alpar@2
  1521
\end{tikzpicture}
alpar@2
  1522
\end{center}
alpar@2
  1523
     \end{subfigure}
alpar@2
  1524
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1525
\begin{center}
Madarasi@7
  1526
     \hspace*{-0.5cm}
alpar@2
  1527
\begin{tikzpicture}
alpar@2
  1528
\begin{axis}[title={Random IND, $\delta = 10$, $\rho = 0.1$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1529
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1530
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1531
  format/1000 sep = \space}]
alpar@2
  1532
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1533
\addplot table {randGraph/ind/vf2pInd10_0.1.txt};
alpar@3
  1534
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1535
        {randGraph/ind/vf2ppInd10_0.1.txt};
alpar@2
  1536
\end{axis}
alpar@2
  1537
\end{tikzpicture}
alpar@2
  1538
\end{center}
alpar@2
  1539
\end{subfigure}
Madarasi@7
  1540
\hspace*{-1.5cm}
alpar@2
  1541
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1542
\begin{center}
alpar@2
  1543
\begin{tikzpicture}
alpar@2
  1544
\begin{axis}[title={Random IND, $\delta = 10$, $\rho = 0.3$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1545
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1546
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1547
  format/1000 sep = \space}]
alpar@2
  1548
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1549
\addplot table {randGraph/ind/vf2pInd10_0.3.txt};
alpar@3
  1550
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1551
        {randGraph/ind/vf2ppInd10_0.3.txt};
alpar@2
  1552
\end{axis}
alpar@2
  1553
\end{tikzpicture}
alpar@2
  1554
\end{center}
alpar@2
  1555
     \end{subfigure}
alpar@2
  1556
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1557
\begin{center}
alpar@2
  1558
\begin{tikzpicture}
alpar@2
  1559
\begin{axis}[title={Random IND, $\delta = 10$, $\rho = 0.6$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1560
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1561
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1562
  format/1000 sep = \space}]
alpar@2
  1563
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1564
\addplot table {randGraph/ind/vf2pInd10_0.6.txt};
alpar@3
  1565
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1566
        {randGraph/ind/vf2ppInd10_0.6.txt};
alpar@2
  1567
\end{axis}
alpar@2
  1568
\end{tikzpicture}
alpar@2
  1569
\end{center}
alpar@2
  1570
\end{subfigure}
Madarasi@7
  1571
\hspace*{-1.5cm}
alpar@2
  1572
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1573
\begin{tikzpicture}
alpar@2
  1574
\begin{axis}[title={Random IND, $\delta = 10$, $\rho = 0.8$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1575
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1576
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1577
  format/1000 sep = \space}]
alpar@2
  1578
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1579
\addplot table {randGraph/ind/vf2pInd10_0.8.txt};
alpar@3
  1580
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1581
        {randGraph/ind/vf2ppInd10_0.8.txt};
alpar@2
  1582
\end{axis}
alpar@2
  1583
\end{tikzpicture}
alpar@2
  1584
     \end{subfigure}
alpar@2
  1585
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1586
\begin{tikzpicture}
alpar@2
  1587
\begin{axis}[title={Random IND, $\delta = 10$, $\rho = 0.95$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1588
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1589
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1590
  format/1000 sep = \thinspace}]
alpar@2
  1591
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1592
\addplot table {randGraph/ind/vf2pInd10_0.95.txt};
alpar@3
  1593
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1594
        {randGraph/ind/vf2ppInd10_0.95.txt};
alpar@2
  1595
\end{axis}
alpar@2
  1596
\end{tikzpicture}
alpar@2
  1597
\end{subfigure}
alpar@2
  1598
\vspace*{-0.8cm}
alpar@3
  1599
\caption{IND on graphs having an average degree of
alpar@3
  1600
  10.}\label{fig:randIND10}
alpar@2
  1601
\end{figure}
alpar@2
  1602
alpar@2
  1603
alpar@2
  1604
alpar@2
  1605
\begin{figure}[H]
Madarasi@7
  1606
\vspace*{-1.5cm}
Madarasi@7
  1607
\hspace*{-1.5cm}
alpar@2
  1608
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1609
\begin{center}
alpar@2
  1610
\begin{tikzpicture}
alpar@2
  1611
\begin{axis}[title={Random IND, $\delta = 35$, $\rho = 0.05$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1612
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1613
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1614
  format/1000 sep = \space}]
alpar@2
  1615
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1616
\addplot table {randGraph/ind/vf2pInd35_0.05.txt};
alpar@3
  1617
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1618
        {randGraph/ind/vf2ppInd35_0.05.txt};
alpar@2
  1619
\end{axis}
alpar@2
  1620
\end{tikzpicture}
alpar@2
  1621
\end{center}
alpar@2
  1622
     \end{subfigure}
alpar@2
  1623
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1624
\begin{center}
alpar@2
  1625
\begin{tikzpicture}
alpar@2
  1626
\begin{axis}[title={Random IND, $\delta = 35$, $\rho = 0.1$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1627
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1628
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1629
  format/1000 sep = \space}]
alpar@2
  1630
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1631
\addplot table {randGraph/ind/vf2pInd35_0.1.txt};
alpar@3
  1632
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1633
        {randGraph/ind/vf2ppInd35_0.1.txt};
alpar@2
  1634
\end{axis}
alpar@2
  1635
\end{tikzpicture}
alpar@2
  1636
\end{center}
alpar@2
  1637
\end{subfigure}
Madarasi@7
  1638
\hspace*{-1.5cm}
alpar@2
  1639
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1640
\begin{center}
alpar@2
  1641
\begin{tikzpicture}
alpar@2
  1642
\begin{axis}[title={Random IND, $\delta = 35$, $\rho = 0.3$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1643
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1644
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1645
  format/1000 sep = \space}]
alpar@2
  1646
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1647
\addplot table {randGraph/ind/vf2pInd35_0.3.txt};
alpar@3
  1648
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1649
        {randGraph/ind/vf2ppInd35_0.3.txt};
alpar@2
  1650
\end{axis}
alpar@2
  1651
\end{tikzpicture}
alpar@2
  1652
\end{center}
alpar@2
  1653
     \end{subfigure}
alpar@2
  1654
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1655
\begin{center}
alpar@2
  1656
\begin{tikzpicture}
alpar@2
  1657
\begin{axis}[title={Random IND, $\delta = 35$, $\rho = 0.6$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1658
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1659
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1660
  format/1000 sep = \space}]
alpar@2
  1661
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1662
\addplot table {randGraph/ind/vf2pInd35_0.6.txt};
alpar@3
  1663
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1664
        {randGraph/ind/vf2ppInd35_0.6.txt};
alpar@2
  1665
\end{axis}
alpar@2
  1666
\end{tikzpicture}
alpar@2
  1667
\end{center}
alpar@2
  1668
\end{subfigure}
Madarasi@7
  1669
\hspace*{-1.5cm}
alpar@2
  1670
\begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1671
\begin{tikzpicture}
alpar@2
  1672
\begin{axis}[title={Random IND, $\delta = 35$, $\rho = 0.8$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1673
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1674
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1675
  format/1000 sep = \space}]
alpar@2
  1676
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1677
\addplot table {randGraph/ind/vf2pInd35_0.8.txt};
alpar@3
  1678
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1679
        {randGraph/ind/vf2ppInd35_0.8.txt};
alpar@2
  1680
\end{axis}
alpar@2
  1681
\end{tikzpicture}
alpar@2
  1682
     \end{subfigure}
alpar@2
  1683
     \begin{subfigure}[b]{0.55\textwidth}
alpar@2
  1684
\begin{tikzpicture}
alpar@2
  1685
\begin{axis}[title={Random IND, $\delta = 35$, $\rho = 0.95$},width=7.2cm,height=6cm,xlabel={target size},ylabel={time (ms)},ylabel near ticks,legend entries={VF2 Plus,VF2++},grid
alpar@3
  1686
=major,mark size=1.2pt, legend style={at={(0,1)},anchor=north
alpar@3
  1687
  west},scaled x ticks = false,x tick label style={/pgf/number
alpar@3
  1688
  format/1000 sep = \thinspace}]
alpar@2
  1689
%\addplot+[only marks] table {proteinsOrig.txt};
alpar@2
  1690
\addplot table {randGraph/ind/vf2pInd35_0.95.txt};
alpar@3
  1691
\addplot[mark=triangle*,mark size=1.8pt,color=red] table
alpar@3
  1692
        {randGraph/ind/vf2ppInd35_0.95.txt};
alpar@2
  1693
\end{axis}
alpar@2
  1694
\end{tikzpicture}
alpar@2
  1695
\end{subfigure}
alpar@2
  1696
\vspace*{-0.8cm}
alpar@3
  1697
\caption{IND on graphs having an average degree of
alpar@3
  1698
  35.}\label{fig:randIND35}
alpar@2
  1699
\end{figure}
alpar@2
  1700
alpar@2
  1701
alpar@3
  1702
Based on these experiments, VF2++ is faster than VF2 Plus and able to
alpar@3
  1703
handle really large graphs in milliseconds. Note that when $IND$ was
alpar@3
  1704
considered and the small graphs had proportionally few nodes ($\rho =
alpar@3
  1705
0.05$, or $\rho = 0.1$), then VF2 Plus produced some inefficient node
alpar@4
  1706
orders (e.g. see the $\delta=10$ case on
alpar@4
  1707
Figure~\ref{fig:randIND10}). If these examples had been excluded, the
alpar@3
  1708
charts would have seemed to be similar to the other ones.
alpar@3
  1709
Unsurprisingly, as denser graphs are considered, both VF2++ and VF2
alpar@3
  1710
Plus slow slightly down, but remain practically usable even on graphs
alpar@3
  1711
having 10 000 nodes.
alpar@2
  1712
alpar@2
  1713
alpar@2
  1714
alpar@2
  1715
alpar@3
  1716
alpar@2
  1717
\section{Conclusion}
alpar@3
  1718
In this paper, after providing a short summary of the recent
alpar@3
  1719
algorithms, a new graph matching algorithm based on VF2, called VF2++,
alpar@3
  1720
has been presented and analyzed from a practical viewpoint.
alpar@2
  1721
alpar@3
  1722
Recognizing the importance of the node order and determining an
alpar@3
  1723
efficient one, VF2++ is able to match graphs of thousands of nodes in
alpar@3
  1724
near practically linear time including preprocessing. In addition to
alpar@3
  1725
the proper order, VF2++ uses more efficient consistency and cutting
alpar@3
  1726
rules which are easy to compute and make the algorithm able to prune
alpar@3
  1727
most of the unfruitful branches without going astray.
alpar@2
  1728
alpar@3
  1729
In order to show the efficiency of the new method, it has been
alpar@3
  1730
compared to VF2 Plus, which is the best concurrent algorithm based on
alpar@3
  1731
\cite{VF2Plus}.
alpar@2
  1732
alpar@3
  1733
The experiments show that VF2++ consistently outperforms VF2 Plus on
alpar@3
  1734
biological graphs. It seems to be asymptotically faster on protein and
alpar@3
  1735
on contact map graphs in the case of induced subgraph isomorphism,
alpar@3
  1736
while in the case of graph isomorphism, it has definitely better
alpar@3
  1737
asymptotic behaviour on protein graphs.
alpar@2
  1738
alpar@3
  1739
Regarding random sparse graphs, not only has VF2++ proved itself to be
alpar@3
  1740
faster than VF2 Plus, but it has a practically linear behaviour both
alpar@3
  1741
in the case of induced subgraph- and graph isomorphism, as well.
alpar@2
  1742
alpar@2
  1743
alpar@0
  1744
alpar@0
  1745
%% The Appendices part is started with the command \appendix;
alpar@0
  1746
%% appendix sections are then done as normal sections
alpar@0
  1747
%% \appendix
alpar@0
  1748
alpar@0
  1749
%% \section{}
alpar@0
  1750
%% \label{}
alpar@0
  1751
alpar@0
  1752
%% If you have bibdatabase file and want bibtex to generate the
alpar@0
  1753
%% bibitems, please use
alpar@0
  1754
%%
alpar@3
  1755
\bibliographystyle{elsarticle-num} \bibliography{bibliography}
alpar@0
  1756
alpar@0
  1757
%% else use the following coding to input the bibitems directly in the
alpar@0
  1758
%% TeX file.
alpar@0
  1759
alpar@2
  1760
%% \begin{thebibliography}{00}
alpar@0
  1761
alpar@2
  1762
%% %% \bibitem{label}
alpar@2
  1763
%% %% Text of bibliographic item
alpar@0
  1764
alpar@2
  1765
%% \bibitem{}
alpar@0
  1766
alpar@2
  1767
%% \end{thebibliography}
alpar@2
  1768
alpar@0
  1769
\end{document}
alpar@0
  1770
\endinput
alpar@0
  1771
%%
alpar@0
  1772
%% End of file `elsarticle-template-num.tex'.