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

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(使用前将#替换为@)

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

  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • cordova 使用什么 js“引擎”?

    Cordova 使用什么 JS 引擎 它是特定于平台的还是跨所有平台的一个标准 意味着 iOS 的 safari 和 Android 的 chrome 以及 Windows 可能的 IE 标准 或者跨所有平台的 Cordova JS 引擎
  • C 中的菱形数组排序

    我有以下 C 语言作业 我基本上需要一种方法而不是解决方案 我们有一个 13 x 13 的数组 在数组中 我们有一个需要考虑的菱形形状 该菱形之外的所有内容都初始化为 1 不重要 下面的 5 x 5 数组示例 x x 1 x x x 2 2
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • Python 给定 k 个分区的整数分区

    我正在尝试寻找或开发Python 的整数分区代码 仅供参考 整数分区将给定整数 n 表示为小于 n 的整数之和 例如 整数5可以表示为4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 我为此找到了许多解决方案 ht
  • 使用FFT算法计算

    给定在平面上的点 1 0 2 0 n 0 上发现的一组 n 个粒子电荷载流子 在 i 0 点发现的粒子电荷记为 Qi 作用在粒子上的力由以下公式给出 C is a Coulomb s constant 给出一个算法来计算 Fi 对于总复杂度
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 如何安全地将 CGFloat 降低或提高到 int?

    我经常需要在地板或天花板上安装CGFloat to an int 用于计算数组索引 我永远看到的问题floorf theCGFloat or ceilf theCGFloat 是浮点不准确可能会带来麻烦 那如果我的CGFloat is 2
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 如何确定算法函数的复杂度?

    您如何知道算法函数对于特定操作是否需要线性 常数 对数时间 它取决于CPU周期吗 您可以通过三种方式 至少 做到这一点 在网上查找算法 看看它是如何描述其时间复杂度的 根据输入大小 自己检查算法 查看嵌套循环和递归条件等内容 以及每个循环运
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机

随机推荐

  • 如何将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