ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 三坛老窖

[分享] 基于哈希查找的老窖字典

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-1 11:44 | 显示全部楼层
在VBA中 用面向对象编程的思想,值得肯定!!!

TA的精华主题

TA的得分主题

发表于 2017-10-1 11:46 来自手机 | 显示全部楼层
下载好好学习 感谢老师分享!

TA的精华主题

TA的得分主题

发表于 2017-10-1 12:06 来自手机 | 显示全部楼层
另外借帖来真心实意喊个口号 我爱祖国 祖国万岁!挥旗ing……

TA的精华主题

TA的得分主题

发表于 2017-10-1 17:01 | 显示全部楼层
越来越需要大数据处理,太强了,想请教下老师,凑数案例中,除了刚好凑整与目标数完全一样的,可否还能按最接近目标数(最大值)的顺序,将剩余数的凑合方案也列出来

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-1 19:34 | 显示全部楼层
本帖最后由 三坛老窖 于 2017-10-1 19:37 编辑
aman1516 发表于 2017-10-1 17:01
越来越需要大数据处理,太强了,想请教下老师,凑数案例中,除了刚好凑整与目标数完全一样的,可否还能按最 ...

可以的,所有小于目标和值的子集和都在字典中,只要加一个循环(以最小单位为步长从下限到上限)即可获取在限定范围内的所有子集。也可在求子集和过程(Subset_SingleDict)中将
                    If curKey = Sum Then
                        GetSubsetNo vTemp(j), i, i
                        If Solve >= MaxSolve Then GoTo 200
                    ElseIf curKey < Sum Then
                        .Item(curKey) = .Item(curKey) & "," & i
                    End If
更改为:
                    If curKey <= 子集和上限 and  curKey >= 子集和下限 Then
                        GetSubsetNo vTemp(j), i, i
                        If Solve >= MaxSolve Then GoTo 200
                    ElseIf curKey < 子集和下限 Then
                        .Item(curKey) = .Item(curKey) & "," & i
                    End If
即可。


TA的精华主题

TA的得分主题

发表于 2017-10-1 21:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
三坛老窖 发表于 2017-10-1 19:34
可以的,所有小于目标和值的子集和都在字典中,只要加一个循环(以最小单位为步长从下限到上限)即可获取 ...

谢谢,基本明白,但若每个数据前面方案用过之后,后面不能再用,并求出最优化组合方案呢……似乎又转到规划求解或优化这类问题去了

TA的精华主题

TA的得分主题

发表于 2017-10-1 23:04 来自手机 | 显示全部楼层
aman1516  2017-10-1 21:08
лл淽ù治 ...

()
[url=http://club.excelhome.net/forum.php?mod=viewthread&tid=1359141&extra=&mobile=2][/url]

TA的精华主题

TA的得分主题

发表于 2017-10-1 23:12 | 显示全部楼层
aman1516 发表于 2017-10-1 21:08
谢谢,基本明白,但若每个数据前面方案用过之后,后面不能再用,并求出最优化组合方案呢……似乎又转到规 ...

请看【香川群子】的凑数
利用背包算法解决分组凑数问题


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-2 00:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
aman1516 发表于 2017-10-1 21:08
谢谢,基本明白,但若每个数据前面方案用过之后,后面不能再用,并求出最优化组合方案呢……似乎又转到规 ...

看你的提问,估计你也是在琢磨一维下料问题。
“若每个数据前面方案用过之后,后面不能再用”
这个可以实现。思路是这样的:
在提取一组子集后,在该子集对应的数据上做个标记,再在提取下一个子集时,如果碰上已被提取的数据时,则丢弃之。
实现方法是在反向追踪和值来源的子过程中,在那条递归语句前加一个判断即可。
“求出最优化组合方案”
不知这个最优化组合方案的具体含义,如果我猜得没错,是一维下料的最优方案,那么下一步就是根据前面提取的子集(也就是下料问题中的下料方式),用整数规划或线性规划求最优解。这是一般公认的通行做法。
呵呵,这个似乎离题了

TA的精华主题

TA的得分主题

发表于 2017-10-2 09:43 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 16:36 , Processed in 0.050995 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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