求一个多对多和一致匹配的算法。

qq_19740165 2017-07-13 01:17:56
已知有N个数字的List<int> A,和M个数字的List<int> B。
现要求找出N中任意数字组合之和,匹配等于M中的任意数字之和,N和M中的数据不可重复使用。用不到的数字可以不管。


A包含1000, 2000,5000
B包含1000, 7000, 1000
产生出
1000 - 1000
2000,5000 - 7000


A包含1000, 2000,5000
B包含3000, 7000
产生出
1000,2000 - 3000


A包含2000, 2000
B包含1000, 3000
产生出
2000,2000 - 1000,3000


A包含2000
B包含1000, 3000
产生出
无任何匹配
...全文
1524 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
三仙半 2017-07-13
  • 打赏
  • 举报
回复
以上算法,第一步,可以做到O(nlgn) 第二步,取决于去重后的项目个数,可以实现到阶乘级 第三步,改进为用FA和FB中数据项目少(m项)的列表去匹配多的(n项),可以做到O(mlgn)
三仙半 2017-07-13
  • 打赏
  • 举报
回复
我就是想到一个实现的思路,没考虑优化的问题。 1、对A和B进行递增排序,并去重。 2、分别生成A和B的组合列表FA和FB,并保持FA和FB递增有序,同时建立两个辅助列表SA和SB,用于保存FA、FB中各项由源列表中的哪些项目相加而成。 3、依次循环FA中的每个数据,去FB中执行折半查找,命中则输出。 为了方便管理,可以建立一个实体类Item,保存组合值,以及组合项列表,并实现比较方法及输出方法。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