PHP: как просто перебрать все комбинации n исходов для k событий
На самом деле, ответ есть в предыдущей заметке об исходах шахматных партий. С точки зрения комбинаторики, при решении задачи о переборе всех
вариантов исходов для k
событий, каждое из которых может совершиться только одним из n
способов, мы имеем размещения с повторениями, но никаких ручных перестановок элементов в массивах или рекурсий выдумывать не нужно, достаточно
перебрать все числа от 0
до nk
в системе счисления с основанием n
, сохраняя лидирующие нули.
Тогда, например, при n=3
и k=5
значение 00012
будет соответствовать случаю, когда первые три события завершились первым исходом, четвёртое событие - вторым исходом, а пятое - третьим.
Вот воплощение этой несложной идеи в коде:
<?php $n = 3; $k = 5; $a = floor(pow($n,$k)); for ($i=0; $i<$a; $i++) { $s=str_pad(base_convert ($i,10,$n),$k,'0',STR_PAD_LEFT); echo $s.'<br>'; } ?>
28.03.2018, 21:01 [2076 просмотров]