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

笛卡尔乘积是指在数学中,两个集合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实现

1/* 2 * @Author: Mr Jiang.Xu 3 * @Date: 2019-08-31 00:05:33 4 * @Last Modified by: Mr Jiang.Xu 5 * @Last Modified time: 2019-08-31 00:05:33 6 */ 7function cartesian(arr) { 8 if (arr.length < 2) return arr[0] || []; 9 return [].reduce.call(arr, function (col, set) { 10 let res = []; 11 col.forEach(c => { 12 set.forEach(s => { 13 let t = [].concat(Array.isArray(c) ? c : [c]); 14 t.push(s); 15 res.push(t); 16 }) 17 }); 18 return res; 19 }); 20}

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

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

更多推荐

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )