我想找出一个算法来验证一个多重集是否是另一个多重集的子集和的并集,但是我自己挣扎了几个小时后失败了。
详情如下:
多重集 A:正整数集
Multiset B:一个正整数集(小于等于A,后面你会知道为什么)
算法功能:验证对于B中的所有数字,是否有一个数字或A中的数字之和可以匹配它们。A 中的每个数字只能使用一次,并且必须使用 A 中的所有数字。B 中的所有数字必须匹配。
一个澄清这一点的例子:假设 multiset A = {1, 3, 4, 4, 6} , B = {5, 6, 7}
那么算法会输出“TRUE”,因为5是1和4之和,6等于6,7是3和4之和。同时A中的所有数字都被使用且只使用一次,而A中的所有数字B 已检查。
但是对于A = {2, 6, 8}, B = {7, 9},算法会输出“FALSE”,虽然2+6+8 = 7+9,但是B中没有一个数字是A中的数字之和.
一些注意事项:
1 已知条件,A中的数字之和等于B中的数字之和。
2 如示例所示,某个数字可以出现多次。
3 多重集中的每个数字只能使用一次,因此如果在一个解中使用 3(得到 7),则不能在另一个解中再次使用它。数字 4 出现了两次,因此它可以用于两种解决方案。
4 一个数字有多种解法是可能的,(比如 7 可以是 1 和 6,也可以是 3 和 4),但有些(比如 7 可以是 1 和 6)在验证过程中可能是错误的。
5 Multiset A 不大,最多30个元素
我尽力而为,但我的解决方案始终无法涵盖多集 A 和 B 的所有条件。我认为解决方案显然超出了我的范围。
所以,我真的需要你们聪明人的帮助。请帮我。任何答案将不胜感激!