如何用C中的替换创建排列?
发布时间:2020-12-16 07:34:50 所属栏目:百科 来源:网络整理
导读:注意:在阅读templatetypedef的帖子之后,似乎我正在尝试计算一组自相关的笛卡尔积. 我并不完全确定我试图解决的问题是什么,但它似乎非常接近于替换我的排列. 所以基本上,我的问题是这个. 给定一个数组,例如: {1,2,3} 比如说2. 我需要输出: {1,1},{1,2},3},
注意:在阅读templatetypedef的帖子之后,似乎我正在尝试计算一组自相关的笛卡尔积.
我并不完全确定我试图解决的问题是什么,但它似乎非常接近于替换我的排列. 所以基本上,我的问题是这个. {1,2,3} 比如说2. {1,1},{1,2},3},{2,... 如果大小是3,那么它将是 {1,1,3,1}... 我该怎么做? 出于我的问题的目的,我有一个15个数字的输入大小,所以我想我可以创建15个for循环,但这对我来说似乎是一个黑客. 谢谢. 编辑:在我不确定我在问什么以及我实际需要什么基本上是同样的问题后,我编辑了我的问题. 解决方法
你试图计算集合{1,3}的
Cartesian product本身十五次.您可以使用简单的递归算法非常优雅地执行此操作:
>要仅使用一次自身计算集合的笛卡尔积,请返回包含原始集合中每个元素的单个列表的集合. >递归计算集合的笛卡尔乘积n – 1次. >到目前为止生成的每个序列S: >将序列S x添加到输出集. >返回输出集. 在(有点低效)C代码: vector<vector<int>> CartesianPower(const vector<int>& input,unsigned k) { if (k == 1) { vector<vector<int>> result; for (int value: input) { result.push_back( {value} ); } return result; } else { vector<vector<int>> result; vector<vector<int>> smallerPower = CartesianProduct(input,k - 1); for (int elem: input) { for (vector<int> sublist: smallerPower) { sublist.push_back(elem); result.push_back(sublist); } } return result; } } 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |