मैं 2 हस्ताक्षरित शॉर्ट्स की एक कॉम्पैक्ट संरचना का उपयोग कर रहा हूं जो एक प्रारंभ और अंत स्थिति दर्शाता है।
मुझे जल्दी से यह निर्धारित करने में सक्षम होना चाहिए कि क्या Range
ऑब्जेक्ट्स लंबाई (अंत से अंतर से अंत तक) हैं, जो थ्रेसहोल्ड मान से पहले हैं।एक सशर्त शामिल शॉर्ट्स का चित्रण
मेरे पास Range
सरणी के साथ प्रत्येक की बड़ी मात्रा में ऑब्जेक्ट्स होने जा रहे हैं, इसलिए यह ट्रैक करना संभव नहीं है कि Range
ऑब्जेक्ट्स किसी सूची या किसी चीज़ में दहलीज से ऊपर हैं। यह कोड भी अक्सर चलने जा रहा है (प्रत्येक सरणी के लिए कई बार एक सेकंड), इसलिए इसे कुशल होने की आवश्यकता है।
struct Range
{
unsigned short start;
unsigned short end;
}
मैं हमेशा Range
की एक सरणी होगा आकार 2^n। जबकि मैं थ्रेसहोल्ड पर कुछ ढूंढता हूं, मुझे यकीन है कि यह बस तेज़ होगा या यह सब एक साथ होगा और अंत में जांच करेगा ... मान लीजिए कि मैं लूप को सदिश कर सकता हूं। हालांकि अगर मैं प्रत्येक वेक्टर के परिणामों के खंड पर एक बयान कर सकता हूं, तो यह भव्य होगा।
size_t rangecount = 1 << resolution;
Range* ranges = new Range[rangecount];
...
bool result = false;
for (size_t i = 0; i < ranges; ++i)
{
result |= (range[i].end - range[i].start) > 4;
}
नहीं आश्चर्यजनक रूप से, ऑटो vectorizer 1202 त्रुटि देता है क्योंकि मेरे डेटा प्रकार नहीं 32 या 64 बिट्स चौड़ा है। मैं वास्तव में अपने डेटा आकार को दोगुना नहीं करना चाहता हूं और प्रत्येक फ़ील्ड को एक हस्ताक्षरित int बनाना चाहता हूं। तो मैं अनुमान लगा रहा हूं कि ऑटो-वेक्टरिज़र दृष्टिकोण इसके लिए बाहर है।
क्या वेक्टर निर्देश हैं जो 16 बिट चर को संभाल सकते हैं? यदि वहां हैं, तो मैं अपने लूप को सदिश बनाने के लिए C++ में उनका उपयोग कैसे कर सकता हूं?
आप एक सरणी में सीमा मान संग्रहीत की जरूरत है? उन्हें अन्य डेटा संरचना में क्यों स्टोर न करें जो इस लुकअप को तेज़ कर देगा? – loganfsmyth
_so यह ट्रैक करना संभव नहीं है कि कौन सी रेंज ऑब्जेक्ट्स सूची या कुछ_ में थ्रेसहोल्ड से ऊपर हैं। यदि आप बस इतना करना चाहते हैं कि यह निर्धारित करता है कि आपके पास नियम हैं जो नियम तोड़ते हैं, तो उसे ट्रैक करें। ऐसा करने के लिए आपको हर ऑब्जेक्ट को ट्रैक करने की आवश्यकता नहीं है। –
आप कितनी बार 'एंड' का उपयोग करते हैं? '(प्रारंभ, अंत)' के बजाय '(प्रारंभ, आकार) 'प्रतिनिधित्व पर स्विच करना संभव होगा। निश्चित रूप से आपको हर बार 'एंड' की गणना करने की आवश्यकता होगी, लेकिन अगर 'एंड' बनाम' आकार का सापेक्ष उपयोग कम है, तो यह अभी भी जीत के अंत में समाप्त हो सकता है ... – twalberg