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 相关文章推荐
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
Jul 08 Javascript
javascript强大的日期函数代码分享
Sep 04 Javascript
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
jQuery三级下拉列表导航菜单代码分享
Apr 15 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
jQuery Validate 数组 全部验证问题
Jan 12 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
通过扫小程序码实现网站登陆功能
Aug 22 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
Oct 28 Javascript
vue实现树状表格效果
Dec 29 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
用PHP4访问Oracle815
2006/10/09 PHP
php adodb操作mysql数据库
2009/03/19 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JS跨域问题详解
2014/11/25 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python使用SMTP发送qq或sina邮件
2017/10/21 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
thinkphp5 路由分发原理
2021/03/18 PHP
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
预备党员入党思想汇报
2014/01/04 职场文书
新员工欢迎词
2014/01/12 职场文书
火车的故事教学反思
2014/02/11 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
公司会议策划方案
2014/05/17 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
2015年小学总务工作总结
2015/07/21 职场文书