2010-09-05 11 views
5

मैं वर्तमान में मंडलब्रॉट सेट को प्रस्तुत करने के साथ प्रयोग कर रहा हूं और मुझे जल्दी ही पता चला है कि प्रत्येक प्रतिपादन के लिए अधिकतम पुनरावृत्ति गणना को पुन: गणना करने के लिए उपयोगी नहीं होगा ... दूसरी ओर यह बहुत अधिक डेटा है अता - पता रखना। ऐसा लगता है (RDMSes के साथ मेरे सीमित अनुभव के आधार पर) कि एक रिलेशनल डेटाबेस शायद जाने का तरीका नहीं है क्योंकि मैं नहीं चाहता कि प्रदर्शन को प्रभावित किया जाए क्योंकि डेटा सेट बड़ा हो जाता है। यह लगभग हैश टेबल के लिए सही स्थिति की तरह लगता है, लेकिन मैंने कभी पहले कभी नहीं उपयोग किया है और मौजूदा वेब सर्वर भाषाओं (पायथन/PHP/जो भी) में से किसी एक में इसका उपयोग या प्रबंधन करने का तरीका नहीं लग रहा है।डेटाबेस में मंडेलब्रॉट मानों को संग्रहीत करने का सबसे अच्छा तरीका क्या हो सकता है?

थोड़ा और स्पष्ट होना करने के लिए: महत्वपूर्ण मूल्यों संग्रहीत करने के लिए कर रहे हैं:

  • मूल वास्तविक संख्या की जटिल विमान पर भाग एक नंबर के
  • मूल काल्पनिक हिस्सा जटिल विमान पर
  • अधिकतम की संख्या पुनरावृत्तियों
  • की संख्या 10 पूरा पुनरावृत्तियोंn अधिकतम पुनरावृत्तियों से पहले हिट या जाता है जब तक बिंदु n पुनरावृत्तियों
  • अंतिम काल्पनिक हिस्सा के बाद अनंत
  • जटिल विमान पर एक नंबर के अंतिम असली हिस्सा के लिए रवाना चलाता है n पुनरावृत्तियों

किसी भी समय के बाद जटिल विमान पर एक नंबर, मूल वास्तविक हिस्सा 012,309,368 को देखते हुए की, मूल काल्पनिक भाग, और पुनरावृत्तियों की अधिकतम संख्या, मैं अंतिम वास्तविक और काल्पनिक भागों के साथ परिणाम सेट प्राप्त करने में सक्षम होना चाहता हूं।

तो आपको क्या लगता है? क्या हैश टेबल जाने का रास्ता है? क्या समस्या केवल प्राणघातक डेटा संरचनाओं के लिए जटिल है?

किसी भी मदद की बहुत सराहना की जाएगी। अग्रिम में धन्यवाद!

संपादित

मैं इस समस्या पर julienaubert की तरह अनुरोध पर थोड़ा व्याख्या करेंगे।

मेरे पास लक्ष्य है कि किसी उपयोगकर्ता को गणना विलंब के बिना मंडलब्रॉट सेट पर ज़ूम इन करने दें (भले ही यह पूर्व परिभाषित ज़ूम के माध्यम से हो)। मैं यह भी ब्राउज़र में ऐसा करने में सक्षम होना चाहता हूं जो लगातार एक नए डेटा सरणी के लिए सर्वर से पूछता है कि नए एक्स और वाई निर्देशांक और जटिल विमान पर ऊंचाई और चौड़ाई को देखा जाए। हालांकि, पिक्सेल रंग मान की गणना करने के बाद से अधिक तेज़ी से (अधिकतम max_iter, real_final, और imag_final दिया जा सकता है), और चूंकि उपयोगकर्ता को रंग सेटिंग्स को समायोजित करने की अनुमति देना अच्छा लगेगा, इसलिए मैं केवल ब्राउजर भेज रहा हूं मेरे पोस्ट में उल्लिखित चर और उपयोगकर्ता के ब्राउज़र को रंग की गणना करने दें।

इस पर एक नज़र डालें:

http://jsfiddle.net/xfF3f/

आप drawMandelbrot() फ़ंक्शन पर एक नज़र डालें, तो आप देख सकते हैं कि बिंदु छोरों एक चर डाटासेट कहा जाता है में महत्वपूर्ण मूल्यों भंडारण कर रहे हैं। यह चर तब drawMandelbrotFromData() फ़ंक्शन में उपयोग किया जाता है जहां यह प्रत्येक पिक्सेल के लिए रंग को समझने के लिए आवश्यक शेष गणना करता है।

