分治法求笛卡尔积

wnjason 2014-09-10 11:36:46
哪位大神会用分治算法写两个集合的笛卡尔积? 有A,B两个集合|A|=|B|=10000,求出C集合,C集合中的元素为A集合中的元素乘以B集合中的元素。能否用分治算法实现?
...全文
180 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级能量泡泡 2014-09-16
  • 打赏
  • 举报
回复
引用 6 楼 lion_kangaxx 的回复:
[quote=引用 5 楼 daiweifeng 的回复:] 如果我是考官,所有用遍历方法的同学都应该给不及格
你贴个模板类和笛卡尔有任何关系么? 笛卡尔10000*10000用不用递归都得是大量计算,模板类是编译器特性,lz要的笛卡尔分治是一个数学问题,和具体代码实现关系不大,和数学设计关系更密切好不好。[/quote] 模板类本来就是抽象编程的一种C++编程解决方案,比一般编程要数学得多。 这里实际上只是用模板泛型写的方便点,你不用模板也可以用一样的接口转义实现,总之,你要真的去遍历,那是很2的方法。现在才10000x10000已经很大了,如果是10Wx10W呢?你打算咋整?
l4kangaxx 2014-09-16
  • 打赏
  • 举报
回复
引用 5 楼 daiweifeng 的回复:
如果我是考官,所有用遍历方法的同学都应该给不及格
你贴个模板类和笛卡尔有任何关系么? 笛卡尔10000*10000用不用递归都得是大量计算,模板类是编译器特性,lz要的笛卡尔分治是一个数学问题,和具体代码实现关系不大,和数学设计关系更密切好不好。
超级能量泡泡 2014-09-15
  • 打赏
  • 举报
回复
如果我是考官,所有用遍历方法的同学都应该给不及格
超级能量泡泡 2014-09-15
  • 打赏
  • 举报
回复
10000x10000 如果这是个题目或者工程,解决方案绝对不是遍历 应该是接口转定义 建立一个泛型的set,定义接口,这里给出的例子是bool exist(T val) const 的成员函数

template<typename T>
class Set
{
public:
    typedef T elem_type;
    bool exist(T val) const;

};

template<typename T>
class SeriesSet : public Set<T>
{
public:
    typedef T elem_type;
    bool exist(T val) const;

protected:
    std::vector<T> data;
};

template<typename S1, typename S2>
class DescartesSet : public Set<std::pair<typename S1::value_type,typename S2::value_type> >
{
public:
    typedef typename S1::value_type T1;
    typedef typename S2::value_type T2;
    typedef std::pair<T1,T2> elem_type;
    bool exist(std::pair<T1,T2> val) const
    {
         return m_pSetA->exist(val.first) && m_pSetB->exist(val.second); 
    }

public:
    DescartesSet(S1& _s1, S2& _s2) : m_pSetA(&_s1), m_pSetB(&_s2)
    {
    }

protected:
    S1* m_pSetA;
    S2* m_pSetB;
    
};

wnjason 2014-09-11
  • 打赏
  • 举报
回复
引用 2 楼 truelance 的回复:
如A = A1 ∪ A2, B = B1 ∪ B2 则A * B = A1*B1 ∩ A1*B2 ∩ A2*B1 ∩ A2*B2 可以进一步递归展开
思想很好 可以算法实现吗?
熊熊大叔 2014-09-11
  • 打赏
  • 举报
回复
如A = A1 ∪ A2, B = B1 ∪ B2 则A * B = A1*B1 ∩ A1*B2 ∩ A2*B1 ∩ A2*B2 可以进一步递归展开
jiuchang 2014-09-11
  • 打赏
  • 举报
回复
笛卡尔积应该是一个遍历的结果吧,用分治法做什么

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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