Thanks. I would be interested in any one maximal clique; it doesn't necessarily matter which one. -Chris
On Fri, May 3, 2013 at 1:43 PM, Raul Miller <[email protected]> wrote: > I am finding this hard to reason about. > > One issue is the sheer arbitrariness of the result. It's "a maximal > clique". It's not "all maximal cliques". It's not a maximal clique > which is in some way notable except that it's a particular maximal > clique which just happens to be convenient to express using a > particular notation. > > So I'm having a hard time reasoning about what makes this particular > maximal clique notable, and why I should expect it to be convenient to > express using different notation. > > For reference, though, here's another explicit verb which I believe > finds a different maximal clique: > > g=: 3 :0 > */>({ <: ])&.>/(]&.>@i.@#,<) y > ) > > The ({ <: ]) part corresponds to the inside of the loop. > > If you wanted a tacit verb, use 13 :0 instead of 3 :0 in the definition of > g. > > I do not know if this helps. > > -- > Raul > > On Fri, May 3, 2013 at 3:22 PM, Christopher Rosin <[email protected]> > wrote: > > Hi all. Reading this list has been very useful as I've been learning J. > > > > I'd like to ask for help in finding a simple tacit way to express f > below, > > or at least an appropriate commonly-used tacit J idiom. > > > > Say s is a symmetric boolean matrix with 1's on the diagonal, and define: > > f =: 3 : 0 > > for_k. i.#y do. y =. (<:~ k&{) y end. > > */ y > > ) > > > > e.g. > > ] s =: ((= |:) (?. 10 10 $ 2)) > > 1 0 0 0 1 1 0 1 0 0 > > 0 1 0 0 0 1 1 1 1 1 > > 0 0 1 0 1 1 0 0 0 0 > > 0 0 0 1 1 1 1 1 1 0 > > 1 0 1 1 1 0 0 1 1 1 > > 1 1 1 1 0 1 1 0 1 0 > > 0 1 0 1 0 1 1 0 1 0 > > 1 1 0 1 1 0 0 1 0 1 > > 0 1 0 1 1 1 1 0 1 1 > > 0 1 0 0 1 0 0 1 1 1 > > f s > > 1 0 0 0 1 0 0 1 0 0 > > > > One way to describe f is: given undirected graph s it finds a maximal > > clique: > > http://mathworld.wolfram.com/MaximalClique.html > > (maximal clique, not maximum clique... which would be NP-hard) > > The 1's in (f s) mark a clique of nodes linked by edges (marked by 1's > in s) > > and this clique is maximal in that nothing can be added to it. > > > > One tacit approach is to translate the for loop using a boxed list of > > indices: > > g =: [: */@>@((]<:~{)&.>/) <"0@|.@i.@# , < > > g s > > 1 0 0 0 1 0 0 1 0 0 > > > > Another is to rotate repeatedly so the head is always next to be > processed: > > h =: */@(([:(1 1)&|.]<:~{.)^:#) > > h s > > 1 0 0 0 1 0 0 1 0 0 > > > > But these seem somewhat awkward to me. > > The explicit function f has just two verbs inside the body of the for > loop, > > so I was hoping to find a tacit solution that also needed at most two > verbs > > inside the / or ^: or whatever else is used to replace the loop. > > > > Any ideas? > > Or maybe there is an entirely different approach, more suited to tacit J? > > > > Thanks. > > -Chris > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
