笛卡尔乘积的javascript版实现和应用

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积,又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的全部可能有序对的其中一个成员 。javascript

例子

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。前端

通常的实现中,c语言,python,java实现的方式比较多,可是对于前端而言,也是有其实现意义的,vue

  • 好比淘宝的sku商品订单组合的实现就须要笛卡尔乘积,根据商品的子类型和不一样尺寸生成n种可能的组合
  • 某些状况下用于寻找连续日期中残缺的数据,能够先笛卡尔积作一个排列组合,而后和目标表进行关联,查找哪些数据缺乏了
  • MySQL的多表查询
  • 生成棋牌坐标

等等,只有你想不到的,没有它实现不了的。接下来就来看看他的具体实现吧!java

笛卡尔积的javascript实现

/* * @Author: Mr Jiang.Xu * @Date: 2019-08-31 00:05:33 * @Last Modified by: Mr Jiang.Xu * @Last Modified time: 2019-08-31 00:05:33 */
function cartesian(arr) {
    if (arr.length < 2) return arr[0] || [];
    return [].reduce.call(arr, function (col, set) {
        let res = [];
        col.forEach(c => {
            set.forEach(s => {
                let t = [].concat(Array.isArray(c) ? c : [c]);
                t.push(s);
                res.push(t);
            })
        });
        return res;
    });
}
复制代码

因为实现方法不少,这里就不一一举例了,上述实现方式的时间复杂度为O(n^3),还不是最优,因此有更好的实现方法欢迎留言实现哦~python

若是想学习更多js算法和数据结构,能够长按关注哦~ 因为最近工做变更,而且准备自研一套CMS开源系统,因此可能文章尽可能每周更新一次,欢迎你们共同窗习进步。react

更多推荐

相关文章
相关标签/搜索