एक दायरे में मकान ढूंढना


10

एक साक्षात्कार के दौरान मुझे निम्नलिखित प्रश्न दिए गए थे: एक अचल संपत्ति आवेदन जो उन सभी घरों को सूचीबद्ध करता है जो वर्तमान में बाजार में हैं (यानी बिक्री के लिए) एक निश्चित दूरी के भीतर (उदाहरण के लिए उपयोगकर्ता 20 मील के भीतर सभी घरों को खोजना चाहता है), इस प्रकार की सेवा के निर्माण के लिए आप अपने एप्लिकेशन (डेटा संरचना और एलोगिरिथ्म दोनों) को कैसे डिज़ाइन करेंगे?

कोई विचार? आप इसे कैसे लागू करेंगे? मैंने उससे कहा कि मुझे नहीं पता कि मैंने पहले कभी कोई भू-संबंधित सामान नहीं किया है।

जवाबों:


6

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

यह देखते हुए कि दूरी 20M या उससे कम है, आप शायद दूरी की गणना करने के लिए समतल पृथ्वी मान रहे हैं, हालाँकि आपको 20M के अंत की ओर ध्यान देने योग्य त्रुटियां दिखाई देने लगेंगी, यदि बहुत बड़ी रेंज की सही-सही आवश्यकता है, तो आपको बेहतर दूरी के मॉडल को देखना शुरू करना होगा। ग्लोब के लिए उदाहरण के लिए हावरसीन दूरी

वहाँ भी निश्चित रूप से एक असंख्य अन्य विवरण हैं जिन पर चर्चा की जा सकती है जैसे यूआई डिज़ाइन, डीबी स्कीमा जो पूरे विषय अपने आप में हो सकते हैं


20 मील की दूरी पर, एक सपाट पृथ्वी मॉडल के कारण होने वाली त्रुटियां नगण्य होंगी। वैसे भी, जब कोई उपयोगकर्ता अपने कार्यालय के 20 मील के भीतर घरों की एक सूची देखना चाहता है, तो वह परवाह नहीं करता है कि 20 मील और 10 गज की दूरी पर एक घर परिणामों में शामिल है।
केविन क्लाइन

1
वास्तव में, और यदि कुछ गलत सकारात्मक चीजें महत्वपूर्ण नहीं हैं, तो आप वास्तविक दूरी की गणना पूरी तरह से छोड़ सकते हैं और एमबीआर
जेके

एक बात मैं उत्सुक हूँ: बिक्री के लिए घरों की विशाल संख्या को देखते हुए, क्या कंपनियां (जैसे कि ज़ीलो शायद?) एक डीबी में यह सब स्टोर करती हैं और बस इसका चयन करती रहती हैं। मुझे लगता है कि यह एक बहुत बड़ा प्रदर्शन होगा और यह बहुत तेजी से एक ग्राफ प्रतिनिधित्व - शायद मैट्रिक्स या आसन्न सूची के साथ मेमोरी में स्टोर करने और निकटतम एल्गोरिदम का उपयोग करने के लिए निकटतम घरों को खोजने के लिए बहुत तेज़ होगा। तुम क्या सोचते हो?
पॉल स्मिथ

@paulsmith मुझे नहीं पता, लेकिन मुझे दृढ़ता से संदेह है कि यह एक स्थानिक DB में है, एक स्थानिक DB शायद आंतरिक रूप से एक ग्राफ प्रतिनिधित्व का उपयोग करेगा वैसे भी (सबसे अधिक संभावना है कि आर-ट्री चर्चा के रूप में, लेकिन अन्य विकल्प हैं) कुंजी पहली जगह में एक न्यूनतम बाउंडिंग आयत में केवल आइटम का चयन करने में सक्षम
जेके।

8

जब भी आपको इस तरह के प्रश्न का सामना करना पड़ता है और आपको बस समस्या क्षेत्र में विशेषज्ञता हासिल नहीं होती है तो कुछ चीजें करना अच्छा होता है।

