Ranked Biased Overlap (RBO) is a metric for comparing two rankings and is used when the sizes of the given rankings are different and/or the elements that they carry are not the same. Ranked Biased Distance (RBD = 1 - RBO) is the distance metric emanating from RBO. A simple demonstration of the metric can be found here, along with a link to an implementation in Python.
Currently, I want to find an efficient way of calculating the "inverse" of RBO. Typically, RBO is a function like the following:
double rbo(List<A> rankingA, List<B> rankingB)
double value returned, is the RBO value of rankings
rankingB. I want to implement the following method:
List<A> generateRanking(List<A> rankingA, double rbo)
which given a ranking (
rankingA) and an RBO value (
rbo), it generates a random permutation of
rankingA, that its RBO value with the initial ranking is
rbo. Apart from a trial-and-error approach, in which I randomly permute
rankingA until I meet
rbo, can you think of a better way (more computationally efficient) of doing so?