笛卡尔积

笛卡尔积
定义:
  对于集合A和集合B,以A中的元素作为第一元素,B中的元素作为第二元素组成序偶,所有这样的序偶组成的集合称为A和B的笛卡尔积,记作A × B,形式化表达为

A×B={<x,y>|x∈A,y∈B}

A × B = \{ | x ∈ A,y ∈ B \}
对于n个集合 A1,A2,A3,…,An A_1 ,A_2,A_3, \ldots ,A_n,集合

A1×A2×A3×⋯×An={<a1,a2,a3,…,an>|ai∈Ai(i=,1,2,3,…,n)}

A_1\times A_2 \times A_3 \times \cdots \times A_n = \{ |a_i \in A_i(i = ,1,2,3,\ldots ,n)\}
称为 A1,A2,A3,…,An A_1,A_2,A_3,\ldots ,A_n的笛卡尔积。

伪码:
  src与result可以看做二维的数据存储结构,deep递归深度(如果把src看成二维的数组,则deep就为src的行数),temp为辅助变量。

recursive(src, result,deep,temp)if deep < src.size-1        //判断是否到了倒数第二行if src[deep].size == 0  //判断该行是否为空recursive(src, result,deep+1,temp)//递归下一行elsefor i=0 to src[deep].size //遍历该行上的所有元素new temp2temp2=temptemp2.add(src[deep][i]) recursive(src, result,deep+1,temp)//递归elseif deep == src.size-1     //递归到了最后一行if src[deep].size == 0result.add(temp) //加入结果集elsefor i=0 to src[deep].size //遍历最后一行的元素new temp2temp2=temptemp2.add(src[deep][i])result.add(temp)

c++代码:

//笛卡尔积之递归算法
#include <iostream>
#include<cstdio>
#include<vector>
#include<string>
using namespace std;
void recursive(vector<vector<string>> src,vector<vector<string>> &result,int deep,vector<string>& temp){if(deep<src.size()-1){if(src[deep].size()==0){recursive(src,result,deep+1,temp);}else{for(int i=0;i<src[deep].size();++i){vector<string> * temp2=new vector<string>(temp);temp2->push_back(src[deep][i]);recursive(src,result,deep+1, *temp2);}}}else{if(deep==src.size()-1){if(src[deep].size()==0){result.push_back(temp);}else{for(int i=0;i<src[deep].size();++i){vector<string> * temp2=new vector<string>(temp);temp2->push_back(src[deep][i]);result.push_back(*temp2);}}}}return ;
}
int main(){vector<vector<string>> src;vector<vector<string>> result;vector<string> temp;temp.push_back("1");temp.push_back("2");temp.push_back("3");src.push_back(temp);temp.pop_back();temp.pop_back();temp.pop_back();temp.push_back("a");temp.push_back("b");temp.push_back("c");src.push_back(temp);temp.pop_back();temp.pop_back();temp.pop_back();temp.push_back("A");temp.push_back("B");temp.push_back("C");src.push_back(temp);temp.pop_back();temp.pop_back();temp.pop_back();recursive(src,result,0,temp);cout<<"src:***************************************************"<<endl;for(int i=0;i<src.size();i++){for(int j=0;j<src[i].size();j++){cout<<src[i][j]<<"\t";}cout<<"\n";}cout<<"result**************************************************"<<endl;for(int i=0;i<result.size();i++){for(int j=0;j<result[i].size();j++){cout<<result[i][j]<<"\t";}cout<<"\n";}system("pause");return 0;
}

测试数据:

row\col 0 1 2
0 1 2 3
1 a b c
2 A B C

测试结果:

src:*****************************************
1 2 3
a b c
A B C
result**************************************************
1 a A
1 a B
1 a C
1 b A
1 b B
1 b C
1 c A
1 c B
1 c C
2 a A
2 a B
2 a C
2 b A
2 b B
2 b C
2 c A
2 c B
2 c C
3 a A
3 a B
3 a C
3 b A
3 b B
3 b C
3 c A
3 c B
3 c C
请按任意键继续…

