我正在尝试在NTL库上使用G_LLL_XD
函数。每当我以这种格式使用函数时:
G_LLL_XD(B, delta); ,
该计划有效。 但是,当我想更改默认的深度或修剪变量并以下列方式之一编写函数时:
G_LLL_XD(B, delta, deep, check, verbose);
G_LLL_XD(B, delta, prune, check, verbose);
在运行时,我收到此错误:
R610
- abort() has been called
并在命令提示符中显示:
"sorry...deep insertions not implemented"
我发现这很奇怪,因为每当我使用prune作为变量时,我都会遇到此崩溃错误,我不应该因为函数不应该寻找深度插入而是修剪,当我使用deep作为变量时变量并已深入实现,我仍然会收到错误。
有人可以帮我理解问题是什么或我如何解决这个问题?非常感谢你。
答案 0 :(得分:0)
我没有在NTL中找到LLL函数的参数prune
。但是BKZ还有一个。由于这两者都是接受正面的意外,它只是一个命名混乱。
注意:使用" deep"已经过时了,已经被弃用了#34;它是 建议使用BKZ_FP来实现更高质量的降低 此外,Givens版本不支持" deep"和设置
deep!= 0会在这种情况下引发错误。
因此您无法将G_LLL_XD
与deep != 0
一起使用,但LLL_XD
应该有效(但已弃用)。
但如上所述,您应该考虑使用BKZ_XD
而不是LLL_XD
。
晶格的BKZ基础也减少了LLL,因此应该没有问题。 BKZ比LLL慢,但你可以选择一个小块大小,可能是10或20,但也可以选择2或4,以加快减速。