I need a function $f(x)$ such that given a set of values $X=\{x1, x2, ...\}$ and a function $rand()$ that returns a value between 0 and 1, $f(x)$ returns a value that increases with x such that the probability that $f(a)$ returns a value greater than $f(b)$ is based on their relative sizes: $P[f(a) \ge f(b)] = \frac{a}{a+b} \forall\ a,b\ \epsilon \ X$
Basically, I'm trying to find a more efficient way to pick a random order of items that have associated weights that determine their probability of being picked earlier. For example, if I had items A, B, and C with weights 1, 2, and 4, respectively, the current algorithm picks a random number 1-7 and picks A if it is 1, B if it is 2 or 3, and C if it is 4-7. So, A has a 1/7 chance of being 1st, B has a 2/7 chance, and C a 4/7 chance. The picked value is removed from the set, and the algorithm repeats with the smaller set.
If I could find a way to instead map these weights to a random value such that ordering them by that value gives the same distribution of selected permutations, that would be cool.