2011-12-17 10 views
6

मेरे पास 128-बिट स्ट्रिंग है, और मेरे पर्यवेक्षक ने मुझे उन 128 बिट्स को बहुपद के रूप में प्रस्तुत करने के लिए कहा है।प्रदर्शन में सुधार के लिए बिट्स के बजाय बहुपदों का उपयोग कैसे करें?

Converting bits to a polynomial

उनका विचार है, क्योंकि हम इन बिट्स से 0 सेकंड बाद नष्ट कर रहे हैं, हम अगले कार्रवाई करने में सक्षम हो जाएगा (जिनमें से अधिकांश हैं XOR: इस पत्र पर वह लिख रहा था के स्कैन है बिट्स/बहुपदों के बीच) यदि हम सभी बिट्स पर काम करते हैं तो उससे बहुत तेज़।

मैं समझता हूं कि आवश्यकता क्या है, और मैं इसे कागज पर और एप्लिकेशन में भी कर सकता हूं। लेकिन मेरा तरीका उनके लक्ष्य को हासिल नहीं करेगा, जो प्रदर्शन में सुधार कर रहा है। उन्होंने वास्तव में कहा कि पुस्तकालय पहले से ही ऐसा करते हैं, लेकिन दुर्भाग्य से मुझे कोई भी नहीं मिला। एकमात्र चीज जो मैंने पाया वह एक बहुपद वर्ग था जो बहुपदों का मूल्यांकन करता है, जो मैं नहीं चाहता हूं।

तो क्या आप जानते हैं कि प्रदर्शन को बेहतर बनाने के लिए मैं इसे कैसे कार्यान्वित कर सकता हूं? किसी भी कोड/स्निपेट/लेखों की बहुत सराहना की जाती है।

एप्लिकेशन जावा में लिखा गया है, अगर इससे कोई फर्क पड़ता है।

धन्यवाद,

मोटा

अद्यतन:

मेरे पर्यवेक्षक का कहना है कि इस C library कार्य करेंगे। मैं यह नहीं समझ सकता कि यह कैसे काम करता है और यह कैसे करेगा।

+0

मैंने इसे एन्क्रिप्शन पुस्तकालयों, विशेष रूप से गैलोइस फ़ील्ड में किया है। मैं इससे अधिक विशिष्ट नहीं हो सकता, यह कुछ समय हो गया है क्योंकि मैंने इसे देखा है। –

+0

http://en.wikipedia.org/wiki/Finite_field_arithmetic –

+2

समस्या यह है कि अधिकांश मशीन प्रक्रिया बहुत तेजी से बिट्स होती है और यदि आप कुछ और करने की कोशिश करते हैं (.e.g *, +, /) इसे अभी भी बिट्स का उपयोग करना है। यदि बहुपद का उपयोग हर कारण से तेज़ होता है तो आप समाधान ले सकते हैं, इसे बिट्स में विभाजित कर सकते हैं और फिर बहुपदों को तोड़ सकते हैं और प्रत्येक पुनरावृत्ति के साथ इसे और अधिक तेज बना सकते हैं (इसके बजाय मुझे संदेह है कि यह हर बार धीमा हो जाएगा) ऐसी परिस्थितियां हो सकती हैं जहां वह सुझाता है तेज़, लेकिन मैं किसी के बारे में नहीं सोच सकता। –

उत्तर

7

क्या आपका पर्यवेक्षक BitSet से परिचित है? 128 बिट्स 16 बाइट्स हैं, जिन्हें 2 longs के रूप में संग्रहीत किया जा सकता है। हालांकि, बिटसेट का उपयोग करके, आपको 2 longs के संयोजन से निपटने के बारे में चिंता करने की आवश्यकता नहीं होगी। बिटसेट भी सभी सामान्य बिट ऑपरेशंस के लिए तरीकों को प्रदान करता है। मुझे लगता है कि आप इससे बेहतर समाधान खोजने के लिए बहुत कठिन दबाव डालेंगे।

बहुपद दृष्टिकोण एक बहुत अच्छा विचार है, लेकिन मुझे लगता है कि यह व्यावहारिक से अधिक सैद्धांतिक है।

6

वह जो प्रस्तावित कर रहा है वह Monomial है जिसे आप Polynomial में लिख सकते हैं - समग्र पैटर्न सोचें। दोनों (अतिरिक्त, घटाव, गुणा, विभाजन) और किसी अन्य व्यक्ति के लिए सभी सामान्य गणित संचालन को परिभाषित करें जो आपको लगता है कि आपको आवश्यकता हो सकती है (उदा। भिन्नता और एकीकरण)।

पॉलीनोमियल वास्तव में x^1000 + 1 जैसे मामलों के लिए चमक जाएगा, क्योंकि आप इसे केवल दो शर्तों के साथ कैप्चर कर सकते हैं।

असली सवाल यह है: आपके बॉस की कल्पना क्या है कि आप बचत कर रहे हैं? कुछ बिट्स? स्पीड? विकास का समय? मैं ज़ीसेमर से सहमत हूं - आपको BitSet से बेहतर करने के लिए कड़ी मेहनत की जाएगी। बचत की वह सोच रही है जो मुझे माइक्रो-ऑप्टिमाइज़ेशन की तरह लगती है, ऐसी चीज जो आपके आवेदन को प्रोफाइल करने पर दिखाई नहीं देगी।

लेकिन एस/वह बॉस है ... क्या यह तर्क के लायक है?

शायद आप इस विवरण को दूर कर सकते हैं और दोनों को प्रोफाइल कर सकते हैं।

1

यदि आपके पास एकाधिक स्ट्रिंग हैं जिन्हें XOR ing की आवश्यकता है तो यह वास्तव में प्रदर्शन ओवरहेड का कारण बन जाएगा। ऐसा इसलिए है क्योंकि आपको वजन से मिलान करने की आवश्यकता है।

यह सब इस बात पर निर्भर करता है कि आप एक्सओआर के साथ क्या कर रहे हैं और इस दृष्टिकोण को लेने के लिए लाभ की गणना करने के लिए आपको कितनी बार ऐसा करना है।

मैं ज़ीसेमर के समाधान के साथ जाऊंगा।

1

मुझे संदेह है कि आपको 128-बिट स्ट्रिंग पर कोई लाभ नहीं मिलेगा। 128 बिट 16 बाइट हैं; किसी ऑब्जेक्ट में कम से कम 40 लेते हैं, इसलिए (लगभग) किसी भी सहायक संरचना को संग्रहीत डेटा की तुलना में अधिक महंगा होगा।

फिर भी, मौजूदा विधियों के a good survey और एक उपन्यास है, जो आपके लिए फायदेमंद हो सकता है (या नहीं)। ऐसा नहीं है कि यह आपके प्रश्न का उत्तर था, और इस बात से सहमत है कि ज़ीज़ेमर का समाधान इतनी बड़ी संख्या के लिए सबसे अच्छा है, लेकिन यदि आप अपने क्षितिज को विस्तृत करना चाहते हैं, तो एक नज़र डालें।

संबंधित मुद्दे