Среднее значение установленного количества битов в заданной двоичной строке после выполнения всех возможных вариантов K операций

Опубликовано: 21 Сентября, 2022

Учитывая положительное целое число N и массив arr[] , состоящий из K целых чисел, и рассмотрим двоичную строку (скажем, S ), имеющую N установленных битов, задача состоит в том, чтобы найти среднее значение количества установленных битов после выполнения всех возможных вариантов выбора K операций над строкой S , так что в i операции любой из битов arr[i] из N битов может быть инвертирован.

Пример:

Input: N = 3, arr[] = {2, 2}
Output: 1.6667
Explanation: The given binary string having N set bits, let’s say S = ‘111‘. All the possible sequence of moves are as follows:

  • In the first move flipping bits S[0] and S[1]. The string will be ‘001
    • In second move flipping bits S[0] and S[1]. The string will be ‘111’.
    • In second move flipping bits S[1] and S[2]. The string will be ‘010‘.
    • In second move flipping bits S[0] and S[2]. The string will be ‘100‘.
  • In the first move flipping bits S[1] and S[2]. The string will be ‘100‘.
    • In second move flipping bits S[0] and S[1]. The string will be ‘010‘.
    • In second move flipping bits S[1] and S[2]. The string will be ‘111′.
    • In second move flipping bits S[0] and S[2]. The string will be ‘001‘.
  • In the first move flipping bits S[0] and S[2]. The string will be ‘010‘.
    • In second move flipping bits S[0] and S[1]. The string will be ‘100‘.
    • In second move flipping bits S[1] and S[2]. The string will be ‘001‘.
    • In second move flipping bits S[0] and S[2]. The string will be ‘111‘.

Therefore, the total number of distinct operations possible are 9 and the count of set bits after the operations in all the cases is 15. So, the average value will be 15/9 = 1.6667.

Input: N = 5, arr[] = {1, 2, 3}
Output: 2.44

Подход: Данная проблема может быть решена с использованием некоторых основных принципов теории вероятности. Предположим, что после (i – 1) операции значение среднего числа установленных битов равно p , а значение среднего числа выключенных битов равно q . Можно заметить, что значение p после i операции станет равным p = p + среднее количество выключенных битов, перевернутых в установленные биты, – среднее количество заданных битов, преобразованных в выключенные биты. Поскольку вероятность выбора битов в строке равновероятна, значение p можно рассчитать как p i = p i-1 + q (i – 1) *(arr[i] / N) – p (i – 1) *(обр[i]/N) . Выполните следующие шаги, чтобы решить данную проблему:

  • Инициализируйте две переменные, скажем, p и q , и изначально p = N и q = 0 , поскольку изначально все биты устанавливаются битами в строке.
  • Пройдите по заданному массиву arr[] с помощью переменной i и обновите значения p и q следующим образом:
    • Значение p = p + q*(arr[i]/N) – p*(arr[i]/N) .
    • Точно так же значение q = q + p*(arr[i]/N) – q*(arr[i]/N) .
  • Значение, хранящееся в p , является требуемым ответом.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(K), так как мы используем цикл для прохождения N раз, поэтому это будет стоить нам O(K) времени
Вспомогательное пространство: O(1), так как мы не используем дополнительное пространство.