Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 在不生成整个集合的情况下,以重复的方式遍历元素的每个组合_Algorithm_Iteration_Combinations - Fatal编程技术网

Algorithm 在不生成整个集合的情况下,以重复的方式遍历元素的每个组合

Algorithm 在不生成整个集合的情况下,以重复的方式遍历元素的每个组合,algorithm,iteration,combinations,Algorithm,Iteration,Combinations,我需要迭代每一个可能的元素组合(重复),最多n个元素 我找到了解决这个问题的多种方法。但所有这些都是递归地生成每个可能组合的集合,然后对其进行迭代。虽然这是可行的,但对于大型元素集合和组合大小,它会导致大量内存使用,因此我正在寻找一种解决方案,它允许我从上一个组合计算下一个组合,知道元素的数量和组合的最大大小 这可能吗?这里是否有任何特定的算法可以工作?生成组合,以便对每个组合进行排序。(这假设元素本身可以很容易地按顺序排列。只要是总顺序,精确的顺序关系就不重要。) 从最小元素的n个重复组成的组

我需要迭代每一个可能的元素组合(重复),最多n个元素

我找到了解决这个问题的多种方法。但所有这些都是递归地生成每个可能组合的集合,然后对其进行迭代。虽然这是可行的,但对于大型元素集合和组合大小,它会导致大量内存使用,因此我正在寻找一种解决方案,它允许我从上一个组合计算下一个组合,知道元素的数量和组合的最大大小


这可能吗?这里是否有任何特定的算法可以工作?

生成组合,以便对每个组合进行排序。(这假设元素本身可以很容易地按顺序排列。只要是总顺序,精确的顺序关系就不重要。)

从最小元素的n个重复组成的组合开始。要从任何给定组合生成下一个组合:

  • 向后扫描,直到找到不是最大元素的元素。如果你找不到,你就完了

  • 用该元素的下一个较大元素替换该元素和所有后续元素

  • 如果希望所有长度的组合达到n,请对每个长度达到n运行该算法。或者从一个包含空槽的向量开始,使用上述算法,并理解空槽后的“下一个较大的元素”是最小的元素

    示例:长度3,共3个值:

    1 1 1
    1 1 2
    1 1 3
    1 2 2
    1 2 3
    1 3 3
    2 2 2
    2 2 3
    2 3 3
    3 3 3
    

    生成组合,以便对每个组合进行排序。(这假设元素本身可以很容易地按顺序排列。只要是总顺序,精确的顺序关系就不重要。)

    从最小元素的n个重复组成的组合开始。要从任何给定组合生成下一个组合:

  • 向后扫描,直到找到不是最大元素的元素。如果你找不到,你就完了

  • 用该元素的下一个较大元素替换该元素和所有后续元素

  • 如果希望所有长度的组合达到n,请对每个长度达到n运行该算法。或者从一个包含空槽的向量开始,使用上述算法,并理解空槽后的“下一个较大的元素”是最小的元素

    示例:长度3,共3个值:

    1 1 1
    1 1 2
    1 1 3
    1 2 2
    1 2 3
    1 3 3
    2 2 2
    2 2 3
    2 3 3
    3 3 3
    

    你是否在类似C++中提供了类似的行为?我需要遍历组合(元素的顺序不重要,组合的顺序应该是可预测的,但并不重要),所以每个排列都应该被视为相同的组合。您试图解决的问题是什么?有时,您不必在集合上迭代来计算集合上的函数。请看下面的例子。@fjardon我必须选择几个满足一组条件的最佳(按目标函数)组合。所以这实际上是一个优化问题。你是否在类似C++中提供了类似的行为?我需要遍历组合(元素的顺序不重要,组合的顺序应该是可预测的,但并不重要),所以每个排列都应该被视为相同的组合。您试图解决的问题是什么?有时,您不必在集合上迭代来计算集合上的函数。请看下面的例子。@fjardon我必须选择几个满足一组条件的最佳(按目标函数)组合。所以这实际上是一个优化问题。这实际上是我想要避免的方法,主要是因为你们需要保存在内存中的集合的大小。例如,考虑到元素是4字节数,25个元素长集合中有6个元素的593775个组合。它超过2MB,没有任何开销。这就是为什么我要问是否有聪明的数学解决方案。@k.kowalczyk:但你不需要一次生成所有的解决方案。生成一个,用它做任何你需要的事情,然后生成下一个。这就是迭代的意思。算法告诉你如何“生成下一个”。对,我之前误解了答案。这正是我所需要的,谢谢。这实际上是我想要避免的方法,主要是因为你们需要保留在内存中的集合的大小。例如,考虑到元素是4字节数,25个元素长集合中有6个元素的593775个组合。它超过2MB,没有任何开销。这就是为什么我要问是否有聪明的数学解决方案。@k.kowalczyk:但你不需要一次生成所有的解决方案。生成一个,用它做任何你需要的事情,然后生成下一个。这就是迭代的意思。算法告诉你如何“生成下一个”。对,我之前误解了答案。这正是我需要的,谢谢。