首页 > 解决方案 > 创建一个组合列表?Lua/伪代码

问题描述

所以我想将列表中的所有值乘以 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 循环外,我还没有代码。

请让我知道如何改进这篇文章。

标签: lua

解决方案


看来我第一次误解了你的问题。

你想要的比我最初想象的要复杂一些,但也不是太难。

为简单起见,我们将您的列表称为 A 和 B;对于 A 中的每个值,您都有 size(B) 可能的因素;所以你得到 size(B)^size(A) 排列。

您可以将这些排列表示为 base-size(B) 数字。例如,假设 B 有 3 个元素,A 有 4 个(如您的示例所示),那么您可以将每个排列表示为 4 位基数为 3 的数字: 0000 3、 1000 3、 2000 3、 0100 3等。

最大的数是 2222 3,即 3 4 -1

一般来说,您需要从 0 计数到基指数-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

推荐阅读