आप क्लिक करें "cleardabrot" यदि यह एक सफेद आयत के साथ कैनवास बदल देता है। आप "refilldabrot" पर क्लिक करें, तो यह drawMandelbrotFromData() फ़ंक्शन फिर ... यह आप को दिखाने के लिए कितनी जल्दी यह वास्तव में सेट प्रदान कर सकते हैं, तो केवल यह दर्दनाक पुनरावृत्ति गणना करने के लिए नहीं था किया जाता है चलाता है।

तो अंतिम लक्ष्य यहां इन मानों को मनमाना परिशुद्धता के लिए गणना करने में सक्षम होना है, इसलिए उपयोगकर्ता सेट के किसी भी स्तर पर ज़ूम कर सकता है, अगर सर्वर को सटीक बिंदुओं के लिए कोई डेटा है (या, अधिमानतः, उन सटीक बिंदुओं के नजदीक अंक ... हालांकि मुझे यकीन नहीं है कि यह किसी प्रकार की रेंज क्वेरी किए बिना कैसे किया जा सकता है), और फिर पिक्सेल-बाय-पिक्सेल आधार पर जानकारी वापस थूकें। उदाहरण के लिए ...

  • कोई उपयोगकर्ता 300x300 कैनवास का उपयोग कर रहा है।
  • वह एक बिंदु है जहां ऊपरी बाएं कोने x = .000001 और y = .0000231 है ज़ूम करता है।
  • उनकी इस फ्रेम में चौड़ाई और ऊंचाई चुना w = .00045 और h = .00045

वह सर्वर के लिए रवाना उन संख्याओं को भेजने और प्राप्त होता है, बारी में, 300 * 300 सूचकांक एक सरणी (एक-एक बिंदु का प्रतिनिधित्व), प्रत्येक में कैनवास पर प्रत्येक पिक्सेल के रंग को निर्धारित करने के लिए आवश्यक जानकारी होती है। मेरा सवाल यह है कि ... पूर्व-गणना वाले मंडेलब्रॉट डेटा को स्टोर करने का सबसे अच्छा तरीका क्या है कि उपयोगकर्ता मनमाने ढंग से एक्स, वाई, डब्ल्यू, और एच मान इनपुट कर सकता है और उसमें जटिल विमान पर बिंदुओं के मूल्यों को तुरंत खींच सकता है रेंज।

उत्तर

2

किसी भी समय, मूल वास्तविक हिस्सा है, मूल काल्पनिक हिस्सा है, और पुनरावृत्तियों की अधिकतम संख्या को देखते हुए, मैं एक परिणाम के साथ अंतिम असली सेट प्राप्त करने में सक्षम होना चाहते हैं और काल्पनिक भागों।

यह आपके प्रश्न से स्पष्ट नहीं है कि आपको इसकी आवश्यकता क्यों है? आपको एक ही बिंदु पर फिर से गणना करने की आवश्यकता क्यों है?

यदि आप विभिन्न max_iterations सेटिंग्स के साथ प्रयोग कर रहे हैं, तो आप बाइनरी-फ़ाइल, टेक्स्ट-फ़ाइल या छवि में प्रति-पिक्सेल स्तर पर ली गई वास्तविक_इटरेशन को सहेज सकते हैं या जो भी आपको लोड/स्टोर करने के लिए सुविधाजनक लगता है, उदा। एक संबंधपरक डेटाबेस।

यदि आप रीयल-टाइम प्रतिपादन कर रहे हैं और आप कुछ प्रसंस्करण का उपयोग कर रहे हैं जिसके लिए पुनरावृत्ति समीकरण (उसी मूल बिंदु पर और उसी अधिकतम पुनरावृत्ति के साथ) की गणना की आवश्यकता है, तो मुझे लगता है कि आप इसे तेज कर सकते हैं एक लुकअप टेबल है।

जाहिर है, अपने लुक-अप तालिका गणना कर की तुलना में तेजी से होना चाहिए। आपको एक लुक-अप टेबल की आवश्यकता है जिसके लिए नीचे दिए गए ऑपरेशन कुल गणना करने से कम लेते हैं।

  • calculate सूचकांक (दी origo_real, origo_imag, max_iter)
  • लोड कैश की गई गणना (final_real, final_imag, actual_iter)
  • एक प्रारंभिक दुकान

आप कैसे फिर से गणना जाएगा पर निर्भर करता है/एक ही बिंदु पर पुनः पहुंच, आप अपनी समस्या को इस तरह से विभाजित कर सकते हैं कि यह बहुत अधिक संभावना है कि सूचकांक लुक-अप तालिका में है और लुक-अप तालिका L1 या L2 में संग्रहीत करने के लिए पर्याप्त छोटा है कैश।

