繁体   English   中英

形成符合定义值的项目组,无需重复

[英]Form groups of items, without repetition, that fit a defined value

我很难在谷歌表格上找到一个电子表格的解决方案,javascript 语言。 我看到一些东西,比如分组和丢弃。 但是我仍然无法在精神上组装任何会产生任何结果的东西。

我需要在数据集中找到符合给定定义值的项目和项目组(总和)。

我有一个定义值的数据表,这是一个示例列表

物品 价值
1 100.00
2 53.50
3 45.00
4 67.00
5 32.50
6 35.60
7 34.70

我需要形成一组项目,以便它们的总和理想地为 100.00,但它可以接近这个值,甚至更高一点也是可能的,但理想值将达到 (<=)。

预期结果逻辑:

  • 组 1 = 项目 1 值 100.00

  • 第 2 组 = 项目 4 值 67.00 和项目 5 值 32.50(因为总和为 99.50,最接近 100)

  • 第 3 组 = 项目 2 值 53.50 和项目 3 值 45.00(因为总和为 98.50,最接近 100)

  • 第 4 组 = 项目 6 值 35.60 + 项目 7 值 34.70(因为总和为 70.30)

项目的顺序或项目组的形成并不重要。 只有项目不能重复。

作为 output 您只需要每个组中的项目。 前任:

1

4 5

2 3

6 7 

但如果它有所有的结果,那就太好了(组、项目、总价值)

Group 1 item(s) 1 total value 100.50

Group 2 item(s) 4 5 total value 99.50

Group 3 item(s) 2 3 total value 98.50

Group 4 item(s) 6 7 total value 70.30

我是这么想的,但我还没有找到怎么做

行动 规则 结果
检查项目的最大值,因为 LIMITER 不能低于 最大值 显示最大值。 例如:100
只要 LIMITER 等于或小于一个 ITEM 的最大值,就设置 LIMITER <=最大值 示例:限制器:100
检查是否有任何 ITEM 的值等于 LIMITER 100 价值 == 限制 按顺序(每个循环中+1)首先为值为100的项目设置组号
检查 ITEM 的总和是否等于 LIMITER 100 项目总和 = 限制器的值,不重复已列出的项目 按顺序(每个循环+1)设置该组项目的数量和值为100
检查是否有任何 ITEM = -0.01 之前的搜索 不重复已列出的项目 按顺序(每个循环+1)设置值低于限制器的项目组的数量
检查任何项目总和是否 = -0.01 哪个先前的搜索 项目总和 = 获取的值,不重复已列出的项目 按顺序设置(每个循环中+1)值低于限制器的总和项目的组号
继续搜索,直到没有剩余值 不重复已列出的项目 将列表设置为最后一个可用项目

欢迎任何帮助

我注意到这个问题与背包问题非常相似。 我不是很擅长解释它,但这里有一些资源比我能更好地解释它。

https://learnersbucket.com/examples/algorithms/knapsack-problem-in-javascript/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM