我想计算一组大小为X的大小为Y的所有排列。也就是说,如果我有(1,2,3)并且想要大小为2、3P2的所有排列,它将是(1,2)(1,3)(2,1)(2,3)(3,1)(3,2).GSL和C++STL都只提供我能看到的xPx。有人可以指出可以执行此操作的C/C++库或拼出一种快速且内存高效的算法吗?我正在尝试破解一个非常短的密码。我已经找出两个字母并决定进行暴力攻击。我有“ouglgouyakl”并且正在根据一本非常好的字典检查每个排列。我已经消除了2个字母,所以它的24P7或1,744,364,160种可能性还不错。我现在有一个Perl程序正在运行,所以这将是对编程时间+运行时间的总效
我已经能够使用std::next_permutation(c++)等解决以下问题,但我现在正在更笼统地考虑它,并且非常想形成一个表达,因为这种类型的问题似乎很适合自己-尽管我到目前为止还没有任何运气。问题是:给定一场有N名参赛者参加的运行比赛,恰好有M名参赛者获得与他们衬衫上号码相同的位置的概率是多少。其中M到目前为止我做了什么:会有N个!比赛结束的方式,我试过解决这个问题的一个小变体,其中包括3或4个参赛者满足条件的所需人数为2。在这两种情况下,对于2人以特定顺序完成的概率为1/2我想知道是否已经有某种表达式可以处理所有情况?部分代码:#include#include#include
注意:在阅读了templatetypedef的帖子后,我似乎在尝试多次计算集合与自身的笛卡尔积。我不完全确定我要解决的问题叫什么,但对我来说它似乎非常接近替换排列。基本上,我的问题是这样的。给定一个数组,例如:{1,2,3}和尺寸,比如2。我需要输出:{1,1},{1,2},{1,3},{2,1},{2,2},...如果大小为3,则为{1,1,1},{1,1,2},{1,1,3},{1,2,1},{1,2,2},{1,2,3},{1,3,1}...我该怎么做?就我的问题而言,我的输入大小为15个数字,所以我想我可以创建15个for循环,但这对我来说似乎是一个hack。谢谢。编辑:在不确
我想要一个函数,它可以从一组n个整数(0到n-1)中产生k个伪随机值,而不重复任何先前的结果。k小于或等于n。O(n)内存是NotAcceptable因为n的大小很大以及我需要重新洗牌的频率。这些是我到目前为止考虑过的方法:数组:通常,如果我想要无重复的随机值,我会打乱一个数组,但那是O(n)内存。n可能太大而无法工作。longnextvalue(void){staticlongarray[4000000000];staticints=0;if(s==0){for(inti=0;in态PRNG:有多种随机数生成器可以设计为具有n的周期。并访问n那个时期的独特状态。最简单的例子是:lon
我遇到了这个problem.要求计算在4x3网格中可以制作特定长度的锁定图案的方式数,并遵循规则。路径中可能有些点不能包含一个有效的模式具有以下属性:一个图案可以用它第一次接触的点序列来表示(与绘制图案的顺序相同),从(1,1)到(2,2)的图案是与从(2,2)到(1,1)的模式不同。对于模式表示中的每两个连续点A和B,如果连接A和B的线段经过其他一些点,则这些点也必须在序列中并且在A和B之前,否则模式将无效。例如,以(3,1)开始然后(1,3)的模式表示是无效的,因为该段通过(2,2)而它没有出现在(3,1)之前的模式表示中,并且正确的这种模式的表示是(3,1)(2,2)(1,3)。
随机问题。我正在尝试创建一个程序来生成伪随机分布。我正试图找到适合我需要的伪随机算法。这些是我的担忧:1)我需要一个输入来在每次使用时生成相同的输出。2)它需要足够随机,以至于查看输入1的输出的人看不到输入1的输出与输入2的输出之间没有任何联系(等等),但不需要密码安全或真正随机。3)它的输出应该是一个介于0和(29^3200)-1之间的数字,该范围内的每个可能的整数都是一个可能的且同样(或接近)可能的输出。4)我希望能够保证410个输出序列的每个可能排列也是连续输入的潜在输出。换句话说,0到(29^3200)-1之间的410个整数的所有可能分组应该是顺序输入的潜在输出。5)我希望该函
我有一个项目涉及3D数组的大量排列(arma::Cube)。特别是,所需的排列是通过切片交换列。在Matlab中,这是通过permute(cube,[1,3,2])有效计算的在Python中numpy.transpose(cube,axis=[0,2,1]).不幸的是Armadillo没有permute自行发挥作用。我尝试过不同的方法,但与Matlab相比,它们都相当慢。我想知道在Armadillo中排列(相当大的)立方体的更快方法是什么。使用gprof分析代码,大部分时间都花在了我在下面尝试过的置换函数上,而在Matlab中,对于同一个移植项目,大部分时间都花在了SVD或QR矩阵分解
我在将这个用于显示给定整数集的所有排列的递归算法转换为迭代算法时遇到了一些困难。voidgetPermutationsR(intv[],intn,inti){if(i==n){//Displaycontentsofv}else{for(intj=i;j这是我目前的尝试,它是完全错误的,但如果不对问题使用native迭代算法,我看不出有任何方法可以更正它。我的一半尝试让我“弹出”多于“推送”(当我尝试访问空堆栈中的元素时导致错误),而另一半我“推送”多于“弹出”(无限循环)。voidgetPermutationsI(intv[],intn,inti){stackiStack;stackj
我编写了以下代码并且运行良好。我只是无法理解它为什么起作用。更具体地说,为什么我们必须先对数组进行排序才能使用std::next_permutation,它不能从任何配置开始吗?最让我困扰的部分是我不明白为什么我们必须写sort(sides,sides+3)和next_permutation(sides,sides+3)为什么是“+3”!因为我在数组中有三个元素?如果我使用任意数量的元素怎么办?boolvalid(intsides[],ofstream&outfile){inti=0;for(;isides[2]);else{outfile 最佳答案
我有一个由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个数组。我刚刚提交了我认为应该正确的