Help with an algorithm wanted
Russell E. Owen
rowen at cesmail.net
Wed Jun 26 16:02:02 EDT 2002
I'd like some help solving a problem in Python.
The basic idea is I have an item of data that can be represented in any
of four ways: A,B,C and D. I also have conversion functions between
certain pairs of representations, such that there's always a path
between any two data representations. In this case suppose I know A<->C,
B<->C and C<->D, or graphically:
A <--+
+--> C <---> D
B <--+
I'd like to create objects that have one of these items (A,B,C,D) as a
given, then be able to query any such object for any data representation.
For instance, an object with A as the given would return D by solving
A->C->D.
What I'm trying to figure out is a simple and reasonably elegant way to
code such objects.
I am pretty sure recursion is the heart of the solution. An object with
A as the given could have a method getD that returned D<-C and a method
getC that returned C<-A.
The real issue is creating such objects without hand coding each one
(since in the real world I have more representations and the number of
casese proliferates badly).
I suspect I should use recursion to create the object, too, but it
sounds like it'll need a lot of introspection. For instance to create an
object with A as the given, one might:
- start by defining method getA to return A
- look through the set of conversion functions that output A; the only
one is A<-C, so method getC returns C<-A.
- repeat with all methods that return C and don't have methods already
defined; this gives method getB returns B<-C and method getD returns
D<-C.
Alternatively, I can imagine making each object basically identical
except for some kind of meta-data that tells each method which data item
to query; the appropriate function can then be looked up as needed (e.g.
via a dictionary that takes as a key the output and input
representation). This would slow down the methods but avoid the
introspection.
Any suggestions?
-- Russell
More information about the Python-list
mailing list