如何生成具有不同子序列的序列?

时间:2011-11-07 12:06:05

标签: sum distinct sequence

我正在寻找一种方法来生成一些(默认为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 :(得分:0)

你没有说明你是否需要它是一个随机序列,所以假设这不是必需的。

一个简单的方法就是:

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. 以前生成的三元组的集合
  6. 你会以这种方式生成随机三元组:

    1. 如果未达到所需的三元组总数,则生成随机三元组,否则完成。
    2. 检查以前是否未生成三元组,如果不是,则继续执行步骤3.
    3. 检查前四组。如果这些集合中不包含任何总和,请添加三元组并继续执行步骤1.
    4. 但是,我不确定这种方法是否可以保证您获得结果(特别是在小额最终金额中)。

      所以,我会添加一个计数器,如果连续多次尝试都没有成功,那么我会切换到暴力方法(如果最终总和很小则不应该是问题,另一方面如果是最终总和很大。)

      总的来说,表现应该很好。