逆序排序编号,不带数组

时间:2018-09-05 13:00:38

标签: php algorithm

假设我们有一个排名系统,该系统的整数为1,最大为100.000。

我想要一个反转整数排名的函数。

因此,值100.000变为等级1,值1变为等级100.000。

function reverseRank($currentRank,$maxRank){

         // create array with numbers 1 till $maxRank.
         // reverse order of values and return key of $currentRank...
         // but this seems a bit a waste of resources.

         return $reversedRank;
}

在php中实现此性能明智的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

为简单起见,我们假设您的排名范围介于1到10之间。

我们需要找到一个可以交换的映射函数

1  -> 10
2  -> 9
3  -> 8
4  -> 7
5  -> 6
6  -> 5
7  -> 4
8  -> 3
9  -> 2
10 -> 1 

现在,考虑解决方案可能会更容易。

什么功能将起作用?此功能在运行时中有几件已知的事情。 范围的下限和上限,分别为1和10。

我们可以用较为正式的方式来勾勒出这一点:

f(1) -> 10
f(2) -> 9 
f(3) -> 8
(...)
f(x) -> y; // 1 and 10 are know to be the limits

如果我们尝试申请该怎么办

让我们尝试使用它。 f(1)为10可能是:

def f(x):
    return x*UPPER_LIMIT

毫无疑问,只要我们用2尝试一下,它就会崩溃。

F(2)-> 9,看着它,我可以看到它可以写为:

让x返回一个比LOWER上限小得多的数字。

def f(x):
    return UPPER_LIMIT - (x-LOWER_LIMIT)

而且,通过运行更多的值,它似乎可以正常工作。

希望我能理解您的问题,对您有帮助。