我正在使用 GSL 函数生成排列,它工作正常并产生 4!排列。
gsl_permutation * p = gsl_permutation_calloc (4);
gsl_permutation_init (p);
do
{
gsl_permutation_fprintf (stdout, p, " %u");
printf("\n");
}
while (gsl_permutation_next(p) == GSL_SUCCESS);
return 0;
输出是
0 1 2 3
1 0 2 3
...... n!
我的问题是我想减少基于两个并行数组的排列数。
int value= {0,1,2,3};
int id = {1,1,3,3};
在生成“值”的排列之前我想要什么,它将减少元素的数量
伪代码
if id of value element==id of next value element
join that elements like below
newValue= {0_1,2_3}
so total no of elements are 2
I will then pass this 2 to generate permutation
result should be 2!
and after permutation if one of the permutation should be {1,0}
it will re-split it into {2,3,0,1}
我不知道我将如何在 C 中做到这一点。需要一些帮助。
谢谢