jjzjj

permutation

全部标签

c++ - 查找数组总数

我有一个由N个整数组成的数组A。我还有一个整数K。我想通过恰好应用以下操作K次,找出我可以从数组A中获得的不同数组的数量。选取数组中的某个元素并将其乘以-1数组A=[2,3,2]且k=2我有四种可能的数组1.[2,3,2]2.[-2,-3,2]3.[-2,3,-2]4.[2,-3,-2]这可以计算为∑nCr的总和,其中r是{k,k-2,k-4....}。编辑但是对于正数和负数的组合,假设我们的数组是A=[-1,2,3]和k=3,所有可能的组合都是1.[1,2,3]2.[-1,-2,3]3.[-1,2,-3]4.[1,-2,-3]总共4个数组,也总共4个数组。我刚刚提交了我认为应该正确的

c++ - shuffle/permute 内在函数如何为 256 位 pd 工作?

我正在努力思考_mm256_shuffle_pd和_mm256_permute_pd内在函数的工作原理。我似乎无法预测其中一项操作的结果。首先,_mm_shuffle_ps一切正常。我得到的结果是我所期望的。例如:floatb[4]={1.12,2.22,3.33,4.44};__m128a=_mm_load_ps(&b[0]);a=_mm_shuffle_ps(a,a,_MM_SHUFFLE(3,0,1,2));_mm_store_ps(&b[0],a);//3.332.221.124.44所以一切都在这里。现在我想用我目前在我的代码中使用的__m256d来尝试这个。据我发现,_mm

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