JavaScript 計算笛卡爾積__Java

來源:互聯網
上載者:User

這是一個用JavaScript實現笛卡爾積的例子。
注意:本文中所說的集合是指數學上的集合,不是es6裡的Set。

整體思路如下: 使用者傳入一個二維的數組,每個子數組都是一個要進行笛卡爾積計算的集合。返回一個二維數組,每個子數組都是一個有序對或者n元有序組。 當使用者傳入一個集合的時候,為了相容業務,返回形如:[[a],[b]…]的二維數組。 當使用者只傳入兩個集合計算的時候,普通的嵌套計算即可。 當使用者傳入3個或者3個以上的集合的時候,先計算最後兩個集合的結果,再依次把前面的集合與其進行計算。

實現代碼如下:

descates.js

/** * Created by Hawk on 2016/6/18. */var DescartesUtils = {    /**     * 如果傳入的參數只有一個數組,求笛卡爾積結果     * @param arr1 一維數組     * @returns {Array}     */    descartes1:function(arr1){        // 返回結果,是一個二維數組        var result = [];        var i = 0;        for (i = 0; i < arr1.length; i++) {            var item1 = arr1[i];            result.push([item1]);        }        return result;    },    /**     * 如果傳入的參數只有兩個數組,求笛卡爾積結果     * @param arr1 一維數組     * @param arr2 一維數組     * @returns {Array}     */    descartes2: function(arr1, arr2) {        // 返回結果,是一個二維數組        var result = [];        var i = 0, j = 0;        for (i = 0; i < arr1.length; i++) {            var item1 = arr1[i];            for (j = 0; j < arr2.length; j++) {                var item2 = arr2[j];                result.push([item1, item2]);            }        }        return result;    },    /**     *     * @param arr2D 二維數組     * @param arr1D 一維數組     * @returns {Array}     */    descartes2DAnd1D: function(arr2D, arr1D) {        var i = 0, j = 0;        // 返回結果,是一個二維數組        var result = [];        for (i = 0; i < arr2D.length; i++) {            var arrOf2D = arr2D[i];            for (j = 0; j < arr1D.length; j++) {                var item1D = arr1D[j];                result.push(arrOf2D.concat(item1D));            }        }        return result;    },    descartes3: function(list) {        var listLength = list.length;        var i = 0, j = 0;        // 返回結果,是一個二維數組        var result = [];        // 為了便於觀察,採用這種順序        var arr2D = DescartesUtils.descartes2(list[0], list[1]);        for (i = 2; i < listLength; i++) {            var arrOfList = list[i];            arr2D = DescartesUtils.descartes2DAnd1D(arr2D, arrOfList);        }        return arr2D;    },    //笛卡兒積組合    descartes: function(list)    {        if (!list) {            return [];        }        if (list.length <= 0) {            return [];        }        if (list.length == 1) {            return DescartesUtils.descartes1(list[0]);        }        if (list.length == 2) {            return DescartesUtils.descartes2(list[0], list[1]);        }        if (list.length >= 3) {            return DescartesUtils.descartes3(list);        }    }};

descartes.html

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title></title>    <script type="text/javascript" src="descartes.js"></script></head><body><div id="resultDiv"></div><script type="text/javascript">    var arr1 = [1,2,3];    var arr2 = ["a", "b", "c", "d"];    var list = [arr1, arr2];    var list2 = [        [1,2,3],        ["a", "b", "c"],        ["A", "B"],        ["啊","把","車","的"]    ];    var result = DescartesUtils.descartes(list2);    var html = "";    for (var i = 0; i < result.length; i++) {        html = html + result[i].join(",") + "<br>";    }    document.getElementById("resultDiv").innerHTML = html;</script></body></html>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.