笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
A×B = {(x,y)|x∈A∧y∈B}
设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.
笛卡尔积的符号化为:
A×B={(x,y)|x∈A∧y∈B}
例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
对于两个数组很好解决,只需要循环即可,多重数组笛卡尔积只需要两个数组的基础上进行累计乘积就好了。
function cartesianProduct(...args) { let len = args.length; if (len <= 1) return args[0]; let curPos = 0; let result = []; while (len--) { if (result.length === 0) { result = args[curPos]; } else { const arr = []; result.forEach(prev => { args[curPos].forEach(cur => { arr.push(`${prev}-${cur}`); }); }); result = [].concat(arr); } curPos += 1; } return result; }
如果使用ES6的reduce函数,会让代码更精简和直观
function cartesianProduct(...args) { return args.reduce((prev, cur) => { const arr = []; prev.forEach(cp1 => { cur.forEach(cp2 => { arr.push(`${cp1}-${cp2}`); }); }); return arr; }); } // 测试 cartesianProduct([1, 2, 3], ["a", "b", "c"], ["11", "22", "33"])
本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
在Linux系统中,使用yum来安装Nginx的步骤如下:具体步骤更新软件包仓库:确保你的软件包仓库是最新的。运行以下命令来更新:<sp
之前贪便宜花了几百块买了华为云的ecs服务器,服务运行了一年多懒得换,但是最近华为云要求域名必须在华为云备案才可以解析,否则域名解析会被做阻断处理,于是索性把服务迁移到阿里云,毕竟阿里云的服务比华为云强的不是一点。linux用的不是很熟,尤其是装一些必备的服务,这次做个笔记...
俄罗斯方块是一款经典的拼图游戏,其核心算法包含方块生成、方块移动、旋转、碰撞检测等功能。我们这里重点介绍方块生成的算法,并使用JavaScript实现它。1.方块生成逻辑俄罗斯方块中的方块称为「Tetrominoes」,一共有7种不同的形状,每种形状由4个方块组成。它们通常...