前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笛卡尔乘积的javascript版实现和应用

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

作者头像
徐小夕
发布2019-09-02 15:40:53
1.2K0
发布2019-09-02 15:40:53
举报
文章被收录于专栏:趣谈前端趣谈前端趣谈前端

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

例子

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

一般的实现中,c语言,python,java实现的方式比较多,但是对于前端而言,也是有其实现意义的,

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

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

笛卡尔积的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),还不是最优,所以有更好的实现方法欢迎留言实现哦~

如果想学习更多js算法和数据结构,可以长按关注哦~ 由于最近工作变动,并且准备自研一套CMS开源系统,所以可能文章尽量每周更新一次,欢迎大家共同学习进步。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣谈前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例子
  • 笛卡尔积的javascript实现
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档