cats_shadow: (Default)
[personal profile] cats_shadow
Граждане программисты, подскажите алгоритм.. плз.. :-)

Дано:
2 массива байт равной длины. Значения элементов у первого и второго  массивов большей частью своей идентичны. (имеется в виду, что 1й элемент одного равен 1му элементу второго  и т.д.) . Часть элементов имеет различия (например 4й элемент первого не равен 4му элементу второго).

Надо получить множество массивов со всеми возможными комбинациями различающихся элементов.

P.S. Что-то туплю я. Интуитивно все получается, а вот алгоритмизовать...
From: [identity profile] randir-spb.livejournal.com
Каждый элемент - байт, то есть может быть в 255 состояниях + 1 состояние, совпадающее с состоянием в первом массиве.
То есть тебе надо решить, какие элементы будут отличаться (!) и перебрать варианты.
Или я чего-то не понял?
Какие элементы могут отличаться, пока тоже не ясно, но если их, скажем, не больше трех, то все относительно просто.
From: [identity profile] randir-spb.livejournal.com
Воскресенье...

Я бы предложил каждый элемент diff изобразить записью (i, a1, a2, flag), где flag : Boolean;

Далее, если рассмотреть набор diff[j].flag, как двоичное число длиной length(diff), то получается, что мы должны последовательно прибавлять к этому числу единицу, чтобы перебрать все варианты, от (false, false, ... false) до (true, true, ... true). Соответственно, для каждого варианта можно построить массив по алгоритму:

Берем массив a1, копируем в массив a.
Для всех элементов diff элементу a[diff[j].i] присваиваем diff[j].a1 если diff[j].flag ложно и diff[j].a2, если истинно.

Получаем частично искаженный массив a.

Потом, начиная с конца массива diff, если flag элемента = false, то меняем его на true и завершаем перебор, если же flag элемента = true, то меняем его на false и переходим к следующему. Если следующего элемента не оказалось, то мы перебрали все варианты.

Таким образом мы переберем от (false, false, ... false), когда массив a будет совпадать с a1 до (true, true, ... true), когда a будет совпадать с a2. На каждом шаге будет получаться массив a1, где часть элементов заменена на соответсвующие элементы из a2.

Я правильно понял?

February 2026

S M T W T F S
1234567
891011121314
15161718192021
22232425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 11th, 2026 05:59 am
Powered by Dreamwidth Studios