मेरे पास डेटा का एक बड़ा सेट है जिसे मैं समय-समय पर 'डी 1' से एक बिंदु से डेटा सेट पर विभिन्न आंकड़ों को निर्धारित करने के लिए चक्र बनाना चाहता हूं भविष्य में समय में 'डी 2'। मूल रूप से, मैं एक डेटाबेस के लिए हर बार जोड़ने के लिए मूल्यों के बीच का अंतर 10 उदाहरण के लिए तुलना में बड़ा है चाहता हूँ:दो बार एक सरणी के माध्यम से चरणबद्ध करना (उसी सरणी पर नेस्टेड लूप)
Datum[] data = x;
for(Datum d1 : data){
Datum[] tail = y; //From d1 up to 10 elements ahead
for(Datum d2 : tail){
//Calculate difference
if((d2.val - d1.val) > 10){
//Insert into database
}
}
}
मेरे सवाल है, वहाँ एक बेहतर एल्गोरिथ्म/विधि ऐसा करने के लिए है? चूंकि बाहरी लूप के अगले पुनरावृत्ति में पूंछ के 9 तत्वों का पुन: उपयोग किया जाता है, क्या मैं इससे किसी भी तरह से लाभ उठा सकता हूं? मेरा लक्ष्य यह था कि यह (बिग-ओ नोटेशन) ओ (एन) से बहुत कम हो गया है, लेकिन मैं इसके चारों ओर अपने सिर को लपेट नहीं सकता। आम तौर पर एक डी 1, डी 2 जोड़ी को मानते हैं जो मानदंडों को पूरा करता है इसका मतलब है कि अगले डी 1 तत्व के साथ मेल खाने का एक बड़ा मौका भी होगा। क्या मैं इसका उपयोग अपने लाभ के लिए कर सकता हूं?
मैं इसे यथासंभव कुशल होने की कोशिश कर रहा हूं क्योंकि डेटा सेट इतना बड़ा है।
मुझे नहीं लगता कि यह ओ (एन^2) से शुरू करने के लिए कैसे है। आप सरणी के प्रत्येक तत्व के माध्यम से लूप कर रहे हैं और फिर निम्नलिखित 10 तत्वों को देखें। तो यह आईएमओ ओ (10 * एन) = ओ (एन) है, इसलिए सबसे अच्छा आप निरंतर ओवरहेड को थोड़ा कम कर सकते हैं - लेकिन अगर डेटा या – Voo
डेटा के बारे में कोई ऑर्डर या कुछ नहीं है तो यह शायद बड़े सुधार नहीं लाएगा किसी भी विशेष क्रम में मूल्य? –
मैं वू से सहमत हूं। आप एन के बावजूद आगे एक निश्चित दूरी देख रहे हैं, भले ही आप एक ही काम को कई बार कर रहे हों, फिर भी यह एक गुणात्मक निरंतर समय एन और काम है, इसलिए आपका लूप ओ (एन) है। –