我正在学习当前使用NTL库,尤其是稍后的LLL算法。有没有人知道在NTL库中使用LLL函数?提前谢谢。
答案 0 :(得分:3)
来自“文档”:
long
[G_]LLL_{FP,QP,XD,RR} (mat_ZZ& B, [ mat_ZZ& U, ] double delta = 0.99,
long deep = 0, LLLCheckFct check = 0, long verbose = 0);
您可以通过调用例如
来使用LLL功能LLL_FP(B)
后缀FP
标记精度,因为计算是在浮点运算中完成的。这样做是为了加速LLL算法。如果您需要更好的预处理,可以选择其他后缀QP
,XD
或RR
。
请注意,B
必须是ZZ
类型的矩阵。 NTL使用矩阵的行作为晶格的基础。 (我遇到了这个问题,因为C.P. Schnorr教授将格子基础写为列)
在减少之后,LLL减少的基础会覆盖输入矩阵B
。如果您需要转换矩阵U
,那么执行reducktioin U*B = B_LLL
,您可以调用
LLL_FP(B, U)
我希望这会有所帮助。