Как генерировать последовательности с различными суммами? - PullRequest
0 голосов
/ 07 ноября 2011

Я ищу способ генерирования некоторых (6 по умолчанию) уравнений, в которых все суммы являются уникальными.Например,

    a+b+c=50

    d+e+f=50

    g+h+i=50

    a, d and g have to be distinct. 
    a+b and d+e have to be distinct.
    e+f and h+i have to be distinct.
    a+c and d+f have to be distinct.

Но a + b и e + f могут быть одинаковыми.Поэтому меня интересуют только суммы выровненных параметров.

Я мог только найти способы проверить , является ли какая-то последовательность отличной от подсумма, но я ничего не нашел о том, как сгенерировать такую ​​последовательность..

1 Ответ

0 голосов
/ 07 ноября 2011

Вы не указали, должна ли она быть случайной последовательностью, поэтому предположим, что это не требуется.

Один простой подход заключается в следующем:

1 + 2 + 47 = 50
3 + 4 + 43 = 50
5 + 6 + 39 = 50
7 + 8 + 35 = 50
9 + 10 + 31 = 50
11 + 12 + 27 = 50

Первые два числа2 наименьших доступных числа, третье число является окончательной суммой - эти числа.

a и b всегда увеличиваются, c всегда уменьшается

a + b всегда увеличивается, b + c иa + c всегда уменьшается

Вы можете сгенерировать его таким образом в цикле.

РЕДАКТИРОВАТЬ после комментария, что это должна быть случайная последовательность:

Возможно, вы могли бы создатьнесколько наборов (некоторый тип hashset / hashmap будет наиболее подходящим)

  1. набор первых слагаемых
  2. набор сумм первого и второго слагаемых
  3. наборсуммы второго и третьего слагаемых
  4. набор сумм первого и третьего слагаемых
  5. набор сгенерированных ранее троек

Вы могли бы генерировать случайные тройки следующим образом:

  1. Если общее количество требуемых трiples не был достигнут, генерирует случайную тройку, в противном случае завершается.
  2. Проверьте, не была ли ранее сформирована тройка, если нет, переходите к шагу 3.
  3. Проведите проверки для первых четырех наборов.Если в этих наборах нет сумм, добавьте тройку и перейдите к шагу 1.

Однако я не уверен, гарантирует ли этот подход, что вы получите результаты (особенно в небольших итоговых суммах).

Итак, я бы добавил счетчик, если слишком много последовательных попыток не увенчались успехом, то я бы переключился на метод грубой силы (что не должно быть проблемой, если конечные суммы невелики и, с другой стороны, вряд ли произойдутесли итоговая сумма велика).

В целом, производительность должна быть хорошей.

...