<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/168883</link>
    <title>MATLAB Central Newsreader - Graph Problem - Finding all sets of nodes forming complete sub-graphs</title>
    <description>Feed for thread: Graph Problem - Finding all sets of nodes forming complete sub-graphs</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2008 by The MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>The MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Wed, 07 May 2008 19:20:14 -0400</pubDate>
      <title>Graph Problem - Finding all sets of nodes forming complete sub-graphs</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/168883#430889</link>
      <author>Ahmad </author>
      <description>Hi there,&lt;br&gt;
&lt;br&gt;
I want to find all the sets of nodes in a graph which have&lt;br&gt;
edges between all the nodes in the set....in other words I&lt;br&gt;
want to find all the complete sub-graphs in an&lt;br&gt;
un-directional graph: e.g.&lt;br&gt;
&lt;br&gt;
If I have this upper-triangular graph (un-directed graph)&lt;br&gt;
where each&lt;br&gt;
edge is denoted by a 1 (0 is no edge) ... e.g. C is&lt;br&gt;
connected to D:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A    B    C    D    E    F&lt;br&gt;
A   X    1    1    0    0    0&lt;br&gt;
B   X    X    1    0    0    0&lt;br&gt;
C   X    X    X    1    0    1&lt;br&gt;
D   X    X    X    X    0    1&lt;br&gt;
E   X    X    X    X    X    0&lt;br&gt;
F   X    X    X    X    X    X&lt;br&gt;
&lt;br&gt;
If I give the algo this matrix, it should return me two&lt;br&gt;
answer sets -&amp;gt; (A,B,C) and (C,D,F).&lt;br&gt;
&lt;br&gt;
Am I looking for finding cliques? If so what is the fastest&lt;br&gt;
way known to compute these quickly? Anybody implemented this&lt;br&gt;
on Matlab? What is the most standard easiest way to compute&lt;br&gt;
these sets. I have heard cliques are 3-SAT (NP complete)?&lt;br&gt;
&lt;br&gt;
Please help!!&lt;br&gt;
&lt;br&gt;
Thanks&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 08 May 2008 01:42:02 -0400</pubDate>
      <title>Re: Graph Problem - Finding all sets of nodes forming complete sub-graphs</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/168883#430935</link>
      <author>helper </author>
      <description>"Ahmad " &amp;lt;ahmad.humyn@gmail.com&amp;gt; wrote in message &lt;br&gt;
