繁体   English   中英

如何使用多项式代替位来提高性能?

[英]How to use polynomials instead of bits to improve the performance?

我有一个128位的字符串,我的主管要求我将这些128位表示为多项式。 这是他所写论文的扫描:

将位转换为多项式

他的想法是,由于我们从这些位中消除了0,因此与执行所有位相比,我们将能够以更快的速度执行下一个运算(其中大多数是位/多项式之间的XOR)。

我了解要求是什么,我可以在纸上以及在应用程序中做到。 但是我的方法无法实现他的目标,那就是提高性能。 他实际上说已经有图书馆这样做,但是不幸的是我找不到任何图书馆。 我发现的唯一东西是评估多项式的​​多项式类,这不是我想要的。

那么,你们知道我该如何实施以提高性能? 非常感谢任何代码/代码片段/文章。

该应用程序用Java编写,如果有任何不同的话。

谢谢,

莫塔

更新:

我的主管说,这个C库将完成任务。 我虽然无法弄清楚它是如何工作的以及它将如何做到这一点。

您的主管熟悉BitSet吗? 128位是16个字节,可以存储为2个longs 但是,使用BitSet无需担心处理2个longs的组合。 BitSet还提供了用于所有常见位操作的方法。 我认为您很难找到比这更好的解决方案。

多项式方法是一个很酷的主意,但我认为它比理论上更实用。

他的建议的是一个Monomial ,你可以撰写成Polynomial -想Composite模式。 定义所有常规的数学运算(加法,减法,乘法,除法)以及您认为可能需要的其他所有数学运算(例如微分和积分)。

对于x^1000 + 1类的情况,多项式确实会发光,因为您只需两个项即可捕获它。

真正的问题是:您的老板认为您要储蓄什么? 几位? 速度? 开发时间? 我同意ziesemer-您将很难做到比BitSet更好。 他/她所想到的节省对我来说似乎是微优化,如果您对应用程序进行了概要分析,则不会出现这种情况。

但是他/她老板...值得争论吗?

也许您可以将这个细节抽象化并剖析两者。

如果您有多个需要XOR的字符串,则实际上会导致性能开销。 这是因为您需要匹配权重。

这完全取决于您对其进行异或操作,以及您必须执行多少次才能计算出采用此方法的优势。

我会选择ziesemer的解决方案。

我非常怀疑您会在128位字符串上获得任何好处。 128位为16字节; 任何对象至少要占用40个对象,因此(几乎)任何支持结构都将比其存储的数据昂贵。

尽管如此,这里还是对现有方法的一个很好的综述 ,以及一种可能会(或可能不会)对您有益的新颖方法。 并不是说这是对您问题的答案,并且同意ziesemer的解决方案对于如此众多的用户来说是最好的,但是如果您想开阔眼界,请看一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM