6

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

将位转换为多项式

他的想法是,由于我们从这些位中消除了 0,我们将能够比处理所有位更快地执行下一个操作(其中大部分是位/多项式之间的异或)。

我了解要求是什么,我可以在纸上完成,也可以在申请中完成。但是我的方式不会达到他的目标,即提高性能。他实际上说已经有图书馆可以做到这一点,但不幸的是我找不到。我发现的唯一东西是一个计算多项式的多项式类,这不是我想要的。

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

该应用程序是用 Java 编写的,如果这有什么不同的话。

谢谢,

莫塔

更新:

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

4

4 回答 4

7

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

多项式方法是一个非常酷的想法,但我认为它比实际更理论。

于 2011-12-17T20:40:45.167 回答
6

他提出的是一个Monomial你可以组合成的Polynomial——想想复合模式。定义所有常用的数学运算(加法、减法、乘法、除法)和您认为可能需要的任何其他运算(例如微分和积分)。

多项式对于像这样的情况来说真的很出色x^1000 + 1,因为您可以只用两项来捕捉它。

真正的问题是:你的老板认为你在节省什么?几位?速度?开发时间?我同意 ziesemer 的观点——你很难做得比BitSet. 她/他考虑的节省对我来说似乎是一种微优化,如果你分析你的应用程序就不会出现这种情况。

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

也许您可以抽象出这个细节并分析两者。

于 2011-12-17T20:47:28.087 回答
1

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

这完全取决于你用什么进行异或运算,以及你必须这样做多少次才能计算出采用这种方法的优势。

我会选择 ziesemer 的解决方案。

于 2011-12-17T21:12:02.700 回答
1

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

尽管如此,这里还是对现有方法的一个很好的调查——以及一种新颖的方法,它可能(或可能不会)对您有益。并不是说它是对您问题的回答,并且同意,但 ziesemer 的解决方案对于如此庞大的数字是最好的,但如果您想拓宽视野,请看一看。

于 2011-12-17T22:01:28.623 回答