JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
js 笛卡尔积算法的实现代码,据对象或者数组生成笛卡尔积,并介绍了一个javascript多重数组笛卡尔积的例子,以及java实现笛卡尔积的算法与实例代码。
一、javascript笛卡尔积算法代码
例子,根据对象或者数组生成笛卡尔积。
- //笛卡儿积组合
- function descartes(list) {
- //parent上一级索引;count指针计数
- var point = {};
- var result = [];
- var pIndex = null;
- var tempCount = ;
- var temp = [];
- //根据参数列生成指针对象
- for (var index in list) {
- if (typeof list[index] == 'object') {
- point[index] = {
- 'parent': pIndex,
- 'count':
- }
- 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'] + >= list[index].length) {
- point[index]['count'] = ;
- 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 = ; i < a.length; i++) {
- for (var j = ; 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 == ) return [];
- else if (len == ) return data[];
- else {
- var r = data[];
- for (var i = ; i < len; i++) {
- r = Cartesian(r, data[i]);
- }
- return r;
- }
- }
- })();
- var data = [['a', 'b', 'c'], [, , , ], ['A', 'B'], ['#', '@', '+'], ['Mary', 'Terry', 'KYO']];
- var r = multiCartesian(data);
- for (var i = ; i < r.length; i++) {
- dwn("(" + r[i] + ")");
- }
- </script>
为加深对笛卡尔积的理解,这里推荐一篇java笛卡尔积的方法教程://www.jb51.net/article/129585.htm,大家可以参考下。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例的更多相关文章
- vue.js 强行赋值、刷新数组或者对象 方法之 $.set()
实际开发过程中,数据交互的的时候需要赋值,刷新,但是不可能每次赋值之后都刷新整个页面,所以就要用到 vue.js方法 $.set(),能实现赋值对象的局部刷新 语法:Vue.set(object, k ...
- js解决IE不支持数组的indexOf()方法
if (!Array.indexOf) { Array.indexOf = function (obj) { ...
- 数组/字符串/ Math / 方法示例
数组 Array concat 数组的合并 <script> var north = ["北京","上海","深圳"]; va ...
- IE8不支持数组的indexOf方法
在IE8下有个js错误,但是在其它浏览器下(Firefox, Chrome, IE9)下面都很正常.后来调试发现原因是在IE8下,js数组没有indexOf方法. 在使用indexOf方法前,执行一下 ...
- js多重数组完全展开
有时候项目中会遇到多重数组,需要判断多重数组里面有没有要找的对象,强大的js就可以帮助我们 var arrTest = [1, [2, 3, [4]], 5, 6, [7, 8], [[9, [10, ...
- 排序图解:js排序算法实现
之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...
- 19道常见的JS面试算法题
最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...
- js的 算法 和 数据结构
js的 算法 1.对一个对象数组按照对象某个属性进行排序 : https://www.cnblogs.com/webcabana/p/7460038.html 在做公交的项目中就碰到过这种算法问题, ...
- 总结下js排序算法和乱序算法
其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...
随机推荐
- 《你不知道的JavaScript(上)》笔记——关于this
this 指向函数的作用域是一种常见的误解,this 在任何情况下都不指向函数的词法作用域. 在 JavaScript 内部, 作用域确实和对象类似, 可见的标识符都是它的属性. 但是作用域" ...
- jQuery源码解读----part 1
来源:慕课网 https://www.imooc.com/video/4392 jQuery整体架构 jQuery按我的理解分为五大块,选择器.DOM操作.事件.AJAX与动画, 那么为什么有13个模 ...
- SQL-W3School-高级:SQL UNIQUE 约束
ylbtech-SQL-W3School-高级:SQL UNIQUE 约束 1.返回顶部 1. SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIM ...
- OpenCV3.4.1快速集成到Android studio中,10分钟搞定
OpenCV3.4.1快速集成到Android studio中,10分钟搞定 转载 https://blog.csdn.net/yu540135101/article/details/8259 ...
- TransitionDrawable
ayerDrawable的一个子类,TransitionDrawable只管理两层的Drawable!两层!两层! 并且提供了透明度变化的动画,可以控制一层Drawable过度到另一层Drawable ...
- Qt编写自定义控件32-等待进度条控件
一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...
- 查看mycat日志
查看日志: tail -f /usr/local/mycat/logs/wrapper.log
- 修改阿里源为Ubuntu 18.04默认的源
步骤如下: Step1:备份/etc/apt/sources.list sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak Step2:在/ ...
- MySql中的count、NULL和空串的区别
**1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...
- spring中的bean的生命周期
bean的生命周期:bean的创建 —— 初始化 ——销毁的过程 容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法 在xml配置文件中是在 ...