@valis

Как сгенерировать множество с покрытием максимального числа результатов?

Есть следующая задача
Имеем условие для формирования множества множеств (или таблицы):
- Количество строк (элементов множества)
- Для каждого столбца задан процент значения Null (например (10,20,50) -первый столбец 10% нулов, второй 20 и третий 50)

Необходимо сгенерить такое множество заданной длины чтобы оно оптимально покрывала все возможные комбинации нулов и не нулов
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Вычисляем общее количество комбинаций ("масок" нулов/не-нулов: от "все нулы" до "все не-нулы" на заданном множестве: количестве строк). Это будет 100% всего диапазона.
2. 10%, 20%, 50% - каждый 10-й, каждый 5-й, каждый 2-й, соответственно.
3. Начнём с самого частого (50%) и через 1 (каждый 2-й) составим список.
4. Возьмём следующий (20%) и применим к оставшейся половине (так же равномерно, учитывая половину - за 100%) и присоединим к списку.
5. Возьмём оставшийся процент (10%) и применим к оставшимся 30% - это будет каждый 3-й элемент и тоже присоединим к списку.

Полученный список - будет то, что требовалось.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А в чём проблема то?
$nullPercents = [10, 20, 50];
$totalRows = 11;
$result = [];
for ($i = 1; $i <= $totalRows; $i++) {
  $row = [];
  foreach ($nullPercents as $percent) {
    if ($i <= $totalRows*$percent/100) {
      $row[] = null;
    } else {
      $row[] = $i;
    }
  }
  $result[] = $row;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы