2013-09-23 9 views
6

मैं दो ArrayList, डबल डेटा प्रकार, 1.latitudes 2. देशांतर, प्रत्येक 200 से अधिक तत्वोंएक सरणी में निकटतम निर्देशांक ढूँढना?

मैं एक यादृच्छिक परीक्षण निर्देशांक देते हैं, का कहना है कि कहना है (1.33, 103.4), प्रारूप [अक्षांश है , देशांतर]

क्या निकटतम बिंदु, आसानी से ढूंढने के लिए कोई एल्गोरिदम है या क्या मुझे हर संभव बिंदु की गणना करने के लिए बलपूर्वक बल देना है, hypotenuse ढूंढना है, और फिर निकटतम बिंदु को वापस करने के लिए 200 से अधिक hypotenuses की तुलना करना है? धन्यवाद

+2

सॉर्ट करने के लिए आप सभी hypotenuses की गणना कैसे करते हैं, तो आप दूरी की गणना और सभी एक पाश में मिनट (दूरी) तर्क को लागू कर सकते है। इसके अलावा आपके सभी बिंदु भौगोलिक रूप से एक दूसरे के करीब होना चाहिए ताकि आप इस क्षेत्र को एक सादे मान सकें, अन्यथा आपको पृथ्वी वक्रता को ध्यान में रखना होगा। –

+3

दूरी की आपकी परिभाषा क्या है?"hypothenuse" प्लानर ज्यामिति से एक शब्द है, लेकिन "रेखांश" और "अक्षांश" का उपयोग यह इंगित करता है कि अंक एक क्षेत्र की सतह पर हैं ... – meriton

+3

क्या आपने आर-पेड़ (https: // en .wikipedia.org/wiki/आर-वृक्ष)? या सामान्य रूप से स्थानिक इंडेक्सिंग एल्गोरिदम (https://en.wikipedia.org/wiki/Spatial_index#Spatial_index)? –

उत्तर

0

यदि आपके सरणी क्रमबद्ध हैं, तो आप सरणी में अनुरोधित बिंदु की स्थिति खोजने के लिए बाइनरी खोज का उपयोग कर सकते हैं। इंडेक्स मिलने के बाद, आपको निकटतम खोजने के लिए चार अंकों के चारों ओर जांच करनी चाहिए।

1) मान लीजिए आपके पास दो क्रमबद्ध सरणियों देशांतर के लिहाज से और अक्षांश के लिहाज से

2) आप पहले एक खोज और दो पास के अंक

3 लगता है) तो फिर तुम एक दूसरे के खोज और दो अधिक अंक पाते हैं

4) अब आप दो से चार अंक से है (परिणाम एक दूसरे को काटना हो सकता है)

5) ये अंक गंतव्य बिंदु के चारों ओर एक वर्ग बनेगी

6) निकटतम बिंदु

2

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

फिर, दोनों बिंदुओं में सरणी के साथ खोज करें जब तक कि इन बिंदुओं की दूरी अब तक का सबसे अच्छा परिणाम से अधिक न हो। सबसे छोटा दूरी बिंदु जवाब है।

इसके परिणामस्वरूप पूरे सरणी को खोजना पड़ सकता है, और Branch and bound का एक रूप है जो समस्या की ज्यामिति से बाधित है। यदि अंक उस बिंदु के आसपास समान रूप से वितरित किए जाते हैं, जिसे आप खोज रहे हैं, तो स्कैन को कई परीक्षणों की आवश्यकता नहीं होगी।

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

0

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

worng approach

तो सबसे अच्छा तरीका है सब दूरी की गणना और उन्हें

+0

एक धुरी के साथ निकटतम बिंदु का चयन करने का दृष्टिकोण खोज के लिए एक प्रारंभिक बिंदु है। यह कम से कम एक अक्ष के साथ दूरी को कम करता है। बाद की जांच आगे (दोनों दिशाओं में) निकटतम बिंदु की पहचान करेगी। दूरी मीट्रिक की पसंद क्षेत्र के वक्रता पर निर्भर करता है। – Pekka

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