微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用每组的一个数字查找多组中的数字总和

如何解决使用每组的一个数字查找多组中的数字总和

背景

您好,我正在尝试解决一个编程问题,但遇到了以下问题:

假设您有多个数字列表。全部按降序排列。 您现在必须从每个列表中精确取一个数字,以求出最大可能的总和。

到目前为止很简单,要解决这个问题,您只需取每个列表的第一个数字即可。

但是现在,我需要第二大和,同时仍然使用每个列表中的一个数字。 为此,我将采用每个列表中的第一个元素,但对于第一个和第二个数字之间差异最小的列表,将使用第二个数字。

这还是很可行的。

问题

但是我需要一个迭代器,使用按降序排序的每个列表中的一个数字来遍历每个可能的总和。
出于性能原因,不可能只计算每个总和然后对其进行排序。该算法必须已经按降序提供总和。如果一个总和有多种组合,则该总和必须多次返回。

其他要求

迭代器应该是惰性的(只在需要时计算下一个总和)。
列表已经是惰性的,这意味着您应该需要尽可能少的值来计算拟合总和。

示例

对于列表:

List 1: [5,2,1]
List 2: [10,2]
List 3: [6,1]

然后迭代器应该返回:

[5,10,6] = 21
[2,6] = 18
[1,6] = 17
[5,1] = 16
[5,6] = 13
[2,1] = 13
[1,1] = 12
[2,6] = 10
[1,6] = 9
[5,1] = 8
[2,1] = 5
[1,1] = 4

评论

我不需要代码来回答我的问题(如果它有助于解释,仍然欢迎您提供)。我正在寻找的是解决这个问题的想法,或者我可以自己实施的解决方案。

提前致谢!

解决方法

首先感谢wlui155的帮助。

对于任何感兴趣的人,我编写了一个 BFS 算法,其作用如下:

定义:
条目:包含已用数字和总和索引的结构
BSet:只能包含唯一条目的有序集合

算法:

  1. BSet 中金额最大的 Pop Entry
  2. 为每个列表创建一个副本
  3. 在每个克隆中推进一个不同的索引
  4. 将新条目放入 BSet
  5. 打印当前条目
  6. 转到 1。

现在,您只需确保弹出条目后不再出现条目。这可以通过包含当前总和的所有组合的单独集合来确保。一旦当前和变小,这个集合就可以被清除。

如果您有改进的想法,欢迎告诉我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。