wiki:soc/2007/UserFriendlyGraphNewAlgorithms

Version 2 (modified by Andrew Sutton, 15 years ago) ( diff )

--

New Algorithms

I haven't given a lot of thought to these since the semester just ended. However, I am starting to consider various type requirements for the algorithms and have spent some time playing with conceptg++. I did notice however, that there is a ticket already exists for finding cliques within a graph (#693) - even better, with links to source code. It might be worth pointing out, that the Bron and Kerbosch algorithm is written for a Boolean matrix so interpreting it for an adjacency list is a bit of a chore. I haven't actually read the other algorithm yet, hopefully it's promising.

(Jeremy: btw, there is a matrix-as-graph adaptor in the BGL, and it would be straightforward to provide a graph-as-matrix adaptor.)

(Andrew: True enough... I was just looking for a graph-as-matrix adpater for my rewrite of the Kevin Bacon example. Apparently, there's a little extra work to find an edge given a couple of vertices).

Various Concept Notes

On a side note, I started codifying the Boost.Graph graph concepts into a concepts header just to see if I could make it work - I haven't succeeded yet. Still, it's a good excercise and makes you think about concept hierarchies, nested requirements and the like. Also, i don't like the keyword concept_map. Not the idea itself - the keyword. If I'm not mistaken, this keyword replaces model from earlier proposals. Alas...

(Jeremy: very cool! Yes, the concept_map keyword royally sucks. It turned out that model was already used in tons of C++ code, so we'd break that code if we turned model into a keyword.)

(Andrew: I was wondering about that... what about the word binding or something similar. Conceptually, it seems to match since you're "binding" additional code onto an exsiting type so that it models a concept. The only downside might be that it overloads the UML terminology for template instantiation. Maybe a syntactic trick like template specialization.)

Since I've been codigying graph concepts, I should point out that IncidenceGraph and EdgeListGraph both define source() and target() methods, so they're a little redundant. I think it would be appropriate to remove those methods from the requirements of EdgeListGraph since they don't really have anything to do with the listing or enumerating of edges. Just a thought...

(Jeremy: actually, source() and target() are pretty important to that concept. It would be better to refactor them into a common base concept.)

(Andrew: Yeah, I figured that out a couple hours later. A slight refactoring might be in order.)

Note: See TracWiki for help on using the wiki.