找出一组数字的哪些组合加起来达到给定的总数

2024-01-02

我的任务是帮助一些会计师解决他们遇到的一个常见问题 - 给出交易清单和总存款,哪些交易是存款的一部分?例如,假设我有这个数字列表:

1.00
2.50
3.75
8.00

我知道我的总存款是10.50,我可以很容易地看出它是由8.00 and 2.50交易。然而,考虑到一百笔交易和数百万笔存款,它很快就会变得更加困难。

在测试暴力解决方案时(这需要太长的时间才能实现),我有两个问题:

  1. 通过大约 60 个数字的列表,似乎可以找到十几个或更多的组合来获得合理的总数。我期待一个单一的组合来满足我的总体需求,或者可能有几种可能性,但似乎总是有很多组合。有没有数学原理可以描述这是为什么?似乎给定一个中等大小的随机数集合,您可以找到加起来几乎达到您想要的任何总数的多重组合。

  2. 我为这个问题建立了一个强力解决方案,但它显然是 O(n!),并且很快就会失去控制。除了明显的捷径(排除大于总数本身的数字)之外,还有其他方法可以缩短计算时间吗?

我当前(超慢)解决方案的详细信息:

将详细金额列表从大到小排序,然后递归运行以下过程:

  • 取出列表中的下一项,看看将其添加到您的运行总计中是否会使您的总计与目标相符。如果是,则将当前链保留为匹配项。如果未达到目标,请将其添加到运行总计中,将其从详细金额列表中删除,然后再次调用此流程

通过这种方式,它可以快速排除较大的数字,将列表缩减为仅需要考虑的数字。然而,还是n!更大的列表似乎永远不会完成,所以我对任何可以加快速度的捷径感兴趣 - 我怀疑即使从列表中删除 1 个数字也会将计算时间减少一半。

感谢您的帮助!


背包问题的这种特殊情况称为子集和 http://en.wikipedia.org/wiki/Subset_sum.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找出一组数字的哪些组合加起来达到给定的总数 的相关文章

  • 多个点之间的最短路线

    我需要找到多个点之间的最短路线 假设我有以下四点 var startPoint new Point 1 1 var pointsToGoPast new List
  • 找到不(必要)与二进制矩阵中的图像边界对齐的最大矩形

    我在用这个解决方案 https stackoverflow com questions 2478447 find largest rectangle containing only zeros in an nn binary matrix在
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • 为什么《破解编码面试》这个例子的时间复杂度是O(k c^k)?

    该问题来自 破解编码面试 第 6 版 问题 V1 11 以下代码打印长度为 k 的所有字符串 其中字符 是按排序顺序排列的 它通过生成所有长度的字符串来做到这一点 k 然后检查每个是否已排序 什么是运行时间 package QVI 11 P
  • 加速球之间的碰撞检测

    我正在编写一个物理引擎 模拟器 其中包含 3D 太空飞行 行星 恒星引力 船舶推力和相对论效应 到目前为止 一切进展顺利 但是 我需要帮助的一件事是碰撞检测算法的数学 我使用的运动迭代模拟基本上如下 注意 3D 矢量全部大写 For eac
  • 图像算法上的物体计数

    我又接到学校任务了 这次 我的老师给我的任务是创建算法来计算图片上有多少只鸭子 该图与此类似 我想我应该使用模式识别来搜索上面有多少只鸭子 但我不知道每只鸭子适合哪种图案 我认为你可以通过分割鸭嘴并计算鸭嘴的数量来解决这个问题连接的组件 h
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 简单的jquery求和

    我有未知数量的输入字段 有 add 类 我只想用 jquery 对这些进行求和 不知道我错在哪里
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 在 C 中如何安全地找到 2 个有符号整数之间的绝对差?

    绝对差是两个数字之间差的绝对值 假设我有 2int变量 x and y 我想找到绝对差异 一个简单的解决方案是 unsigned diff abs x y 然而 如果发生溢出 这些会调用未定义的行为并给出不正确的结果 例如x is INT
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto

