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得到font-size属性值实现代码
Sep 30 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
JavaScript获取并更改input标签name属性的方法
Jul 02 Javascript
浅谈javascript中new操作符的原理
Jun 07 Javascript
vue实现可增删查改的成绩单
Oct 27 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
Dec 25 Javascript
socket.io学习教程之基本应用(二)
Apr 29 Javascript
微信小程序图片选择区域裁剪实现方法
Dec 02 Javascript
vue filters的使用详解
Jun 11 Javascript
vue实现同一个页面可以有多个router-view的方法
Sep 20 Javascript
JS字符串常用操作方法实例小结
Jun 24 Javascript
iview实现动态表单和自定义验证时间段重叠
Jan 10 Javascript
利用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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
php读取excel文件的简单实例
2013/08/26 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
jquery里的each使用方法详解
2010/12/22 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
树结构之JavaScript
2017/01/24 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Web制作验证码功能实例代码
2017/06/19 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
vue的常用组件操作方法应用分析
2018/04/13 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python备份文件的脚本
2008/08/11 Python
Python抓取百度查询结果的方法
2015/07/08 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
python如何写出表白程序
2020/06/01 Python
如何安装ruby on rails
2014/02/09 面试题
优秀教导主任事迹材料
2014/05/09 职场文书
森林防火标语
2014/06/23 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
2014年体育部工作总结
2014/11/13 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js