1

我正在使用 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 中做到这一点。需要一些帮助。

谢谢

4

0 回答 0