随机推荐

  • 如何将plot语句放在if语句中

    我想在价格上绘制权益曲线 将该策略与简单的买入并持有进行比较 为了使图表有用 权益曲线可以从初始权益开始 或者与图表上的第一个价格一致 或者根本没有权益曲线 具体取决于手动输入 使用下面的代码 我得到这个 第 xx 行 无法在本地范围内使用
  • 如何使用 to_clipboard() 提供 DataFrame 的可复制副本

    2018 09 18 reproducible dataframe ipynb https github com trenton3983 stack overflow blob master complete solutions 2018
  • 不正确的整数值:“”表示列错误

    我收到 不正确的整数值 列country id 有时我的下拉菜单隐藏在表单中 所以我不确定如何处理这种情况 这是我的代码 谢谢你的帮助 countryId isset POST country POST country 0 inserSQL
  • 在 JS 中短路空数组会产生意想不到的结果:`[] ||真==[]`

    在我的代码中我假设以下内容 短路是安全的 var holidayExpandBarOrOpeningHours expandBar holidayHours c prev openingHours 但令我惊讶的是 如果我们用 true 语句
  • 连接ggplot2中geom_jitter点的线[重复]

    这个问题在这里已经有答案了 我试图将这些点联系起来geom jitter df lt data frame x c 1 1 2 2 3 3 y c 1 1 2 3 6 5 z c A B A B A B ggplot df aes x x
  • 如何强制用户输入正整数?

    强制用户输入一个正整数并将用户置于循环中直到他们输入 所以我想要所有内容 包括不允许的字符超过 gt 0 我尝试了以下方法 while i lt 0 do printf please input a number that s positi
  • 将 TPoint 数组存储在 TObjectList 中

    我定义了一个对象列表来存储多个多边形 如 TF Polygon 此 TObjectList 内的 TPoint 数组 但使用我的对象列表的添加功能时 我收到访问冲突错误 type TFPolygon array of TPoint TFPo
  • Lync 在 FireFox 和 Chrome 中的存在

    我正在尝试让 Lync 状态指示器在 Internet Explorer FireFox 和 Chrome 上正常工作 根据这些参考文献 这是可能的 http blogs msdn com b tomholl archive 2013 03
  • 第二次启动时 Selenium Marionette 驱动程序出现 UnreachableBrowserException

    我目前正在玩 Selenium MarionetteWebDriver 在我的应用程序中 我想依次打开多个 Marionette 驱动程序 基本上是这样的 MarionetteDriver driver new MarionetteDriv
  • 使用一列作为键、另一列作为值从行数组生成关联数组

    我有一个 MySQL 结果集 每行有 2 个值 每次循环这些结果时 我都想将它们添加到一个数组中 我希望一个值作为键 另一个作为数组值 我尝试了这个 但它似乎不起作用 dataarray row id gt row data 如果我有 re
  • 允许在 Laravel 5.4 中使用用户名或电子邮件登录

    现在我已经按照 Laravel 文档了解如何在身份验证期间允许用户名 但它剥夺了使用电子邮件的能力 我想允许用户使用他们的用户名或电子邮件登录 我该怎么办 我已根据 Laravel 文档将此代码添加到 LoginController 中 并
  • Jquery AJAX 无法在 IE 7/8 上运行

    我正在尝试调试我的 ajax get post 在 IE 7 8 中不起作用的原因 这是我的代码 ajax type POST dataType html url places set member add data place id pl
  • 适用于 Linux 的 Dreamweaver 等效项 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 Linux 中与 Dreamweaver 等效的软件 它不是完全匹配 但它基于 Eclipse 这意味着超级跨平台时髦的 ja
  • 按小时分割时间间隔

    我有一个数据集 tbldataid TS EndTS gt HX32 3401 10 2 2017 11 49 34 PM 10 3 2017 12 01 57 AM gt HX32 3403 10 3 2017 12 02 48 AM 1
  • 如何获取 GitHub 操作工作流程的总构建时间?

    有没有办法获取 GitHub 操作工作流程的总构建时间 我在 GitHub API 和 GraphQL 中没有找到与此相关的任何内容 你要找的内容似乎在 github 文档中here https docs github com en res
  • 优化惰性集合

    这个问题是关于优化惰性集合的 我将首先解释问题 然后给出一些可能的解决方案的想法 问题在bold Problem Swift 预计运营Collections 为 O 1 一些操作 特别是prefix and suffix类类型 偏离类型且数
  • Java系统属性和环境变量

    系统属性有什么区别系统 getProperties http download oracle com javase 6 docs api java lang System html getProperties 28 29和环境变量系统 ge
  • git 命令使一个分支像另一个分支一样

    我正在尝试对一个进行更改的分支并将其恢复到与它所分歧的上游相同 这些更改都是本地的 并且已推送到 github 因此两者都不是git reset or git rebase确实可行 因为它们改变了历史 这对于已经推送的分支来说是一件坏事 我
  • 如何将类库的 Xml 文档包含在 NuGet 包中?

    我正在为 C 类库创建 NuGet 包 并且希望在该库中包含生成的 Xml 文档 这是我的 nuspec 文件
  • 找出一组数字的哪些组合加起来达到给定的总数

    我的任务是帮助一些会计师解决他们遇到的一个常见问题 给出交易清单和总存款 哪些交易是存款的一部分 例如 假设我有这个数字列表 1 00 2 50 3 75 8 00 我知道我的总存款是10 50 我可以很容易地看出它是由8 00 and 2