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 相关文章推荐
HTML 自动伸缩的表格Table js实现
Apr 01 Javascript
jQuery学习笔记之DOM对象和jQuery对象
Dec 22 Javascript
jQuery中:file选择器用法实例
Jan 04 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
javascript转换日期字符串为Date日期对象的方法
Feb 13 Javascript
简述AngularJS的控制器的使用
Jun 16 Javascript
详解vue-router传参的两种方式
Sep 10 Javascript
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
iview的table组件自带的过滤器实现
Jul 12 Javascript
使用webpack搭建pixi.js开发环境
Feb 12 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 Javascript
vue ref如何获取子组件属性值
Mar 31 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
php类中private属性继承问题分析
2012/11/01 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
PHP异常处理Exception类
2015/12/11 PHP
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
vue实现放大镜效果
2020/09/17 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python进阶教程之模块(module)介绍
2014/08/30 Python
使用Python抓取模板之家的CSS模板
2015/03/16 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python实现统计代码行的方法分析
2017/07/12 Python
Python中dict和set的用法讲解
2019/03/28 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
纽约海:Sea New York
2018/11/04 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
医学专业毕业生个人的求职信
2013/12/04 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
售房协议书
2014/08/19 职场文书
农业项目建议书
2014/08/25 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
2014年仓库工作总结
2014/11/20 职场文书
学校端午节活动总结
2015/02/11 职场文书
业务员岗位职责范本
2015/04/03 职场文书
农业项目投资意向书
2015/05/09 职场文书
教师学习心得体会范文
2016/01/21 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
Springboot中如何自动转JSON输出
2022/06/16 Java/Android