按降序在多个点上随机化一个数字

时间:2015-12-12 18:18:38

标签: php algorithm statistics

我需要以降级顺序为多个点分配一个数字。

例如,

N = 100 // this 100 is fixed
no_of_points = 10 // no of points will vary 

需要按降序随机将100分为10分。

e.g:

80, 55, 32, 18, 10, 10, 10, 8, 2, 0

下面,

  1. 退化将更快结束
  2. 必须包含零结束
  3. 我尝试做类似的事情:

    private static function generateRandomPercentage($no_of_points)
    {
        $distributions = [];
    
        // need to start from 80
        // but it may vary also
    
        $max = mt_rand(80, 81);
        $ratio = $max / $no_of_points;
    
        for( $i = 1; $i <= $no_of_points; $i++ ) {
            $delta = ($ratio * $i);
            $distributions[] = round(($max - $delta) / 100, 2);
        }
    
        print_r($distributions);
    }
    

    但没有任何效果。 请帮帮我。

1 个答案:

答案 0 :(得分:0)

可以使用php标准函数完成:

$N = 100 // this 100 is fixed
$no_of_points = 10 // no of points will vary

$distributions= rsort(array_slice(shuffle(range(1,$N)), 0, $no_of_points);
print_r($distributions));

range =创建值为1 ... n

的数组

shuffle = shuffle array

array_slice =返回数组的一部分

rsort =排序数组值高到低值