从中心开始的交替算法

时间:2013-03-25 05:47:56

标签: php algorithm

我正在试图找出一种算法来得出一个阵列结果,该结果是与中心等距的交替点(可以是基于百分比的)。所以,我的最终结果将是这样的: X = 20(基于项目数的间隔距离) - 100/5(5个项目分布在100%以上)

  • A = 50(中心点)
  • B = 70(A + 20)
  • C = 30(A-20)
  • D = 90(B + 20)
  • E = 10(C - 20)

另一个结果是如果我们有10个项目(X = 100/10):

  • A = 50(中心点)
  • B = 60(A + 10)
  • C = 40(A-10)
  • D = 70(B + 10)
  • E = 30(C-10)
  • F = 80(D + 10)
  • G = 20(E - 10)
  • H = 90(F + 10)
  • I = 10(G - 10)
  • J = 100(H + 10)

如果这很重要,我正在尝试使用PHP来实现这个算法。我不是一个数学专家,所以我不确定这种类型的计算是否有名称。谢谢!

2 个答案:

答案 0 :(得分:0)

如果我理解正确,这应该有效:

function pointsArray($center, $numPoints) {        
        $arr = array();
        $arr[0] = $center;

        for($i = 1;$i < $numPoints; $i++)
            $arr[$i] = $i%2 == 0 ? $center - ($i-1)*20 : $center + $i*20;

        return $arr;
}

比,你可以使用这样的功能:

$PointsArray = pointsArray(50, 5); // {50,70,30,90,10}

答案 1 :(得分:0)

您可以编写如下函数:

function getArrayEquidistant($startValue, $step, $nbEntries)
{
    $i = 0;
    $count = 1;
    $final = array();
    $final[] = $startValue;
    while($i < $nbEntries)
    {
        if ($i % 2 == 0)
            $final[] = $startValue + ($count * $step);
        else
        {
            $final[] = $startValue + ($count * $step);
            $count++;
        }

        $i++;
    }

    retun $final;
}

其中$startValue是初始值(在索引0处),$step是每次迭代时添加或子的值,$nbEntries是初始值后的条目数。< / p>

例如:

print_r(getArrayEquidistant(50, 20, 10));

会给你:

Array
(
    [0] => 50
    [1] => 70
    [2] => 30
    [3] => 90
    [4] => 10
    [5] => 110
    [6] => -10
    [7] => 130
    [8] => -30
    [9] => 150
    [10] => -50
)