离散学习--笛卡尔积相关推荐

  1. 没有良好数学基础,应该怎样学习人工智能?

    人工智能(Artificial Intelligence,AI)是一个覆盖许多下级学科的宽泛领域,本系列图书涵盖了当中的部分特定主题,而本书则是系列书的第1卷.接下来几小节将会对本系列图书和本卷一一进 ...

  2. 这套人工智能算法书已经出版了3卷,其中卷3深度学习和神经网络最受程序员喜欢

    人工智能算法系列图书以一种数学上易于理解的方式讲授人工智能相关概念,这也是本系列图书英文书名中"for Human"的含义. 本系列图书的每一卷均可独立阅读,也可作为系列图书整体阅 ...

  3. Paper Reading - 综述系列 - Hyper-Parameter Optimization(下)

    更多可见计算机视觉-Paper&Code - 知乎 目录 搜索策略 网格搜索 随机搜索 贝叶斯优化 结论 接着上一篇继续说 搜索策略 网格搜索 将每个超参数的搜索空间离散化为笛卡尔积.然后使用 ...

  4. 决策树构建算法之—C4.5

    这个网站值得收藏一下,原文链接:http://shiyanjun.cn/archives/428.html 决策树算法的优越性在于:离散学习算法进行组合总可以表达任意复杂的布尔函数,并不受数据集的限制 ...

  5. 【今日CV 计算机视觉论文速览 第147期】Tue, 23 Jul 2019

    今日CS.CV 计算机视觉论文速览 Tue, 23 Jul 2019 Totally 52 papers ?上期速览✈更多精彩请移步主页 Interesting: ?基于图像迁移的夜间车辆检测, 提出 ...

  6. Weakly-supervised Online Hashing

    Weakly-supervised Online Hashing 2021 ICME 要点: 1.通过考虑去噪标签.图像级语义表示以及图像的视觉特征,WOH可以生成在线场景下的社会图像哈希码,保留标签 ...

  7. 记录_20180417

    ***************@Date("2018-4-17")*************** ===首次审核=== # 首页设计及实现 # 首页功能导航 # 表单下掉 # 表格 ...

  8. 机器学习、模式识别、知识发现、数据挖掘等的书评

    [数字书评]机器学习.模式识别.知识发现.数据挖掘等的书评(一)来源: 肖寒的日志 你可能看到了标题以为我要推荐四个方面的书,但很遗憾的告诉你,这四个方面都是一回事,讲的内容都是那些:个别领域有自己的 ...

  9. 伪随机与真随机有什么不同?

    今日份离散学习:伪随机与真随机有什么不同? 随机很有趣. 真随机:你脑子里随便想几个数,想说啥说啥,这些数都没有联系,各个之间都是相互独立的. 伪随机:随机数是由随机种子根据一定的计算方法计算出来的数 ...

最新文章

  1. Spark学习之路(二)
  2. 第一记: JS变量类型判断(VUE源码解读)
  3. 小波阈值图像去噪的实现步骤
  4. List 集合转换为String
  5. php 5.5 xhprof for windows
  6. ios 筛选_LOL手游开始筛选玩家对安卓和IOS有不同要求,不达标可以放弃了
  7. 词频统计——三国人物出场次数统计
  8. c语言 算日期,C语言 · 日期计算
  9. Zookeeper案例之监听配置中心
  10. 【python】matplotlib绘图显示不了中文,且没有SimHei、FangSong等字体
  11. 沉浸式体验参加网络安全培训班,学习过程详细到底!
  12. 用c语言用*组成C字母,C语言字符集由字母,数字,空格,标点符号和特殊字符组成...
  13. POJ 1673 三角形垂心
  14. 解决Qt5.7.0 cannot find -lGL
  15. 【网络工程师精华篇】超实用!100个网络基础知识汇总,网络工程师必备!
  16. 在职场需看懂的几种表现
  17. Swagger无法渲染 Finished Loading Resource Information. Rendering Swagger UI...
  18. 信号完整性分析学习--17--反射
  19. 【C++】数组和指针的爱恨情仇。。。
  20. 编写游戏人物、剧情、对话的8大经验总结

热门文章

  1. 中间服务器代理解决跨域
  2. 闪电连接算法之Python实现
  3. 数论:欧几里得与扩展欧几里得算法
  4. nginx cache 总结
  5. 如何用Matlab进行曲线拟合
  6. C# 读取处理超大TXT文本文件
  7. 动态规划——多重背包问题
  8. TM1668 与 CT1668 驱动有差异?
  9. 《Microduino实战》——1.4 开源硬件
  10. linux 下如何添加用户、权限