jjzjj

Permutation

全部标签

c++ - 是否有类似 next_permutation 的函数,但用于重复排列?

我想做的是找到一维数组的每个排列及其内容的重复。例如intarray[]={1,2,3};for(i=0;i将返回:123132213etc...我希望函数返回什么:111112121211122221212113131311etc...是否有一个函数可以做到这一点?提前致谢,埃里克 最佳答案 您不是在进行排列,而只是在计数。例。如果您的枚举集{0,1}超过3位数,您将得到:000001010011100101110111看,这只是二进制计数。因此将您的元素集映射到n位数字,然后基于n的计数将为您提供正确的awnser

c++ - std::next_permutation Implementation Explanation 似乎有点低效?

我很好奇std:next_permutation是如何实现的,所以我提取了gnulibstdc++4.7版本并清理了标识符和格式以生成以下演示...#include#include#includeusingnamespacestd;templateboolnext_permutation(Itbegin,Itend){if(begin==end)returnfalse;Iti=begin;++i;if(i==end)returnfalse;i=end;--i;while(true){Itj=i;--i;if(*iintmain(){vectorv={1,2,3,4};do{for(in

c++ - 置换算法 C++

我尝试翻译一种算法,该算法在C++中生成n中k的所有排列:publicvoidcalculerEquipeTOT(ArrayListL,ArrayListF,intk){if(k==0){if(calculerPointsTOT(L)>this.pointsMeilleureEquipe){this.meilleureEquipe=L;this.pointsMeilleureEquipe=calculerPointsTOT(meilleureEquipe);}}else{for(Nageurx:F){ArrayListG=newArrayList(F);G.remove(G.index

c++ - 在数组中查找整数的有效分配(具有给定顺序的排列)

我在寻找一个好的算法来为不同数组中的某些整数生成每个可能的赋值时遇到一个普遍问题。假设我有n个数组和m个数字(我可以有比数字更多的数组,比数组更多的数字或与数字一样多的数组)。例如,我有数字1、2、3和三个数组:{}、{}、{}现在我想找到以下每个解决方案:{1,2,3},{},{}{},{1,2,3},{}{},{},{1,2,3}{1,2},{3},{}{1,2},{},{3}{},{1,2},{3}{1},{2,3},{}{1},{},{2,3}{},{1},{2,3}{1},{2},{3}所以基本上我想找到每个可能的组合,以将数字分配给不同的数组并保持顺序。所以在这个例子中,1

C++: "reset"std::next_permutation()

有没有办法“重置”std::next_permutation()?假设我想多次检查vector的排列。我唯一能找到的是交替地通过next_permutation和prev_permutation。谢谢 最佳答案 “重置”将对序列进行排序,例如使用std::sort.请注意,如果您想使用next_permutation枚举所有排列,您必须从排序序列开始。此外,std::next_permutation一旦再次达到字典序最小排列,将返回false。 关于C++:"reset"std::nex

c++ - 通过多线程程序 (C++) 打印 {0, 1, 2, 3} 的排列

我想打印一个由用C++11编写的多线程程序设置的{0,1,2,3}的排列。源码是这样的:#include#include#include#include#includeusingnamespacestd;voidfunc(intindex);intmain(){vectorthreads;for(inti=0;i我希望输出0123的排列,但我收到奇怪的结果,如下所示:022301330124我不明白这种奇怪的行为,尤其是我无法解释数字4的存在。这可能是初学者的错误,我还是感谢大家帮助我。 最佳答案 您正在通过引用捕获i:autova

c++ - 用特征随机排列矩阵的行/列

我正在使用Eigen并且我有一个矩阵:MatrixXix=MatrixXi::Random(5);我想使用随机绘制的排列(行和列只有一个排列)随机排列行和列,即如果我有一个发送索引[0,1,2,3,4]->[3,4,2,1,0]比我想用相同的排列对行和列重新排序。第1部分:我无法在网上找到PermutationMatrix的示例,而且我在理解语法方面遇到了麻烦。第2部分:如何获取随机置换的索引vector以传递给它?也许是std::random_shuffle?更新:这是一种(可能效率低下的)方法来获得一组打乱的索引:std::vectorperm;for(inti=0;i所以现在的问

c++ - 随机排列中第 n 项的高效计算

想象一下,我能够使用诸如Knuth洗牌之类的方法和使用key播种的种子随机数生成器来洗牌0到2^32之间的所有数字。从概念上讲,我需要两个数组(使用Z5而不是Z232为简洁起见):[2,0,1,4,3]//perm[1,2,0,4,3]//inv===p^-1如果我有这些数组,我可以高效地查找排列中的第n个元素,并找出purmutation值v中的元素;v=perm[n];n==inv[v];//true我不想存储两个16GB的uint数组来表示这个打乱后的集合,因为我对整个打乱后的序列在任何时候都不感兴趣。我只对第n个元素的值感兴趣。理想情况下,我想编写两个像这样工作的纯函数:uin

c++ - C++中M个盒子中N个球的组合列表

我想编写一个函数,生成一个元组数组,其中包含C++中M个盒子中N个球的所有可能排列。顺序(编辑:在结果列表中)并不重要,只是第一个必须是(N,0,...,0),最后一个必须是(0,0,...,N)。网上没找到这样的C++实现,只有char的排列或者排列个数的计算...有什么想法吗? 最佳答案 有一个巧妙的技巧可以解决这个问题。想象一下,我们拿了n个球和m-1个盒子,并将它们排成一排,长度为n+m−1(箱子混在球中)。然后将每个球放入其右侧的盒子中,并在右侧添加第m个盒子,用于放置剩余的所有球。这会在m个盒子中产生n个球的排列。很容易

c++ - 有没有实现排列操作的C++类?

是否有C++模板类实现了置换和置换群的操作?该类必须实现求积、求逆、乘法等。 最佳答案 我不知道一个,但它应该很容易实现。在内部,您可以将排列表示为vector,例如(1342756)是1-7发送1->1、2->3、3->4、4->2等的烫发,或者作为一组循环,例如(1)(234)(576),并根据这些执行操作。据推测,模板参数将是置换组的大小。 关于c++-有没有实现排列操作的C++类?,我们在StackOverflow上找到一个类似的问题: https:/