笛卡尔乘积的javascript版实现和应用
2019-08-31 09:00
169 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/KlausLily/article/details/100179597
笛卡尔乘积是指在数学中,两个集合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开源系统,所以可能文章尽量每周更新一次,欢迎大家共同学习进步。
更多推荐
vue高级进阶系列——用typescript玩转vu 7ff7 e和vuex
欢迎关注下方公众号,获取更多前端知识精粹和学习社群:
在公众号点击进群,可以加入vue学习小组,一起学习前端技术;
回复 学习路径,将获取笔者多年从业经验的前端学习路径的思维导图
趣谈前端
Vue、React、小程序、Node
前端 算法|性能|架构|安全
相关文章推荐
- cpufreq动态频率调节(Sofia3GR)浅析及应用层APK实现
- 【军哥谈CI框架】之JQuery实现全国城市级联菜单的应用
- android--实现通过点击链接打开apk(应用图标在桌面消失)
- Android应用启动优化:一种DelayLoad的实现和原理
- iOS应用主流UI架构实现
- 第八周项目三__对称矩阵压缩存储的实现与应用
- 使用腾讯bugly实现应用自动更新提示
- .Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何实现跳转地图
- UNIX环境下如何应用消息队列实现进程间通信
- Laucnher3如何实现给hotseat上的应用显示title
- Java Web应用下实现定时任务的简便方法
- WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现
- JMX+J2SE5.0实现Web应用的安全管理
- c#实现虚拟光驱--应用层(简单涉及驱动部分)
- 第九周项目2——对称矩阵压缩存储的实现与应用(1)
- 一种提升基于Anroid Camera API1/HAL1开发的相机应用拍照缩率图生成效率的实现方案
- 第九周 项目二(2) 对称矩阵压缩存储的实现与应用
- 数据结构学习系列三-单向循环链表(c++实现且应用模板)
- iOS 应用实现条形码扫描功能的方法
- 第九周项目2 —对称矩阵压缩存储的实现与应用(1)