java 笛卡尔积 数组_在JS中笛卡尔积算法与多重数组笛卡尔积(详细教程)

这篇文章主要介绍了JS笛卡尔积算法与多重数组笛卡尔积实现方法,结合实例形式分析了javascript根据对象或数组生成笛卡尔积的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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实现多重数组笛卡尔积

例子:

(function() {

dwn = function(a) {

document.writeln(a + "
")

};

//笛卡尔积

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] + ")");

}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值