找到两个n长度数组的特殊顺序n长度组合

时间:2018-02-25 19:23:38

标签: algorithm

给定两个N长度数组,找到这些数组的N个长度组合,优先于B数组的元素。

例如,给定数组A: [1,2,3]B: [4,5,6]的输入 Fun(A,B)可能会产生:

[4, 5, 6] -> contains 3 from the B array [4, 5, 3] -> contains 2 from the B array [4, 2, 6] -> contains 2 from the B array [1, 5, 6] -> contains 2 from the B array [4, 2, 3] -> contains 1 from the B array [1, 5, 3] -> contains 1 from the B array [1, 2, 6] -> contains 1 from the B array

最重要的是,B阵列中的大多数元素在产生组合时首先出现。

P.S。我更喜欢K的线性运行时解决方案,其中K是可以创建的组合数(2^N)。

2 个答案:

答案 0 :(得分:2)

2 ** N个组合(或2 ** N - 1你忽略了包含A所有元素的组合,所以只列出它们的运行时间远远不是{{1}的线性}。

要生成它们,请注意每个组合对应一个N - 位数,N表示“从0中取出元素”,A表示“取”来自1的元素。因此,生成所有B位数,并根据popcount对它们进行排序。

可以直接以正确的顺序生成它们,并且指数空间复杂度为惩罚。

答案 1 :(得分:0)

解决方案可以构建如下:

  1. 从B的所有N个元素组合开始。

  2. 然后取B的所有N-1元素组合并合并 它们的元素为A.

  3. 然后从B中取出N-1个元素的所有组合,并将它们与从A中取得的2个元素的所有组合合并。

  4. ...

  5. 您可以在网上搜索组合数据的有效实现。如果需要,我可以提供一个简单的。