परिचय
इस साल की गर्मियों मैं Västerås में एक प्रौद्योगिकी विभाग पर काम कर रहा हूँ. मैं एक ही कंपनी में और लगभग एक ही कार्यालय में तीन सीधे गर्मियों के लिए काम किया है. काम बहुत ही तकनीकी, मजेदार और चुनौतीपूर्ण है. कई एक कार्यालय में अन्य गर्मियों में नौकरी के विपरीत, मैं एक है जहाँ मैं जिम्मेदारी है और आम कार्यों के साथ काम मिल पाया. विशेष रूप से मैं के लिए उपकरण विकसित करने के लिए गणना ज्यादातर Matlab, जीयूआई प्रोग्रामिंग और जावा का उपयोग कर काम को आसान बनाने के साथ काम करते हैं. MatLab की नई शैली वस्तु उन्मुख कोड और अधिक कुछ साल पहले की तुलना में स्पष्ट बहुत बनाता है.
समस्या
दूसरे दिन मैं एक छोटे से चुनौती का सामना करना पड़ा. सरलीकृत यह एक बहुभुज कि जटिल बताते हैं कि विमान में बिखरे हुए हैं का एक सेट encloses को खोजने पर जोर दिया. सबसे पहले मैं समारोह है कि Matlab, जो निश्चित रूप से अजीब था में इस करता नहीं मिला. इसलिए मैं एक कस्टम एल्गोरिथ्म खोजने का फैसला किया. इस पोस्ट में मैं अपने एल्गोरिथ्म का वर्णन करेंगे.
मेरा Alogritm
मैं अपने चित्रा 2 का उपयोग एल्गोरिथ्म का वर्णन करेंगे. के साथ शुरू, मैं आवास खोजने में कठिनाई की व्याख्या करेगा. बात यह है कि सभी बिंदुओं एक संरचना में unsorted हैं. यदि अंकों के एक केंद्र बिंदु के आसपास आदेश दिए हैं, आप और केंद्र से दूरी के क्रम का उपयोग करने की समस्या को हल कर सकते हैं. यह लेता है कम से कम हे (एन लॉग (एन)) एक रेखीय छाँटे गए बनाने के लिए. मेरा एल्गोरिथ्म unsorted सूची में काम करता है और शायद भी अधिक समय होगा, मैं कोई सबूत नहीं व्युत्पन्न है.
विचार यह है कम से कम एक्स दिशा में मेरे बिंदु के साथ शुरू करने के लिए और फिर बात जिस पर कश्मीर मूल्य अधिकतम हो जाता है लगता है. यानी गणना:
(k_i) अधिकतम = (y_min - y_i) / (x_min - x_i) के लिए मैं = [सभी मुद्दों] यह आपको p_2 बिंदु देता है..
X_min अधिक y-मान छोटे से सभी अंक बाहर रखा जा सकता है. छोटे p_2 से एक्स मूल्य के साथ सभी अंक भी आगे पढ़ने के लिए बाहर हो सकता है पर शासन किया.
k_2 पाया, तो कहना है कि कम से कम खोजने के द्वारा:
k_1 - (y_1 - y_i) / (x_1 - x_i) के लिए मैं = [सभी आइटम गैर अपवर्जित]
उसी तरह k_a आम तौर पर पाया द्वारा:
न्यूनतम (k_a 1-- (y_a-1 - y_i) / (x_a-1 - x_i)) के लिए मैं = [सभी आइटम गैर अपवर्जित]
गणना बहुभुज के ऊपरी आधे के लिए किया जाता है जब तक आप बिंदु है, जो एक्स दिशा में अधिकतम है को मिलता है. उसके बाद, बहुभुज के नीचे आधे के लिए एक ही एल्गोरिथ्म.
निष्पादन
कलन विधि के प्रदर्शन को कितने अंक कि polygonet में अंत पर निर्भर करता है. मैं के रूप में कई linjärsök सूची के रूप में यह polygonet में अंक मिलता है. इसका मतलब यह है कि जटिलता हे (एन * खोज की संख्या) है. इष्टतम polygonet में अंकों की संख्या 10 और 25 के बीच अपने मौका अंक पर निर्भर करता है. एल्गोरिथ्म है इसलिए अपेक्षाकृत तेजी से.
कोड
कोड सार्वजनिक नहीं है.
Matlab के समाधान - उत्तल पतवार
मेरा एल्गोरिथ्म Matlab समारोह के रूप में एक ही बात करता convhull . उत्तल पतवार इस प्रकार एक संलग्न बहुभुज या एक मध्योन्नत शरीर के लिए अंग्रेजी शब्द है. एक और अच्छा स्रोत है http://en.wikipedia.org/wiki/Convex_hull_algorithms समझा है कि सैद्धांतिक न्यूनतम करने के लिए एक उत्तल खोल पाते समय क्रम O (n लॉग (एन)) है.








