Не знаю, известен эффект или нет, но он понятен. По крайней мере, на одном шаге, действуя этими двумя методами, получаем неэквивалентные результаты.
Чтобы сделать программу эффективнее, но сохранить её поведение, надо в один шаг включать несколько выстрелов. Но число выстрелов
само должно быть случайной величиной, принимающей значения от
до
. Исходя из описания первого метода, с перебором всех элементов,
должно иметь биномиальное распределение:
Википедия писал(а):
Биномиальное распределение в теории вероятностей — распределение количества «успехов» в последовательности из
независимых случайных экспериментов, таких что вероятность «успеха» в каждом из них постоянна и равна
.
В Вашем первом методе (при котором поведение программы берется за эталонное) эксперимент — это принятие решения для одного элемента массива, нужно или нет его мутировать. А последовательность из
независимых экспериментов — это перебор всех элементов массива.
В соответствии с формулой, вероятность того, что Вы для
элементов из
решите, что их надо мутировать, равна
Во втором методе надо построить случайную величину с таким же распределением, на каждом шаге получать её случайное значение и потом делать количество выстрелов, равное этому значению.