Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找两个n长度数组的特殊顺序n长度组合_Algorithm - Fatal编程技术网

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

Algorithm 查找两个n长度数组的特殊顺序n长度组合,algorithm,Algorithm,给定两个N长度数组,找出优先于B数组元素的这些数组的N长度组合 例如,给定数组A:[1,2,3]和B:[4,5,6] Fun(A,B)可以产生: [4,5,6]->包含来自B阵列的3个 [4,5,3]->包含来自B阵列的2个 [4,2,6]->包含来自B阵列的2个 [1,5,6]->包含来自B阵列的2个 [4,2,3]->包含来自B阵列的1个 [1,5,3]->包含来自B阵列的1个 [1,2,6]->包含来自B阵列的1个 最重要的是,在产生组合时,B数组中的大多数元素首先出现 另外,我更喜欢

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

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


[4,5,6]->包含来自B阵列的3个
[4,5,3]->包含来自B阵列的2个
[4,2,6]->包含来自B阵列的2个
[1,5,6]->包含来自B阵列的2个
[4,2,3]->包含来自B阵列的1个
[1,5,3]->包含来自B阵列的1个
[1,2,6]->包含来自B阵列的1个

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


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

解决方案可以如下构造:

  • 从B中的N个元素的所有组合开始

  • 然后从B中取出N-1个元素的所有组合并合并 它们带有A元素

  • 然后取B中N-1个元素的所有组合,并将其与A中2个元素的所有组合组合


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

    2**N
    组合(或者
    2**N-1
    的组合忽略了
    a
    中的所有元素),因此仅列出它们的运行时间远远不是
    N

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


    有可能直接以正确的顺序生成它们,并降低指数空间复杂度。

    步骤1:使用通用算法生成所有元素的组合步骤2:根据元素的出现情况排序是,我添加了一个编辑以选择线性运行时?作为什么的函数?还有,所有元素都应该是唯一的吗?当一个元素出现在两个数组中时会发生什么?我们可以假设所有元素都是唯一的,是的。感谢您的关注。:)这很接近,但是这个解决方案有一个bug:我在这里编码:@paul:bug是什么?从这个解决方案返回的第四个元素的结果是B数组中只有1个项目,而不是2个项目。这是因为算法的递归性质。我链接的要点显示了对该算法将返回什么的更详细分析。在找到组合后对它们进行排序对我来说不起作用。组合的数量太多了,我可能只关心前3-100个组合。