Thanks. I think my verb "wrapb" _is_ doing what you want, even though
it doesn't get your answer of 5945 tree-paths for
10 graph2 wrap 0
I've just seen your later posting.
Sorry about 1 1$y - I agree, but had thought you only wanted a single
starting node.
You then say
"
But this is a problem for me:
from =. {:"1 p NB. anodes of current path-ends
here, you assume that paths do not branch, and I explicitly want to
allow branches.
"
Yes - that's your problem with my "wrapa", but I think "wrapb" does
what you want, where every node in every row is treated as a potential
anode.
You close with
"
but hypothetically speaking I could get similar performance
characteristics by using a sparse array for the graph?
"
Maybe sparse matrices will perform similarly well/badly... Running wrap
on $.graph yields a non-sparse result!
I'd drafted the following comments before your latest mail.
I was getting the same answers (after appropriate re-labelling of the
different outputs) from your wrap and my wrapb for graph2 starting from
node 0 for N=2,3,4,5,6,7.
Thereafter (for N>7) I couldn't be bothered to wait for wrap to terminate!
wrapb reports 72258 paths for N=10, origin = 0.
HOWEVER - wrapb runs out of memory with my 32-bit OS for N=11, so N=100
presents a considerable poser even for this method.
The following verb (wrapc) is a bit leaner than wrapb but still
encounters memory problems at N=11!
I expect some lines will wrap!
wrapc=: 1 : 0
:
g =. 0, > >:@I.each <"1 m NB. unboxed list of bnodes for each
anode, with 0 as filler, all offset by 1
p =. 0,.,.y+1 NB. initial path matrix; prepended 0
helps remove phantom zero bnodes
N =. x
while. N =.<: N do.
to =. p-.~"1~."1 ,/"2 p{g NB. bnodes for each anode,
excluding those already in a row (part path)
nto =. +/"1 to>0 NB. count number of new bnodes for
each row
p =. nto#p NB. expand rows of path matrix
p =. /:~"1 p,. 0-.~,to NB. append new bnodes and sort -
MEMORY PROBLEMS ARISE HERE!
p =. ~.p NB. remove repeats
end.
<:}."1 p
)
These methods benefit from using a rectangular structure for the
tree/paths. Evidently there is a lot of redundancy and some memory
improvement would ensue from a tree-structure - eg 4 graph wrap 0 could
collapse to something like
0
+
13
---------
14 19
+ +
+ ----------
10 8 10 12 18
but the processing would be quite a bit more complicated...
Even my wrapa, which yields non-branching paths, runs out of steam
around N=20, even after a bit of tweaking which I won't bother you
with here.
Mike
On 15/02/2013 1:17 PM, Raul Miller wrote:
I'll have to take some time to read your code (there's a lot of it).
But perhaps this can illustrate why I initially called them "paths"
(though they can branch):
Here's a numeric representation of the connection graph. First column
is index, second column represents what that node connects to:
(,.~ <"0@i.&#) <@I. graph
+--+----------+
|0 |13 |
+--+----------+
|1 |9 10 |
+--+----------+
|2 |17 |
+--+----------+
|3 |13 16 |
+--+----------+
|4 |8 9 12 |
+--+----------+
|5 |6 14 |
+--+----------+
|6 |1 4 8 |
+--+----------+
|7 |6 14 19 |
+--+----------+
|8 |3 |
+--+----------+
|9 |6 |
+--+----------+
|10|14 |
+--+----------+
|11|0 10 |
+--+----------+
|12|14 15 |
+--+----------+
|13|10 19 |
+--+----------+
|14|13 19 |
+--+----------+
|15|12 14 |
+--+----------+
|16|5 14 |
+--+----------+
|17|4 13 15 19|
+--+----------+
|18|10 13 |
+--+----------+
|19|0 8 12 18 |
+--+----------+
Here's successively longer "paths" on this graph, starting from from node 0:
I. 1 graph wrap 0
0
I. 2 graph wrap 0
0 13
I. 3 graph wrap 0
0 10 13
0 13 19
I. 4 graph wrap 0
0 10 13 14
0 10 13 19
0 8 13 19
0 12 13 19
0 13 18 19
In other words, even though I do not actually care about what order
the nodes have been visited, I know that every potentially branching
path with N nodes can be reached from some "path" with N-1 nodes by
visiting one additional unconnected node from a node that was
connected on the N-1 "path". Alternatively, if you want to think
about potentially branching path's "length" there's N-1 connections
used in a path with N nodes.
Does this help think about the problem?
And, I appreciate you for taking the time, despite my failures to be
adequately descriptive.
Thanks,
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm