[Haskell-cafe] Re: finding the right mathematical model

Heinrich Apfelmus apfelmus at quantentunnel.de
Wed Jul 7 05:42:01 EDT 2010

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


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.

Heinrich Apfelmus


More information about the Haskell-Cafe mailing list