js 笛卡尔积算法的实现代码,据对象或者数组生成笛卡尔积,并介绍了一个javascript多重数组笛卡尔积的例子,以及java实现笛卡尔积的算法与实例代码。

一、javascript笛卡尔积算法代码

例子,根据对象或者数组生成笛卡尔积。

  1. //笛卡儿积组合
  2. function descartes(list) {
  3. //parent上一级索引;count指针计数
  4. var point = {};
  5. var result = [];
  6. var pIndex = null;
  7. var tempCount = ;
  8. var temp = [];
  9. //根据参数列生成指针对象
  10. for (var index in list) {
  11. if (typeof list[index] == 'object') {
  12. point[index] = {
  13. 'parent': pIndex,
  14. 'count':
  15. }
  16. pIndex = index;
  17. }
  18. }
  19. //单维度数据结构直接返回
  20. if (pIndex == null) {
  21. return list;
  22. }
  23. //动态生成笛卡尔积
  24. while (true) {
  25. for (var index in list) {
  26. tempCount = point[index]['count'];
  27. temp.push(list[index][tempCount]);
  28. }
  29. //压入结果数组
  30. result.push(temp);
  31. temp = [];
  32. //检查指针最大值问题
  33. while (true) {
  34. if (point[index]['count'] + >= list[index].length) {
  35. point[index]['count'] = ;
  36. pIndex = point[index]['parent'];
  37. if (pIndex == null) {
  38. return result;
  39. }
  40. //赋值parent进行再次检查
  41. index = pIndex;
  42. } else {
  43. point[index]['count']++;
  44. break;
  45. }
  46. }
  47. }
  48. }
  49.  
  50. 调用方法:
  51.  
  52. var result = descartes({'aa':['a','b','c','d'],'bb':['$','%','^','&']});
  53. alert(result);//result就是笛卡尔积
 

二、js实现多重数组笛卡尔积

例子:

  1. <script>
  2. (function() {
  3. dwn = function(a) {
  4. document.writeln(a + "<br />")
  5. };
  6. //笛卡尔积
  7. var Cartesian = function(a, b) {
  8. var ret = [];
  9. for (var i = ; i < a.length; i++) {
  10. for (var j = ; j < b.length; j++) {
  11. ret.push(ft(a[i], b[j]));
  12. }
  13. }
  14. return ret;
  15. }
  16. var ft = function(a, b) {
  17. if (! (a instanceof Array)) a = [a];
  18. var ret = Array.call(null, a);
  19. ret.push(b);
  20. return ret;
  21. }
  22. //多个一起做笛卡尔积
  23. multiCartesian = function(data) {
  24. var len = data.length;
  25. if (len == ) return [];
  26. else if (len == ) return data[];
  27. else {
  28. var r = data[];
  29. for (var i = ; i < len; i++) {
  30. r = Cartesian(r, data[i]);
  31. }
  32. return r;
  33. }
  34. }
  35. })();
  36. var data = [['a', 'b', 'c'], [, , , ], ['A', 'B'], ['#', '@', '+'], ['Mary', 'Terry', 'KYO']];
  37. var r = multiCartesian(data);
  38. for (var i = ; i < r.length; i++) {
  39. dwn("(" + r[i] + ")");
  40. }
  41. </script>

为加深对笛卡尔积的理解,这里推荐一篇java笛卡尔积的方法教程://www.jb51.net/article/129585.htm,大家可以参考下。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

JS笛卡尔积算法与多重数组笛卡尔积实现方法示例的更多相关文章

  1. vue.js 强行赋值、刷新数组或者对象 方法之 $.set()

    实际开发过程中,数据交互的的时候需要赋值,刷新,但是不可能每次赋值之后都刷新整个页面,所以就要用到 vue.js方法 $.set(),能实现赋值对象的局部刷新 语法:Vue.set(object, k ...

  2. js解决IE不支持数组的indexOf()方法

    if (!Array.indexOf) {                                    Array.indexOf = function (obj) {            ...

  3. 数组/字符串/ Math / 方法示例

    数组 Array concat  数组的合并 <script> var north = ["北京","上海","深圳"]; va ...

  4. IE8不支持数组的indexOf方法

    在IE8下有个js错误,但是在其它浏览器下(Firefox, Chrome, IE9)下面都很正常.后来调试发现原因是在IE8下,js数组没有indexOf方法. 在使用indexOf方法前,执行一下 ...

  5. js多重数组完全展开

    有时候项目中会遇到多重数组,需要判断多重数组里面有没有要找的对象,强大的js就可以帮助我们 var arrTest = [1, [2, 3, [4]], 5, 6, [7, 8], [[9, [10, ...

  6. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  7. 19道常见的JS面试算法题

    最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...

  8. js的 算法 和 数据结构

    js的 算法 1.对一个对象数组按照对象某个属性进行排序  : https://www.cnblogs.com/webcabana/p/7460038.html 在做公交的项目中就碰到过这种算法问题, ...

  9. 总结下js排序算法和乱序算法

    其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...

随机推荐

  1. 《你不知道的JavaScript(上)》笔记——关于this

    this 指向函数的作用域是一种常见的误解,this 在任何情况下都不指向函数的词法作用域. 在 JavaScript 内部, 作用域确实和对象类似, 可见的标识符都是它的属性. 但是作用域" ...

  2. jQuery源码解读----part 1

    来源:慕课网 https://www.imooc.com/video/4392 jQuery整体架构 jQuery按我的理解分为五大块,选择器.DOM操作.事件.AJAX与动画, 那么为什么有13个模 ...

  3. SQL-W3School-高级:SQL UNIQUE 约束

    ylbtech-SQL-W3School-高级:SQL UNIQUE 约束 1.返回顶部 1. SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIM ...

  4. OpenCV3.4.1快速集成到Android studio中,10分钟搞定

    OpenCV3.4.1快速集成到Android studio中,10分钟搞定     转载 https://blog.csdn.net/yu540135101/article/details/8259 ...

  5. TransitionDrawable

    ayerDrawable的一个子类,TransitionDrawable只管理两层的Drawable!两层!两层! 并且提供了透明度变化的动画,可以控制一层Drawable过度到另一层Drawable ...

  6. Qt编写自定义控件32-等待进度条控件

    一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...

  7. 查看mycat日志

    查看日志: tail -f /usr/local/mycat/logs/wrapper.log

  8. 修改阿里源为Ubuntu 18.04默认的源

    步骤如下: Step1:备份/etc/apt/sources.list sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak Step2:在/ ...

  9. MySql中的count、NULL和空串的区别

    **1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...

  10. spring中的bean的生命周期

    bean的生命周期:bean的创建 —— 初始化 ——销毁的过程 容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法 在xml配置文件中是在 ...