首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提出“子集运算”算法?

如何提出“子集运算”算法?
EN

Stack Overflow用户
提问于 2016-11-28 01:07:39
回答 1查看 75关注 0票数 3

我正在处理这个问题:

给定一个正数集(或多个集合),找出集合中某些元素组合的所有数字。组合指和、减法或乘积。

例如,如果A= {3,4,7},我们必须找出3,4,7,3+4,3*4,x-3-4,3+7,3*7,3*7倍,4+7,4*7,4*7,3+4+7,3+4*7,3+4-7倍,2,3+7-4倍.

幸运的是,我们的集合不大于10个数,但我无法找到一个算法来找到所有的解。你可以把这个问题看作是“子集和问题”(给定一个集合A和一个整数k,假设A包含一个元素和k的子集),而不是和,它是一个算子的组合,我们希望找到所有可能的k-值。

我试过了,但是很多可能的解决方案都没有找到。这是不正确的,但我只想展示我的想法的实质:(C++代码)

代码语言:javascript
复制
vector<int> analyze (vector<int> v) {

    if (v.size()==1)    return v[0];
    vector<int> result;
    vector<int> u = analyze(v.delete(1));   //u = analyze(v[1], ..., v[n])
    for (int i = 0; i < u.size(); i++) {
        result.add(v[0] + u[i]);
        result.add(v[0] * u[i]);
        result.add(abs(v[0] - u[i]));
    }
    result.add(v[0]);
    return result + u;  //Union
}

如果A= {a,b,c,d},此函数将不返回:

a*(c+b*d)

(a_b)+(c_d)

A-d+b

任何人都知道如何解决这个问题,或者任何有助于解决这个问题的参考书目?

EN

回答 1

Stack Overflow用户

发布于 2016-11-28 10:26:32

我建议生成所有的解析树(没有必要显式地这样做)。

假设我们有一个初始集的子集。如果有一个号码,我们就把它还回去。否则,我们将遍历所有操作。对于固定操作,我们迭代所有方法将集合划分为两个子集。我们可以递归地计算子集的所有可能表达式,然后使用此操作组合它们。

考虑到不允许使用某些数字这一事实,我们可以对给定集合的所有子集运行此算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40835792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档