views:

52

answers:

1

Say I have the following for a bunch of items.

  • item position
  • item size
  • item length

A smaller position is better, but a larger length and size are better.

I want to find the item that has the smallest position, largest length and size.

Can I simply calculate a value such as (total - position) * size * length for each item, and then find the item with the largest value? Would it be better to work off percentages?

A: 

Either add a fourth item, which is your calculated value of 'goodness', and sort by that OR if your language of choice allows, override the comparason operators for sorting to use your formula and then sort. Note that the latter approach means that the function to determine betterness will be applied multiple times per item in the list, but it has the advantage of ease of making a procedural comparason possible (eg first look at the position, then if that is equal, look at size then length) - athough this could also be expressed as a formula resulting in a single number to sort by.

As for your proposed formula, note that each item has the same numerical weight even though they are measured on completely unrelated scales. Furthermore, all items with either position=total, size=0 or length=0 evaluate to zero.

If what you want is that position is the most important thing, but given equal positions, size is the next most important thing, but given equal positions and sizes, then go by length, this can be formulated into a single number as follows:

(P-position)*(S*L) + size*L + length

where L is a magic number that is greater than the maximum possible length value, S is a number greater than the maximum possible size value, and P is a number greater than the maximum possible position value.

If, on the other hand, what you want is some scale where the items are of whatever relative importances, one possible formula looks like this:

((P-position)/P)*pScale * (size/S)*sScale * (length/L)*lScale

In this version, P, S and L have much the same definitions as before - but it is very inmportant that the values of P, S and L are meaningful in a compatible way, e.g all very close to expected maximum values. pScale, sScale and lScale are there so you can essentially specify the relative importance of each item. They could all be 1 if all atems are equally important, in which case you could leave them out entirely.

As previously answered, though, there are also a potentially infinite number of other ways you could choose to code this. As a random example, for large sizes, length could become less important; those possibilities would require much additional thought as to what is actually meant by such a vague statement.

whybird
Note that my scaled formula assumes that the minimum value of each item is zero.
whybird
I really appreciate the thought you put into this response.
J3nnings
Feel free to vote it up! :-)
whybird