ये कुछ विचार हैं .. लेकिन आपको यह स्पष्ट करना चाहिए कि आपकी वास्तविक समस्या क्या है।

मामले में आप सिर्फ आगे के विश्लेषण और वास्तविक समय के लिए इस डेटा का एक बहुत आवश्यकता की जरूरत है, नहीं है तो ठीक है ... स्पष्ट है कि आपके असली मुद्दा है :)

अद्यतन के लिए जवाब

ऐसा लगता है कि नक्शा सेवा (ज़ूम इन/आउट, चारों ओर ले जाएं) का उपयोग करने के समान लगता है, यानी, आप अनिवार्य रूप से किसी दिए गए क्षेत्र और ज़ूम के लिए एक छवि वितरित कर रहे हैं।

हालांकि इस मामले में, किसी भी ज़ूम-स्तर की पूछताछ की जा सकती है, जो भी आप किसी उपयोगकर्ता के लिए कैश करते हैं, अगले उपयोगकर्ता के लिए फिर से उपयोग नहीं किया जा सकता है। मुझे यकीन नहीं है कि क्लाइंट सॉफ़्टवेयर लिखने के बजाय इसे ऐसा करने का अर्थ क्यों होगा जिसमें उपयोगकर्ता रीयल-टाइम ज़ूम कर सकता है (जो किया गया है)।

किसी भी मामले में। यदि आपकी मुख्य समस्या बैंडविड्थ है लेकिन आपके पास बहुत अधिक गणना शक्ति है, तो आप एक कम संपीड़ित फ़ाइल में एक गणना की गई पैच की छवियों को थोड़ी कम गुणवत्ता के साथ स्टोर कर सकते हैं और इन छवियों को कैश कर सकते हैं। इसके बाद आपको उपयोगकर्ता के सटीक क्षेत्र को वितरित करने के लिए इन दोनों के पैच सिलाई करने की आवश्यकता हो सकती है .. यह चाल ज़ूम और क्षेत्र को दिए गए पैच के न्यूनतम सेट से पूछताछ करेगी।

मुझे डर है कि ज्यादातर प्रश्न पैच मांगेंगे जो मौजूद नहीं हैं (क्योंकि कोई भी ज़ूम-स्तर संभव है)। शायद कुछ जानकारी कैसे है उदा। Google मानचित्र/जीआईएस सिस्टम काम आपको कुछ विचार दे सकता है। यदि आपकी मुख्य समस्या सीपीयू है, तो हो सकता है कि आप इसे अलग-अलग कर सकें और उपयोगकर्ता को एप्लेट में गणना (और संभवतः परिणाम वापस भेज दें)

यदि आप क्लाइंट पर कैश/गणना करने के तरीके को सीखने के लिए ऐसा कर रहे हैं -सर्वर, आप एक अलग चुनौती पर विचार करना चाहेंगे, क्योंकि इसे किसी भी सभ्य कंप्यूटर द्वारा ग्राहक पक्ष पर हल किया जा सकता है।

+0

उत्तर के लिए धन्यवाद, julienaubert! मैंने सूचना का एक बड़ा हिस्सा जोड़ा है जो (उम्मीद है) आपको थोड़ा बेहतर अवधारणा देने देगा जो मैं प्राप्त करने की कोशिश कर रहा हूं। जब तक यह आपकी मदद करता है, तब तक मैं अपने शब्दों को अनंत तक चलाता हूं (इसलिए बोलने के लिए) जब तक यह आपकी मदद करता है! – treeface

+0

@julienaubert फिर से धन्यवाद, julienaubert। मुझे लगता है कि आप इस प्रारंभिक योजना की अव्यवहारिकता के बारे में सही हैं। मुझे लगता है कि मैं वास्तव में क्या करने की योजना बना रहा हूं, उपयोगकर्ताओं को प्री-रेंडर ज़ूम के माध्यम से चलाने की अनुमति देना है ताकि लोगों को प्रतिपादन के संदर्भ में कैनवास तत्व क्या कर सकता है, इसका एक अच्छा विचार दे सके। मैं संभवतः अधिकतम स्थानांतरण दरों के लिए एक सतत वेब सॉकेट कनेक्शन के माध्यम से भी ऐसा करूंगा। मैंने आपको पहले ही इस जवाब के लिए अंक दिए हैं, लेकिन यदि आपके पास कोई और विचार है, तो मुझे उन्हें सुनना अच्छा लगेगा। एक बार फिर धन्यवाद! – treeface

+0

आप उन्हें कैनवास में क्यों पेंट नहीं करते हैं, और सहयोग करते हैं :) – user348466

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

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