像DBMS一样快速计算笛卡尔积

时间:2014-01-13 17:15:03

标签: java mysql algorithm cartesian-product

我研究过如何有效地计算两个任意集合的笛卡尔积,但我发现如果集合的大小变大,解决方案总是非常低效。我的问题是,像MySQL这样的数据库语言如何有效地完成这项任务,是否有算法或方式以数据库语言的方式模拟笛卡尔积??

PD:我正在使用java。

1 个答案:

答案 0 :(得分:0)

基本上,没有 - 如果你想要一套两套尺寸为n,m的笛卡尔积 - 笛卡尔积的大小为n*m - 你需要O(nm)算法来生成它。

但是,对于数据库语言,当您执行'join'之类的操作时,有时您不需要生成整个连接来获得答案 - 如果您稍后要做的只是计数物品,或总和。
这可以在Pig Latin COGROUP 运算符中显示,它只创​​建一个隐式联接,以便以后只使用大小或总和 - 而不是真正的笛卡尔积。如果在适当的情况下正确使用,这可能会更有效。