Günther Schmidt wrote:
Hi list,
the problem I have stems from the app I had developed. What my app does
is to split the money a hospital receives for a case to the departments
involved in a fair way.
An additional requirement however was to allow the users of the app to
re-map any revenue shares credited to certain departments to other
departments. Such cases are sometimes due to politics within the
hospital and also have more legitimate reasons, like saying the
radiology should not receive shares for surgical procedures but those
shares should be redirected to the "General surgery" department.
The feature is already implemented, but I'm not pleased with it,
especially since I did not develop a mathematical model for it.
Details:
It boils down to model mappings, or rather what sort of data structure
would be suited for this kind of thing.
Dept A is "mapped" to itself
A -> A
Dept B is mapped to Dept C
B -> C
Dept C is mapped to Dept C
C -> C
Dept D is mapped to Dept A
D -> A
It should not be possible to construct looping mappings, ie.
1. A -> B
2. B -> C
3. C -> A
.......
What sort of model would be suitable to describe this, some sort of matrix?
You probably want a graph where the nodes represent departments and
edges represent the mappings. To implement graphs in Haskell, have a
look at the functional graph library
http://hackage.haskell.org/package/fgl
If that's too complicated for you and your graphs are really small, you
can also use a toy implementation like
type Graph = [(Node, -- Department
[Node]) -- List of Departments it shares revenue to
]
To test whether a graph has cycles ("looping mapping"), you can use a
depth-first search.
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe