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 相关文章推荐
JavaScript Array Flatten 与递归使用介绍
Oct 30 Javascript
JavaScript加强之自定义callback示例
Sep 21 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
Mar 17 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
用jquery获取自定义的标签属性的值简单实例
Sep 17 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 Javascript
JS实现动态添加外部js、css到head标签的方法
Jun 05 Javascript
js获取图片的base64编码并压缩
Dec 05 Javascript
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 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高级编程-函数-郑阿奇
2011/07/04 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
PHP使用函数用法详解
2018/09/30 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python生成器用法实例详解
2019/11/22 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
django 多数据库及分库实现方式
2020/04/01 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
信息员培训方案
2014/06/12 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
2016银行求职自荐信
2016/01/28 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
Python基础之Socket通信原理
2021/04/22 Python