【问题标题】:Polynomial over final field library最终域库上的多项式
【发布时间】:2015-01-15 15:34:39
【问题描述】:

我正在尝试找到一个 C++ 库,它可以处理一些有限域 GF(2^n) 上的多项式,并支持矩阵表示,支持秩查找/逆,甚至解决 A=X*B。 我正在尝试使用 Linbox,但文档很少。 在对库的 Givaro 部分做了一些讨厌的事情后,我能够将整数转换为多项式表示,但我无法使用 Linbox 的排名/求解部分,因为它们似乎不处理多项式, 只有指数为 1 的素数基数 (GF(2))。

这是代码的一部分

LinBox::GivaroGfq GF28(2, 8);
typedef LinBox::BlasMatrix<LinBox::GivaroGfq> Matrix;
Matrix mat(GF28);
//...Resize to MxM and insert M^2 elements
unsigned long int r;
rank(r, mat);

在调试时,rank 函数总是将元素视为 GF(2) 之上的元素并返回不正确的值。

关于如何使用这个库的任何想法?有一个 GF(2^n) 的 MxM 元素的矩阵并将其求逆或求其秩或求解线性方程组?还是应该使用其他库?

【问题讨论】:

  • 我快速浏览了 LinBox 文档。似乎库的 Givaro 部分旨在处理以素数为模或以素数为模的某个幂的字段,GF28 似乎是数学模 256 而不是 Galios 字段。对于一个由 8 位数字组成的 Galios 字段,需要指定该字段所基于的 9 位多项式,我在 LinBox 文档中没有看到这是指定的。
  • 继续,LinBox 库似乎可用于 Reed Solomon 类型操作模块 929(素数),但不适用于有两层的 Galios 字段。第一层是 1 位数字模 2,在这种情况下,第二层是 8 位多项式模一些 9 位多项式。然后是使用 8 位多项式作为系数的多项式的第三层,但是这第三层不是域或环的一部分。
  • LinBox 库是否可以让您指定对数字的基本运算,例如加 (xor)、减 (xor)、乘(乘以 8 位多项式模 9 位多项式,使用 log表或 65k 查找表),然后划分(再次使用日志或查找表)?
  • 进一步查看文档,似乎如果您为原型 uint8_t(8 位值)创建 archetype.h 的替换,然后您可以定义运算符函数。请注意,否定不应该做任何事情,因为对于伽罗瓦域, a+b == a-b 。
  • 作为一个选项,我有一些 Reed Solomon 示例程序,其中包括可用于求解线性方程的矩阵求逆。如果有兴趣,我可以上传到我的网站下载,因为源代码有点太大,无法包含在回复中。

标签: c++ polynomials finite-field galois-field


【解决方案1】:

看起来 NTL 是解决方案。它提供了以一些多项式为模的 GF(2^n) 多项式的舒适实现,并且可以轻松处理矩阵(逆、求解等)。

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2012-08-27
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多