我正在使用给定[1], [1,2,3], [1,2,3]返回9种组合的笛卡尔乘积函数:

[ [ 1, 1, 1 ],
  [ 1, 2, 1 ],
  [ 1, 3, 1 ],
  [ 1, 1, 2 ],
  [ 1, 2, 2 ],
  [ 1, 3, 2 ],
  [ 1, 1, 3 ],
  [ 1, 2, 3 ],
  [ 1, 3, 3 ] ]

但无论顺序如何,我都需要删除具有相同项目的对象,因此[ 1, 3, 1 ][ 1, 1, 3 ]对我来说是相同的。结果应包含6个项目:
[ [ 1, 1, 1 ],
  [ 1, 2, 1 ],
  [ 1, 3, 1 ],
  [ 1, 2, 2 ],
  [ 1, 3, 2 ],
  [ 1, 3, 3 ] ]

我可以编写一个函数,将所有可能的对与_.xor进行比较,但是对于较大的数字,它可能效率很低。 Javascript中有什么好方法吗?一种比较所有可能对的有效方法或笛卡儿乘积算法(无重复项)?

最佳答案

排序笛卡尔积的每个数组

[ 1, 2, 1 ] -> [1 , 1 , 2]
[ 1, 1, 2 ] -> [1 , 1 , 2]

然后将这些排序后的数组收集到一个集合中,这将删除重复项。

当然,您可以在构造笛卡尔积时进行此操作,而不是在之后进行。

关于javascript - 笛卡尔积无重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35945058/

10-09 18:46