पहले स्वीकार करें कि आपके पास इस समस्या डोमेन में विशिष्ट विशेषज्ञता नहीं है।

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

हालाँकि, भौगोलिक खोज के साथ काम करने के दौरान मेरे पास विशिष्ट अनुभव नहीं है, मुझे विश्वास है कि समस्या को हल करने के लिए अच्छी तरह से प्रलेखित एल्गोरिदम और मौजूदा प्रौद्योगिकियाँ हैं। मैं उन्हें उन सामान्य समाधानों का ज्ञान प्राप्त करने के लिए खोज करूंगा जो मेरे लिए उपलब्ध हैं और परियोजना की आवश्यकताओं के आधार पर कार्यान्वयन के बारे में एक विकल्प बनाते हैं।

तीसरा , हमेशा इस तरह की समस्याओं को उनके बुनियादी घटकों के लिए कम करें। आप जानते हैं कि मानचित्र पर स्थान 2-डिमन्सिबल रूप से वितरित हैं। आप जानते हैं कि यदि आपको मनमाना x दिया जाता है, तो y एक निर्देशांक से प्रत्येक निर्देशांक की दूरी का समन्वय करता है और एक त्रिभुज बनाकर और अज्ञात लंबाई के लिए हल करके गणना की जाती है। आप यह भी जानते हैं कि यदि आपको एक बाउंडिंग बॉक्स के भीतर सभी निर्देशांक खोजने के लिए कहा जाता है, तो आप ऐसा केवल उस बॉक्स के एक्सटेन्स की गणना करके कर सकते हैं जिसे आप दोनों अक्ष के साथ तर्क से कम, सरल और अधिक से अधिक उपयोग करना चाहते हैं।

अंत में , मैंने कभी भी एक डेवलपर को काम पर नहीं रखा है जो प्रश्नों पर हार मान रहा था । अगर मैं एक प्रश्न पूछता हूं और व्यक्ति कहता है कि "मुझे नहीं पता" और मौखिक रूप से इसके माध्यम से सोचने का प्रयास भी नहीं करता है तो इससे मुझे यह आभास होता है कि वे विचार मंथन सत्र में योगदान नहीं देंगे - जो कि सॉफ्टवेयर लिखने वाले संगठनों में महत्वपूर्ण है ।


सभी अच्छी सलाह
जे.के.

@ फिर, मैं निश्चित रूप से आपके द्वारा बताई गई सभी चीजों से सहमत हूं, क्योंकि सत्र शुरू होने से पहले साक्षात्कारकर्ता ने स्पष्ट रूप से कहा था कि यह कहना ठीक है कि आप नहीं जानते, मैंने सिर्फ उसके निर्देशों का पालन किया और उसे उल्टा बता दिया कि मुझे नहीं पता था: )
पॉल स्मित

4

यह शायद स्पष्ट है, लेकिन कई अनुप्रयोगों के लिए गरीब आदमी का धीमा समाधान ठीक हो सकता है।

एक संबंधपरक डेटाबेस में एक तालिका है जो अक्षांश और देशांतर को संग्रहीत करता है। सभी स्थानों के लिए क्वेरी जो 20 मील के भीतर एक अक्षांश और 20 मील के भीतर देशांतर है। यह आपको एक छोटी आयत की आयत का एक बाउंडिंग आयत देता है जिसमें वह त्रिज्या होती है जिसे आप वास्तव में खोजना चाहते हैं (और साथ ही साथ पृथ्वी की वक्रता को भी अनदेखा करते हैं)।

फिर आप वह सेट लेते हैं जो वापस लौटाया जाता है (अनुक्रमित का उपयोग करके क्वेरी द्वारा), और दूरी की सटीक गणना का उपयोग करके इसे फ़िल्टर करें।

इसलिए, कुशल प्रदर्शन नहीं, लेकिन विकसित करने के लिए समय में बहुत कुशल। कई अनुप्रयोगों के लिए जो एक बेहतर विकल्प हो सकता है।


2

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.