[英]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.