&amp;lt;fvsvde$sb7$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; Hi there,&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I want to find all the sets of nodes in a graph which have&lt;br&gt;
&amp;gt; edges between all the nodes in the set....in other words I&lt;br&gt;
&amp;gt; want to find all the complete sub-graphs in an&lt;br&gt;
&amp;gt; un-directional graph: e.g.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; If I have this upper-triangular graph (un-directed graph)&lt;br&gt;
&amp;gt; where each&lt;br&gt;
&amp;gt; edge is denoted by a 1 (0 is no edge) ... e.g. C is&lt;br&gt;
&amp;gt; connected to D:&lt;br&gt;
&amp;gt;     A    B    C    D    E    F&lt;br&gt;
&amp;gt; A   X    1    1    0    0    0&lt;br&gt;
&amp;gt; B   X    X    1    0    0    0&lt;br&gt;
&amp;gt; C   X    X    X    1    0    1&lt;br&gt;
&amp;gt; D   X    X    X    X    0    1&lt;br&gt;
&amp;gt; E   X    X    X    X    X    0&lt;br&gt;
&amp;gt; F   X    X    X    X    X    X&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; If I give the algo this matrix, it should return me two&lt;br&gt;
&amp;gt; answer sets -&amp;gt; (A,B,C) and (C,D,F).&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Am I looking for finding cliques? If so what is the &lt;br&gt;
fastest&lt;br&gt;
&amp;gt; way known to compute these quickly? Anybody implemented &lt;br&gt;
this&lt;br&gt;
&amp;gt; on Matlab? What is the most standard easiest way to &lt;br&gt;
compute&lt;br&gt;
&amp;gt; these sets. I have heard cliques are 3-SAT (NP complete)?&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Please help!!&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Thanks&lt;br&gt;
&lt;br&gt;
I've played with a couple methods for accomplishing this.  &lt;br&gt;
Here is a simple reliable one using recursion.  I don't &lt;br&gt;
know if these are called "cliques", but thats a word you &lt;br&gt;
mentioned so thats what I called the function.  &lt;br&gt;
&lt;br&gt;
There are a few ways to clean this up, but I'm just giving &lt;br&gt;
you what I got at this point.  I might clean this up and &lt;br&gt;
post it and/or create a better method if one of my other &lt;br&gt;
methods works out.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
function out = clique(A)&lt;br&gt;
&lt;br&gt;
[i j] = find(A(:,1:end-1));&lt;br&gt;
for n = 1:length(i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;recurse([i(n) j(n)])&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;function recurse(p)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPts = length(p) + 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;q = find(all(A(p,max(p)+1:end),1))+max(p);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ~isempty(q) &amp;&amp;  length(out)&amp;lt;nPts-2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out{nPts-2} = zeros(0,nPts);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for m = 1:length(q)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out{nPts-2}(end+1,1:nPts) = [p q(m)];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recurse([p q(m)])&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&lt;br&gt;
end&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 08 May 2008 11:40:17 -0400</pubDate>
      <title>Re: Graph Problem - Finding all sets of nodes forming complete sub-graphs</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/168883#431018</link>
      <author>helper </author>
      <description>"helper " &amp;lt;spamless@nospam.com&amp;gt; wrote in message &amp;lt;fvtlpa$sd9&lt;br&gt;
$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; "Ahmad " &amp;lt;ahmad.humyn@gmail.com&amp;gt; wrote in message &lt;br&gt;
&amp;gt; &amp;lt;fvsvde$sb7$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt; Hi there,&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; I want to find all the sets of nodes in a graph which &lt;br&gt;
have&lt;br&gt;
&amp;gt; &amp;gt; edges between all the nodes in the set....in other &lt;br&gt;
words I&lt;br&gt;
&amp;gt; &amp;gt; want to find all the complete sub-graphs in an&lt;br&gt;
&amp;gt; &amp;gt; un-directional graph: e.g.&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; If I have this upper-triangular graph (un-directed &lt;br&gt;
graph)&lt;br&gt;
&amp;gt; &amp;gt; where each&lt;br&gt;
&amp;gt; &amp;gt; edge is denoted by a 1 (0 is no edge) ... e.g. C is&lt;br&gt;
&amp;gt; &amp;gt; connected to D:&lt;br&gt;
&amp;gt; &amp;gt;     A    B    C    D    E    F&lt;br&gt;
&amp;gt; &amp;gt; A   X    1    1    0    0    0&lt;br&gt;
&amp;gt; &amp;gt; B   X    X    1    0    0    0&lt;br&gt;
&amp;gt; &amp;gt; C   X    X    X    1    0    1&lt;br&gt;
&amp;gt; &amp;gt; D   X    X    X    X    0    1&lt;br&gt;
&amp;gt; &amp;gt; E   X    X    X    X    X    0&lt;br&gt;
&amp;gt; &amp;gt; F   X    X    X    X    X    X&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; If I give the algo this matrix, it should return me two&lt;br&gt;
&amp;gt; &amp;gt; answer sets -&amp;gt; (A,B,C) and (C,D,F).&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; Am I looking for finding cliques? If so what is the &lt;br&gt;
&amp;gt; fastest&lt;br&gt;
&amp;gt; &amp;gt; way known to compute these quickly? Anybody implemented &lt;br&gt;
&amp;gt; this&lt;br&gt;
&amp;gt; &amp;gt; on Matlab? What is the most standard easiest way to &lt;br&gt;
&amp;gt; compute&lt;br&gt;
&amp;gt; &amp;gt; these sets. I have heard cliques are 3-SAT (NP &lt;br&gt;
complete)?&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; Please help!!&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; Thanks&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I've played with a couple methods for accomplishing &lt;br&gt;
this.  &lt;br&gt;
&amp;gt; Here is a simple reliable one using recursion.  I don't &lt;br&gt;
&amp;gt; know if these are called "cliques", but thats a word you &lt;br&gt;
&amp;gt; mentioned so thats what I called the function.  &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; There are a few ways to clean this up, but I'm just &lt;br&gt;
giving &lt;br&gt;
&amp;gt; you what I got at this point.  I might clean this up and &lt;br&gt;
&amp;gt; post it and/or create a better method if one of my other &lt;br&gt;
&amp;gt; methods works out.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; function out = clique(A)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; [i j] = find(A(:,1:end-1));&lt;br&gt;
&amp;gt; for n = 1:length(i)&lt;br&gt;
&amp;gt;   recurse([i(n) j(n)])&lt;br&gt;
&amp;gt; end&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;   function recurse(p)&lt;br&gt;
&amp;gt;     nPts = length(p) + 1;&lt;br&gt;
&amp;gt;     q = find(all(A(p,max(p)+1:end),1))+max(p);&lt;br&gt;
&amp;gt;     if ~isempty(q) &amp;&amp;  length(out)&amp;lt;nPts-2&lt;br&gt;
&amp;gt;       out{nPts-2} = zeros(0,nPts);&lt;br&gt;
&amp;gt;     end&lt;br&gt;
&amp;gt;     for m = 1:length(q)&lt;br&gt;
&amp;gt;       out{nPts-2}(end+1,1:nPts) = [p q(m)];&lt;br&gt;
&amp;gt;       recurse([p q(m)])&lt;br&gt;
&amp;gt;     end&lt;br&gt;
&amp;gt;   end&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; end&lt;br&gt;
&lt;br&gt;
I accidentally deleted the first line of code.  It should &lt;br&gt;
be:&lt;br&gt;
&lt;br&gt;
function out = clique(A)&lt;br&gt;
out = {};&lt;br&gt;
...&lt;br&gt;
&lt;br&gt;
Also, any occurrance of max(p) should simply be p(end)&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 08 May 2008 15:08:04 -0400</pubDate>
      <title>Re: Graph Problem - Finding all sets of nodes forming complete sub-graphs</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/168883#431067</link>
      <author>Ahmad </author>
      <description>Thanks sir!&lt;br&gt;
&lt;br&gt;
will just try it out :)&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
"helper " &amp;lt;spamless@nospam.com&amp;gt; wrote in message&lt;br&gt;
&amp;lt;fvuor1$sse$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; "helper " &amp;lt;spamless@nospam.com&amp;gt; wrote in message &amp;lt;fvtlpa$sd9&lt;br&gt;
&amp;gt; $1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt; "Ahmad " &amp;lt;ahmad.humyn@gmail.com&amp;gt; wrote in message &lt;br&gt;
&amp;gt; &amp;gt; &amp;lt;fvsvde$sb7$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; Hi there,&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; I want to find all the sets of nodes in a graph which &lt;br&gt;
&amp;gt; have&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; edges between all the nodes in the set....in other &lt;br&gt;
&amp;gt; words I&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; want to find all the complete sub-graphs in an&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; un-directional graph: e.g.&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; If I have this upper-triangular graph (un-directed &lt;br&gt;
&amp;gt; graph)&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; where each&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; edge is denoted by a 1 (0 is no edge) ... e.g. C is&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; connected to D:&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt;     A    B    C    D    E    F&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; A   X    1    1    0    0    0&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; B   X    X    1    0    0    0&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; C   X    X    X    1    0    1&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; D   X    X    X    X    0    1&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; E   X    X    X    X    X    0&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; F   X    X    X    X    X    X&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; If I give the algo this matrix, it should return me two&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; answer sets -&amp;gt; (A,B,C) and (C,D,F).&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; Am I looking for finding cliques? If so what is the &lt;br&gt;
&amp;gt; &amp;gt; fastest&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; way known to compute these quickly? Anybody implemented &lt;br&gt;
&amp;gt; &amp;gt; this&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; on Matlab? What is the most standard easiest way to &lt;br&gt;
&amp;gt; &amp;gt; compute&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; these sets. I have heard cliques are 3-SAT (NP &lt;br&gt;
&amp;gt; complete)?&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; Please help!!&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; Thanks&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; I've played with a couple methods for accomplishing &lt;br&gt;
&amp;gt; this.  &lt;br&gt;
&amp;gt; &amp;gt; Here is a simple reliable one using recursion.  I don't &lt;br&gt;
&amp;gt; &amp;gt; know if these are called "cliques", but thats a word you &lt;br&gt;
&amp;gt; &amp;gt; mentioned so thats what I called the function.  &lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; There are a few ways to clean this up, but I'm just &lt;br&gt;
&amp;gt; giving &lt;br&gt;
&amp;gt; &amp;gt; you what I got at this point.  I might clean this up and &lt;br&gt;
&amp;gt; &amp;gt; post it and/or create a better method if one of my other &lt;br&gt;
&amp;gt; &amp;gt; methods works out.&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; function out = clique(A)&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; [i j] = find(A(:,1:end-1));&lt;br&gt;
&amp;gt; &amp;gt; for n = 1:length(i)&lt;br&gt;
&amp;gt; &amp;gt;   recurse([i(n) j(n)])&lt;br&gt;
&amp;gt; &amp;gt; end&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt;   function recurse(p)&lt;br&gt;
&amp;gt; &amp;gt;     nPts = length(p) + 1;&lt;br&gt;
&amp;gt; &amp;gt;     q = find(all(A(p,max(p)+1:end),1))+max(p);&lt;br&gt;
&amp;gt; &amp;gt;     if ~isempty(q) &amp;&amp;  length(out)&amp;lt;nPts-2&lt;br&gt;
&amp;gt; &amp;gt;       out{nPts-2} = zeros(0,nPts);&lt;br&gt;
&amp;gt; &amp;gt;     end&lt;br&gt;
&amp;gt; &amp;gt;     for m = 1:length(q)&lt;br&gt;
&amp;gt; &amp;gt;       out{nPts-2}(end+1,1:nPts) = [p q(m)];&lt;br&gt;
&amp;gt; &amp;gt;       recurse([p q(m)])&lt;br&gt;
&amp;gt; &amp;gt;     end&lt;br&gt;
&amp;gt; &amp;gt;   end&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; end&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I accidentally deleted the first line of code.  It should &lt;br&gt;
&amp;gt; be:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; function out = clique(A)&lt;br&gt;
&amp;gt; out = {};&lt;br&gt;
&amp;gt; ...&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Also, any occurrance of max(p) should simply be p(end)&lt;br&gt;
&lt;br&gt;
</description>
    </item>
  </channel>
</rss>
