JS笛卡尔积算法与多重数组笛卡尔积实现方法示例


Posted in Javascript onDecember 01, 2017

本文实例讲述了JS笛卡尔积算法与多重数组笛卡尔积实现方法。分享给大家供大家参考,具体如下:

js 笛卡尔积算法的实现代码,据对象或者数组生成笛卡尔积,并介绍了一个javascript多重数组笛卡尔积的例子,以及java实现笛卡尔积的算法与实例代码。

一、javascript笛卡尔积算法代码

例子,根据对象或者数组生成笛卡尔积。

//笛卡儿积组合
function descartes(list) {
  //parent上一级索引;count指针计数
  var point = {};
  var result = [];
  var pIndex = null;
  var tempCount = 0;
  var temp = [];
  //根据参数列生成指针对象
  for (var index in list) {
    if (typeof list[index] == 'object') {
      point[index] = {
        'parent': pIndex,
        'count': 0
      }
      pIndex = index;
    }
  }
  //单维度数据结构直接返回
  if (pIndex == null) {
    return list;
  }
  //动态生成笛卡尔积
  while (true) {
    for (var index in list) {
      tempCount = point[index]['count'];
      temp.push(list[index][tempCount]);
    }
    //压入结果数组
    result.push(temp);
    temp = [];
    //检查指针最大值问题
    while (true) {
      if (point[index]['count'] + 1 >= list[index].length) {
        point[index]['count'] = 0;
        pIndex = point[index]['parent'];
        if (pIndex == null) {
          return result;
        }
        //赋值parent进行再次检查
        index = pIndex;
      } else {
        point[index]['count']++;
        break;
      }
    }
  }
}

调用方法:

var result = descartes({'aa':['a','b','c','d'],'bb':['$','%','^','&']});
alert(result);//result就是笛卡尔积

二、js实现多重数组笛卡尔积

例子:

<script>
(function() {
  dwn = function(a) {
    document.writeln(a + "<br />")
  };
  //笛卡尔积
  var Cartesian = function(a, b) {
    var ret = [];
    for (var i = 0; i < a.length; i++) {
      for (var j = 0; j < b.length; j++) {
        ret.push(ft(a[i], b[j]));
      }
    }
    return ret;
  }
  var ft = function(a, b) {
    if (! (a instanceof Array)) a = [a];
    var ret = Array.call(null, a);
    ret.push(b);
    return ret;
  }
  //多个一起做笛卡尔积
  multiCartesian = function(data) {
    var len = data.length;
    if (len == 0) return [];
    else if (len == 1) return data[0];
    else {
      var r = data[0];
      for (var i = 1; i < len; i++) {
        r = Cartesian(r, data[i]);
      }
      return r;
    }
  }
})();
var data = [['a', 'b', 'c'], [1, 2, 3, 4], ['A', 'B'], ['#', '@', '+'], ['Mary', 'Terry', 'KYO']];
var r = multiCartesian(data);
for (var i = 0; i < r.length; i++) {
  dwn("(" + r[i] + ")");
}
</script>

为加深对笛卡尔积的理解,这里推荐一篇java笛卡尔积的方法教程:https://3water.com/article/129585.htm,大家可以参考下。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery自动完成插件(autocomplete)应用之PHP版
Dec 15 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
JS JQUERY实现滚动条自动滚到底的方法
Jan 09 Javascript
jquery插件corner实现圆角边框的方法
Mar 09 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
纯JS打造网页中checkbox和radio的美化效果
Oct 13 Javascript
AngularJS入门教程之模块化操作用法示例
Nov 02 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
Sep 10 Javascript
JavaScript解析机制与闭包原理实例详解
Mar 08 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
利用JS测试目标网站的打开响应速度
Dec 01 #Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 #Javascript
javascript按顺序加载运行js方法
Dec 01 #Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
Dec 01 #Javascript
javascript Function函数理解与实战
Dec 01 #Javascript
React Native react-navigation 导航使用详解
Dec 01 #Javascript
分析JS单线程异步io回调的特性
Dec 01 #Javascript
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
css3中transition属性详解
2014/09/02 HTML / CSS
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
后勤主管工作职责
2013/12/07 职场文书
表彰先进的通报
2014/01/31 职场文书
大型会议策划方案
2014/05/17 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
走群众路线学习笔记
2014/11/06 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
详解vue身份认证管理和租户管理
2021/05/25 Vue.js