笛卡爾乘積是指在數學中,兩個集合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開源系統,所以可能文章儘量每週更新一次,歡迎大家共同學習進步。
更多推薦
- JavaScript 中的二叉樹以及二叉搜尋樹的實現及應用
- 用 JavaScript 和 C3 實現一個轉盤小遊戲
- 教你用200行程式碼寫一個偶像拼拼樂H5小遊戲(附原始碼)
- 基於react/vue生態的前端整合解決方案探索與總結
- 9012教你如何使用gulp4開發專案腳手架
- 如何用不到200行程式碼寫一款屬於自己的js類庫)
- 讓你瞬間提高工作效率的常用js函式彙總(持續更新)
- 一張圖教你快速玩轉vue-cli3
- 3分鐘教你用原生js實現具有進度監聽的檔案上傳預覽元件
- 3分鐘教你用原生js實現具有進度監聽的檔案上傳預覽元件
- 使用Angular8和百度地圖api開發《旅遊清單》
- js基本搜尋演算法實現與170萬條資料下的效能測試
- 《前端演算法系列》如何讓前端程式碼速度提高60倍
- 《前端演算法系列》陣列去重
- vue高階進階系列——用typescript玩轉vue和vuex
- 前端三年,談談最值得讀的5本書籍