2012-04-05 4 views
6

मैं दो अलग अलग एल्गोरिदम कि तय वहाँ हलकों का एक संग्रह में ओवरलैप अगर जावा में एक विमान में कल्पना करने के लिए करना चाहते हैं:उस एल्गोरिदम के कोड को बदले बिना एल्गोरिदम को कैसे विज़ुअलाइज़ करें?

  • एक ओ (n²) एल्गोरिथ्म कि हलकों
  • एक ओ (nlogn के हर संयोजन की जाँच करता है) एक झाडू लाइन

का उपयोग कर एल्गोरिथ्म वहाँ है कि यह उदाहरण के लिए जब एल्गोरिथ्म एक जैसी होने पर प्रदर्शन कर रहा है देख सकते हैं एक तरह से एल्गोरिथ्म वर्ग की एक वस्तु के लिए एक vizualization वर्ग 'सुनने' की एक वस्तु जाने के लिए एक रास्ता है सर्किल की एक जोड़ी के बीच जांचें और विज़ुअलाइज़ेशन को अपडेट करने के बारे में कब पता है?

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

यही वह रणनीति है जिसे मैं सोच रहा था। शायद बेहतर तरीके हैं ...

+0

मुझे नहीं पता कि आपने इसे माना है, लेकिन मेरे पास सिर्फ एक शब्द है: मल्टीथ्रेडिंग। एक एल्गोरिदम-थ्रेड और एक विज़ुअलाइज़ेशन-थ्रेड? –

+0

मुझे निश्चित रूप से एकाधिक धागे की आवश्यकता होगी।मुख्य समस्या यह है कि विज़ुअलाइज़ेशन थ्रेड को कैसे ताज़ा करने की आवश्यकता है? – aerod

+0

एक तस्वीर खींचे। (इसे कल्पना करता है। कोड को संशोधित नहीं करता है।) –

उत्तर

0
  1. कक्षा (एसएस) है जो सर्कल (और इस समस्या/एल्गोरिदम में मौजूद कोई अन्य वस्तु) का प्रतिनिधित्व करती है और प्रत्येक ऑपरेशन के लिए विधियां शामिल करती है।
  2. ऑब्गोरिदम को ऑब्जेक्ट्स पर ऑपरेशन के रूप में कार्यान्वित करें (1) - विधियों को कॉल के रूप में।
  3. एक विज़ुअलाइज़ेशन क्लास बनाएं जो 1 से ऑब्जेक्ट की जांच करता है और प्रत्येक राज्य - Update() विधि पर उनके राज्य को विज़ुअलाइज़ करता है।
  4. (1) में सभी कक्षाओं के उप-वर्ग बनाएं, जो उनके मूल व्यवहार के अलावा, प्रत्येक ऑपरेशन पर Visualization.Update() पर कॉल करें।

विज़ुअलाइजेशन के लिए (1) के बजाय (4) कक्षाओं में से "अपनी दुनिया" बनाएं।

1

शायद पर्यवेक्षक पैटर्न पर पढ़ने आप मदद कर सकते हैं: https://en.wikipedia.org/wiki/Observer_pattern

आप java.util.Observer लागू करने या एल्गोरिथ्म एक कॉलबैक फ़ंक्शन/वस्तु दे या तो कर सकते हैं।

आप पर्यवेक्षक मनमानी डेटा को सौंप सकते हैं, यह तय करने के लिए पर्याप्त है कि एल्गोरिदम एक ओवरलैप चेक कब कर रहा है।

1

मुझे यकीन नहीं है कि यह आपकी मदद करेगा या नहीं, लेकिन अगर आप पर्यवेक्षकों का समर्थन करने के लिए एल्गोरिदम का कोड नहीं बदल सकते हैं तो एक (दिलचस्प) विकल्प पहलू उन्मुख प्रोग्रामिंग को देखना होगा।

उदाहरण के लिए, AspectJ (उदा। http://en.wikipedia.org/wiki/AspectJ देखें) में आप निर्दिष्ट कर सकते हैं ('पॉइंटकूट' नामक चीजों का उपयोग करके) ('अंक शामिल करें' कहा जाता है) जहां अतिरिक्त कोड (जिसे 'सलाह' कहा जाता है) के बिट्स चलाना चाहिए। आप एल्गोरिदम द्वारा किए जा रहे ओवरलैप चेक का पता लगाने के लिए इसका उपयोग कर सकते हैं और फिट बैठकर उन्हें जवाब दे सकते हैं।

बेशक, चीजों को इस तरह से करना AspectJ का उपयोग करना शामिल होगा, इसलिए सामान्य जावा के साथ यह संभव नहीं होगा - लेकिन यह कुछ दिलचस्प है जिसे आप देखना चाहते हैं।

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