2011-03-31 17 views
5

मैं थोड़ी देर के लिए इस पर चबाने लगा हूं और मैंने सोचा कि मैं एक प्रश्न खोलूंगा और इसके बारे में कुछ विचार प्राप्त करने का प्रयास करूंगा। शायद कुछ प्रकाश बल्ब चमक जाएगा।बहुत बड़ी डेटा संरचना की आवश्यकता है। विचारों की तलाश

मुझे हेक्स ग्रिड बनाने की आवश्यकता है और हेक्स ग्रिड न्यूनतम 10 x 10 और अधिकतम 500x500 - और संभवतः बड़ा होगा। यह स्पष्ट रूप से शीर्ष छोर पर एक विशाल ग्रिड है और स्वाभाविक रूप से इसे तोड़ना होगा।

यहां समस्या का बड़ा हिस्सा है।

  • हेक्सगोन के 500x500 ग्रिड। लगभग।
  • वे अक्सर नहीं बदलते हैं, लेकिन वे बदल सकते हैं।
  • इसे 50x50 या 100x100 खंडों में तोड़ना बहुत ही कामयाब है, हालांकि यह संभव है कि कोई नक्शा के एक छोर से दूसरी तरफ दौड़ सके, इसलिए मुझे किसी चीज़ पर पूरी चीज़ से निपटने में सक्षम होना चाहिए, भले ही यह खंडों में है
  • यह स्पष्ट रूप से एक बड़ी मेमोरी नाली बना देगा।

मैं डेटा (साझा वर्र्स) को सरल बाइटएरे या यहां तक ​​कि सादे पाठ में भी स्टोर कर सकता हूं। प्रति हेक्स की जानकारी बहुत सरल है, यह सिर्फ कितने हैं। मेरे पास डेटा को सहेजने के लिए "नहीं" है। (एक विशेषता हो जाएगा)

षट्भुज प्रति बुनियादी संरचना है:

  • हेक्स रंग (या एक बिटमैप चित्र) किसी blitting (स्पष्ट रूप से रूपरेखा के साथ)!
  • टेक्स्टफिल्ड इसमें एक संख्या के साथ। (अधिकतम 2 अंक)

यह बहुत सारी जानकारी है जो आवश्यक है।

यदि इस पर हेक्स बदलने की संभावना नहीं थी तो यह काफी मामूली होगा।

तो अगर कोई इस पर कोई विचार करता है तो मैं उत्सुक हूं। (कोई पूर्ण सत्य बुरा नहीं होगा;)

संपादित करें: हेक्स पर जानकारी टीसीपी स्ट्रीम पर आती है। यह कोई मुद्दा नहीं है, जैसा कि मैंने कहा था कि डेटा हेक्स प्रति सरलीकृत है और मेरा पार्सर बिजली तेज है इसलिए यह कोई मुद्दा नहीं है।

अपडेट: 250,000 ऑब्जेक्ट्स (हेक्स) बनाने और बनाए रखने की संभावना है जो मुझे अधिकतर इस प्रश्न पूछ रही है। यही कारण है कि मैं विचारों की तलाश में हूं। (फ्लैश में 250k ऑब्जेक्ट्स अच्छी तरह से लैफ है)

+0

यह आपके विवरण से वास्तव में स्पष्ट नहीं है कि समस्या क्या है। काफी छोटी डेटा संरचनाओं की 500x500 सरणी स्मृति में बड़ी नहीं होगी। यह केवल कुछ मेगाबाइट्स हो सकता है यदि आपको स्टोर करने की आवश्यकता है तो एक आरजीबी रंग और एक int है। वास्तव में समस्या क्या है? –

+0

250,000 संभावित वस्तु इसलिए मैंने पूछा। बस मानचित्र के लिए। – Feltope

+2

250,000 ऑब्जेक्ट्स केवल एक समस्या है यदि ऑब्जेक्ट्स विशाल हैं। लेकिन आपने निर्दिष्ट किया है कि आपकी डेटा संरचना में रंग (4 बाइट्स) और एक int (4 बाइट्स) है। यह डेटा की एक छोटी राशि (~ 2 एमबी) है। इन हेक्सागोन चीजों में से कितने आपको एक साथ प्रदर्शित करने की आवश्यकता है? संभवतः एक ही समय में सभी 250,000 नहीं ... –

उत्तर

4

षट्भुज प्रति बुनियादी संरचना है:

* hex color (with outline obviously) (or a bitmap picture) blitting anyone! 
* TextField with a number in it. (max 2 digits) 

मुझे लगता है आप सभी 250K टेक्स्ट फ़ील्ड और बिटमैप्स स्टोर करने के लिए, क्योंकि वे केवल स्क्रीन पर मौजूद करने की जरूरत है कर रहे हैं की जरूरत नहीं है। इस डेटा को बाइट्स की छोटी संख्या में पैक करें - अधिकतम 2 अंक 7 बिट्स हैं, अपने पैलेट से रंग आईडी जोड़ें (या यदि आपको सही रंग की आवश्यकता हो तो 24 बिट्स) और बिटमैप आईडी है। यदि आप एक ही आकार की संरचनाएं बनाते हैं, तो आप उन्हें बाइटएरे में लिख सकते हैं। यह आपको 250 के ऑब्जेक्ट संदर्भों से छुटकारा पाने देगा और संभावित मेमोरी विखंडन को रोक देगा।
फिर आपको केवल उन प्रयोग करने योग्य वस्तुओं (ऑब्जेक्ट पूल को न भूलें) में उन बाइट्स के लिए पैक/अनपैक फ़ंक्शन बनाने की आवश्यकता है और उन्हें ByteArray से प्राप्त करने के लिए एरिथमेटिक्स करें। जैसा कि अन्य ने नोट किया है, यदि आप सेल डेटा को int की जोड़ी में पैक करते हैं तो 250 के सेल अधिक नहीं होते हैं।

2

शायद आप इसे डेटा deduplication में एक अभ्यास के रूप में संपर्क कर सकते हैं? उदाहरण के लिए, 100 से अधिक विशिष्ट टेक्स्ट मान नहीं हैं जिन्हें आपके हेक्स से जोड़ा जा सकता है। मान लीजिए कि आप वास्तव में केवल विभिन्न हेक्स रंगों (जैसे, कहें, 20 से कम) का उपयोग करते हैं, फिर हेक्स उदाहरणों का एक अपेक्षाकृत छोटा सेट हर संभव हेक्स कॉन्फ़िगरेशन का प्रतिनिधित्व कर सकता है। तो अगर आप की तरह एक उपयोगिता समारोह (मान्य नहीं ActionScript वाक्य रचना, खेद) हो सकता है:

Hex getHex(int color, String label)

... जो अगर एक हेक्स पहले से ही दिए गए विन्यास के साथ मौजूद है देखने के लिए जाँच करता है, और केवल एक नया Hex उदाहरण बनाता है अगर कोई पहले से मौजूद नहीं है।

तो आपके पास अभी भी आपके सरणी में 250,000 संदर्भ हैं (या जो भी संरचना आप अपने हेक्स का ट्रैक रखने के लिए उपयोग करते हैं), लेकिन केवल वास्तविक वस्तु उदाहरणों की एक छोटी संख्या है। ऐसा लगता है कि फ्लैश में भी प्रबंधनीय होना चाहिए।

यदि आपको बनाए जाने के बाद आपके हेक्स म्यूटेबल हैं तो आपको बहुत सावधान रहना होगा।

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