创建一个组合列表?Lua/Pseudocode

所以我想将列表中的所有值乘以3个不同的值,然后将所有值相加。

List( 1, 2, 3, 4, ...)
List2(-1, 0, 1)

看起来像这样:

-1-2-3-4
0-2-3-4
1-2-3-4
-1+0-3-4
-1+2-3-4
-1-2+0-4

依次进行每种可能的组合,其中 List 的每个成员都乘以 List2 的一个成员,并将结果列表加和。 除了通过 List 进行 for-loop,我还没有其他代码。

请让我知道如何改进这篇帖子。

点赞
用户4984564
用户4984564

似乎我第一次误解了你的问题。

你想要的比我最初想象的要更加复杂一些,但并不太难。

为了简单起见,让我们把你的列表称为 A 和 B;对于 A 中的每个值,你都有 size(B) 种可能的因子;因此你得到 size(B)^size(A) 种排列。

你可以将这些排列表示为基于 size(B) 的数字。例如,假设 B 有 3 个元素,A 有 4 个元素(就像你的例子一样),那么你可以将每个排列表示为一个 4 位基于 3 的数字:00003,10003,20003,01003 等等。

最大的数字是 22223,也就是 34-1。

通常来说,你需要从 0 到 baseexponent-1 进行计数,并将每个整数映射到一个唯一的和,其中每个加数对应于整数中的一个数字:第一个加数是你的第一个向量,它以数字的位置为索引,第二个加数是第二个向量,它以数字本身为索引。

local A = {1, 2, 3, 4}
local B = {-1, 0, 1}

local function decompose(number, base, exponent)
  local sum = 0
  local buf = {}
  for i=1,#exponent do
    local n = math.floor(number / (#base)^(i-1)) % (#base)
    sum = sum + exponent[i] * base[n+1]
  end
  return sum
end

for i=0,(#B)^(#A)-1 do
  print(i, decompose(i, B, A))
end
2019-12-02 14:28:46