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/8/sorting/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 将传入和传出发票分组,使其总和为0_Algorithm_Sorting - Fatal编程技术网

Algorithm 将传入和传出发票分组,使其总和为0

Algorithm 将传入和传出发票分组,使其总和为0,algorithm,sorting,Algorithm,Sorting,今天我遇到了一个有趣的问题,决定用C#编写一个算法来解决它 总金额为负数的传入发票和总金额为正数的传出发票。任务是将这些发票分组,其中发票总数加起来正好为0。每个组可以包含无限个成员,所以如果有两个正成员和一个负成员,但它们的总值为0,则可以 我们试图最小化剩余发票总额,并且没有任何其他约束 我想知道这个问题是否可以追溯到一个已知的问题,如果不能,哪种方法是最有效的。天真的方法是将传入和传出的发票分为两个不同的组,按总数排序,然后尝试逐个添加发票,直到达到零或符号已更改。然而,这假设一组中的发票

今天我遇到了一个有趣的问题,决定用C#编写一个算法来解决它

总金额为负数的传入发票和总金额为正数的传出发票。任务是将这些发票分组,其中发票总数加起来正好为0。每个组可以包含无限个成员,所以如果有两个正成员和一个负成员,但它们的总值为0,则可以

我们试图最小化剩余发票总额,并且没有任何其他约束

我想知道这个问题是否可以追溯到一个已知的问题,如果不能,哪种方法是最有效的。天真的方法是将传入和传出的发票分为两个不同的组,按总数排序,然后尝试逐个添加发票,直到达到零或符号已更改。然而,这假设一组中的发票数量应该大致相同,这是不正确的(一张巨大的进货发票可以与10张较小的出库发票相对)


有什么想法吗?

你面临的问题是一个众所周知且经过研究的问题,叫做

不幸的是,问题是e,因此没有已知的多项式解。
事实上,甚至没有已知的多项式解来确定这样的子集(即使是单个子集)是否存在,更不用说找到它了

但是,如果您的输入由相对较小的(绝对值)整数组成,则可以使用一个非常有效的(伪多项式)来解决该问题

如果情况并非如此,则其他备选方案包括:

  • 使用指数解决方案,如(您可以使用技术对其进行优化)
  • 启发式解决方案,如或s


  • (1) 大多数计算机科学研究人员认为一个问题是不存在的,这基本上就是问题所在。

    你所面临的问题是一个众所周知的、经过研究的问题,叫做

    不幸的是,问题是e,因此没有已知的多项式解。
    事实上,甚至没有已知的多项式解来确定这样的子集(即使是单个子集)是否存在,更不用说找到它了

    但是,如果您的输入由相对较小的(绝对值)整数组成,则可以使用一个非常有效的(伪多项式)来解决该问题

    如果情况并非如此,则其他备选方案包括:

  • 使用指数解决方案,如(您可以使用技术对其进行优化)
  • 启发式解决方案,如或s


  • (1) 大多数计算机科学研究人员都认为不存在这样的系统,这基本上就是问题所在。

    谢谢,我很害怕。我要研究一下你推荐的文章!谢谢,我很害怕。我要研究一下你推荐的文章!