我最近遇到了以下问题。给定一个向量列表(这里我指的是元组)都有整数条目,是否有一个包(语言不是太大的问题,越快越好,所以我猜C)很快就能确定何时有另一个整数向量原始列表的跨度?我需要对整数进行这种算术运算(没有除法)。我确信有一个,但想绕开漫长的文献综述。
答案 0 :(得分:2)
您可以使用PARI中的mathnf
函数计算包含生成向量作为列的矩阵的Hermite normal form。 HNF矩阵的列跨越相同的晶格,检查矢量是否在该晶格中是微不足道的。还有更多的图书馆能够计算出HNF - 谷歌是你的朋友。
答案 1 :(得分:2)
CVXOPT可能是一种选择。特别是,看看这个函数:
cvxopt.glpk.ilp = ilp(...)
Solves a mixed integer linear program using GLPK.
(status, x) = ilp(c, G, h, A, b, I, B)
PURPOSE
Solves the mixed integer linear programming problem
minimize c'*x
subject to G*x <= h
A*x = b
x[I] are all integer
x[B] are all binary
答案 2 :(得分:1)
或许LinBox就是您所需要的。
答案 3 :(得分:0)
答案 4 :(得分:0)
我所知道的最好的图书馆是:
Pari(不是GP,但是Pari库本身):http://pari.math.u-bordeaux.fr/
NTL(C ++):http://www.shoup.net/ntl/
IML:http://www.cs.uwaterloo.ca/~astorjoh/iml.html
我们开始在flint2中添加这种功能(特别是在fmpz_mat模块中):
https://github.com/fredrik-johansson/flint2
燧石的目的是让它尽可能快地完成,尽管矩阵的东西仍在大力发展中。