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 validate.js表单验证的基本用法入门
May 13 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
window.location.hash知识汇总
Nov 09 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
Node.js 实现简单小说爬虫实例
Nov 18 Javascript
自定义require函数让浏览器按需加载Js文件
Nov 24 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
使用vue完成微信公众号网页小记(推荐)
Apr 28 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 Javascript
JavaScript实现登录窗体
Jun 22 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
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
浅析JS运动
2015/12/28 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
Python聊天室实例程序分享
2016/01/05 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
《和我们一样享受春天》教学反思
2014/02/07 职场文书
大学运动会入场词
2014/02/22 职场文书
优秀经理获奖感言
2014/03/04 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
蜗居观后感
2015/06/11 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android