ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 又一年了

[求助] 组合求和,求一段代码。先谢谢各位老师了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-5-12 23:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
第一次听说还有减法要求的……

另外,原始数据中还有两对重复的,即 二个5和 二个18……
于是, 5-5 和 18-18 可以在所有解中合法存在……

楼主的问题,能否说明一下需求的背景?

TA的精华主题

TA的得分主题

发表于 2013-5-12 23:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 香川群子 于 2013-5-12 23:33 编辑
20120501 发表于 2013-5-12 21:53
类似这类排列组合的情况在算法上确实是一个挺不错的东东。经常玩这些确实能够锻炼我们的一些思考问题的方式 ...


我计算是含正负值,=20的组合有 108,900个。 远远不止你说的 2945个组合。

当然这里面还含有重复,即正/负同时出现的情形。→ 这个要看楼主的解释了。

TA的精华主题

TA的得分主题

发表于 2013-5-13 08:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2013-5-12 23:26
我计算是含正负值,=20的组合有 108,900个。 远远不止你说的 2945个组合。

当然这里面还含有重复,即 ...

我的解答里只列了“组合”,没有进行排列。
我在代码里面过滤掉同时出现的情况,比如:A1-A1,这种东西可以无限循环。
但是允许出现A1=5,A3=5这种情况。

另外,楼主给的是25,20的我没有计算。

TA的精华主题

TA的得分主题

发表于 2013-5-13 14:42 | 显示全部楼层
呵呵,还是我的递归算法代码速度最快。

kagawa_summary.zip

30.41 KB, 下载次数: 48

TA的精华主题

TA的得分主题

发表于 2013-5-13 14:50 | 显示全部楼层
20120501 发表于 2013-5-12 21:53
类似这类排列组合的情况在算法上确实是一个挺不错的东东。经常玩这些确实能够锻炼我们的一些思考问题的方式 ...

我也是递归组合算法……速度2秒以内。

而你的代码运行需要10秒以上。

差异可能在这里:
① 我对数据进行了适当的预处理,省去了今后的重复处理时间
② 数据事先从小到大排序。省去了今后的排序时间。
(偷懒用了工作表排序。如果用代码排序的话可以用插入排序)
③ 计算结果时,用差值逼近法。这样可以在最后一步提前搜寻、剪枝,降低了递归次数。
④ 数值转换为长整形计算。

呵呵。

TA的精华主题

TA的得分主题

发表于 2013-5-13 15:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
小花鹿 发表于 2013-5-12 13:02
占位等高手。

楼主这个题目确实不太好弄。

如果都是正数求和的话,我的最最高效递归代码计算速度比我今天写的正负数组合求和代码速度还要快100倍。

速度慢的原因在于:
每一次都要比对是否该元素是否已经被使用。=instr方法,很慢。
或许可以改为布尔型数值的数组比对,速度可以提高一些。

但是最最关键的时,我研究出来的两大剪枝算法因为正负数的混乱而无法使用了。



TA的精华主题

TA的得分主题

发表于 2013-5-13 22:36 | 显示全部楼层
香川群子 发表于 2013-5-13 14:42
呵呵,还是我的递归算法代码速度最快。

速度上确实快很多,对于我来说受益匪浅,非常感谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-14 22:31 | 显示全部楼层
论坛真是高手云集啊!想不到困恼2年多的问题竟然那么快就有希望了。狂喜!
谢谢20120501 、谢谢dsmch以及其他的老师。
天书一般,待我慢慢摸索,转化为我需要的形式。

TA的精华主题

TA的得分主题

发表于 2013-5-15 08:14 | 显示全部楼层
又一年了 发表于 2013-5-14 22:31
论坛真是高手云集啊!想不到困恼2年多的问题竟然那么快就有希望了。狂喜!
谢谢20120501 、谢谢dsmch以及其 ...

怎么没有提到我……我的代码可是功能最强、速度最快的!

楼主弱爆了……

TA的精华主题

TA的得分主题

发表于 2013-5-15 21:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
代码做了改进,可以计算全部组合解。

结果输出到txt文件。
以及,如果解的个数<65536则可输出到工作表。


正负值组合求和 by kagawa.rar

23.16 KB, 下载次数: 60

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-9 18:07 , Processed in 0.024151 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表