2016-02-25 3 views
5

मेरे पास रेस कोर्स ऑब्जेक्ट है जो एक ऐरेलिस्ट है जो हॉर्स ऑब्जेक्ट्स लेता है। मैंने ऐरेलिस्ट को चुना क्योंकि इसे कार्यान्वित करना आसान है। हालांकि, एक ऐरेलिस्ट का उपयोग करने का नकारात्मक हिस्सा यह है कि मैं आसानी से संग्रह के माध्यम से तेजी से चलने के बिना प्रत्येक घोड़े की स्थिति का ट्रैक नहीं रख सकता। उदाहरण के लिए, यदि मैं एक दूसरे के लिए एक्स दूरी की दूरी के भीतर 2 घोड़े ढूंढना चाहता हूं, तो मुझे n^2 बार के माध्यम से फिर से शुरू करना होगा।घोड़े की दौड़ का प्रतिनिधित्व करने के लिए एक अच्छा डेटा संग्रह क्या है?

क्या ऐसा करने के लिए कोई बेहतर रणनीति है?

संपादित करें: मेरे रेस मॉडल पर बहुत से अनुरोध विशिष्ट हैं, इसलिए मैं यहां विस्तृत जानकारी दूंगा।

मॉडल प्रत्येक पुनरावृत्ति को अद्यतन किया जाता है। इसलिए प्रत्येक घोड़े की अपनी गति, त्वरण, दूरी यात्रा आदि होती है और संग्रह के माध्यम से प्रत्येक पुनरावृत्ति इन मानों को अद्यतन करता है। अगर कोई घोड़ा दूसरे के नजदीक है तो इसकी आवश्यकता है, यह धीमा हो जाएगा, जिसे मैं अपने 'दूरी की यात्रा' मूल्यों की तुलना करके करने की योजना बना रहा हूं।

+2

आप अपने पदों और पुनरावृत्तियों को क्रमबद्ध करके घोड़ों के ऐसे जोड़े पा सकते हैं, जो 'ओ (एन लॉग एन)' है। –

+0

विशिष्ट हो: 1. क्या आपको मूल्यों को यादृच्छिक रूप से क्वेरी करना और बदलना है? या 2. क्या आप (बार-बार) {अद्यतन मान फिर क्वेरी करते हैं}? मामला 1. -> निकालने के साथ पेड़ और पुनः सम्मिलित करें, केस 2. -> सरणी: {अद्यतन मान, क्रमबद्ध करें, प्रश्नों को निष्पादित करें} – BeyelerStudios

+0

एक तीसरा मामला भी है: क्या मूल्य (यानी दौड़ की स्थिति) यादृच्छिक रूप से कूद सकते हैं? या वे केवल ऊपर और नीचे जा सकते हैं? इस तीसरे मामले में आप एक स्कैन सूची (जो एक क्रमबद्ध सरणी है) चाहते हैं और ऊपर या नीचे बढ़ना सरणी में स्वैपिंग स्थिति के बराबर है। – BeyelerStudios

उत्तर

1

मुझे लगता है कि आप ट्रीसेट संग्रह में हॉर्स ऑब्जेक्ट्स जोड़ सकते हैं। आपको हॉर्स क्लास में तुलनात्मक इंटरफ़ेस को कार्यान्वित करना चाहिए और तुलना() विधि को ओवरराइड करना चाहिए, इस प्रकार घोड़ों को दूरी से सॉर्ट करना चाहिए। फिर आप "उच्च()" जैसे वृक्षारोपण पर विशिष्ट संचालन का उपयोग कर सकते हैं जो पहले घोड़े को वापस दिया जाएगा, जो किसी एक से अधिक भाग गया है, आदि। आप इस संग्रह here के बारे में और अधिक पढ़ सकते हैं। समय जटिलता के साथ भी सभी परिचालन ओ (एलजीएन) हैं।

+3

यहां चेतावनी यह है कि ट्रीसेट स्वचालित रूप से फिर से क्रमबद्ध नहीं होता है अगर प्रविष्टियों को प्रभावित करने वाले मानों के गुणों को सम्मिलित करने के बाद बदल दिया जाता है। –

+0

निश्चित रूप से, लेकिन मुझे बिल्कुल यकीन नहीं है कि मामला क्या है। लेकिन आप इसके बारे में सही हैं। लेकिन वस्तु को हटाया जा सकता है और ओ (एलजीएन) समय में फिर से जोड़ा जा सकता है। –

+0

लेकिन ट्रीसेट डुप्लिकेट की अनुमति नहीं देता है। इस तरह आप – Eva

0

यदि आप घोड़े की स्थिति अपडेट पर क्रमबद्ध सूची बनाए रखते हैं, तो आप घोड़ों के सभी जोड़े को एक स्कैन में अलग दूरी तय कर सकते हैं, एन टाइम (ट्रेडऑफ सूची क्रमबद्ध किया जा रहा है, प्रति अद्यतन लॉग (एन))।

यदि आप इसके बजाय किसी घोड़े से सभी घोड़ों एक्स दूरी चाहते हैं एच। आप घोड़े के सरणी इंडेक्स के हैंश नक्शा भी रख सकते हैं और संभावित रूप से पूरे सरणी को फिर से शुरू करने से बच सकते हैं।

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

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