排列
本章描述用于创建和操作排列的函数。置换p由0到n-1范围内的n个整数组成的数组表示,其中每个值pi发生一次,且只有一次。将排列p应用于向量v,得到一个新的向量v',其中v'i = vpi。例如,数组(0,1,3,2)表示一个排列,它交换一个四元素向量的最后两个元素。对应的恒等式排列是(0,1,2,3)。
注意,线性代数例程产生的排列对应于矩阵列的交换,因此在遍历向量的元素时,应该将其视为应用于v' = vP形式的行向量,而不是列向量。
本章描述的函数定义在头文件gsl_change .h中。
9.1 排列的结构体
gsl_permutation
typedef struct { size_t size; size_t * data; }gsl_permutation; |
排列定义为包含两个组件的结构体,包括排列大小和排列数组指针。排列数组的元素都是size_t类型。gsl_permutation结构是这样的:
9.2 排列的内存分配
gsl_permutation * gsl_permutation_alloc(size_t n)
本函数为大小为n的新排列分配内存。排列未初始化,且其元素未定义。如果希望创建初始化为标识的排列,请使用函数gsl_permutation_calloc()。如果没有足够的内存来创建排列,则返回空指针。
gsl_permutation * gsl_permutation_calloc(size_t n)
本函数为大小为n的新排列分配内存,并将其初始化为恒等式。如果没有足够的内存来创建排列,则返回空指针。
void gsl_permutation_init(gsl_permutation * p)
本函数将排列p初始化为恒等式,即(0,1,2,…,n - 1)。
void gsl_permutation_free(gsl_permutation * p)
本函数释放排列p使用的所有内存。
int gsl_permutation_memcpy(gsl_permutation * dest, const gsl_permutation * src)
本函数将排列src的元素复制到置换dest中,两个排列的大小必须相同。