หาบ้านในรัศมี


10

ในระหว่างการสัมภาษณ์ฉันถูกขอให้ระบุสิ่งต่อไปนี้: แอปพลิเคชันอสังหาริมทรัพย์ที่แสดงรายการบ้านทั้งหมดที่อยู่ในตลาดปัจจุบัน (เช่นเพื่อขาย) ภายในระยะทางที่กำหนด (พูดตัวอย่างเช่นผู้ใช้ต้องการค้นหาบ้านทั้งหมดภายใน 20 ไมล์) คุณจะออกแบบแอปพลิเคชันของคุณอย่างไร (ทั้งโครงสร้างข้อมูลและอะโลกิริทึม) เพื่อสร้างบริการประเภทนี้

ความคิดใด ๆ คุณจะใช้มันอย่างไร? ฉันบอกเขาว่าฉันไม่รู้เพราะฉันไม่เคยทำเรื่องทางภูมิศาสตร์มาก่อน

คำตอบ:


6

พวกเขาอาจจะหลังจากที่คำตอบกล่าวขวัญการจัดทำดัชนีเชิงพื้นที่ส่วนใหญ่มีแนวโน้มโดยการเลือกฐานข้อมูลที่ให้การจัดทำดัชนีเชิงพื้นที่ออกจากกล่องแต่คุณยังอาจได้รับไม่กี่จุดโดยกล่าวถึงจะสามารถดำเนินการในการประยุกต์ใช้ตัวเองถ้าเช่นจำเป็นโดยการดำเนินการวิจัย - ทรี (อาจเป็นประโยชน์ถ้าการเลือกฐานข้อมูลได้รับการแก้ไขด้วยเหตุผลอื่นหรือไม่ แต่ยังแสดงให้เห็นว่าคุณรู้ว่าฐานข้อมูลเชิงพื้นที่ทำงานอย่างไร) การจัดทำดัชนีเชิงพื้นที่จะช่วยให้คุณได้รับส่วนย่อยของสถานที่ที่อยู่ในกล่องค้นหาอย่างรวดเร็วคุณสามารถปรับแต่งสิ่งนี้ได้อีกโดยการคำนวณระยะทางจริง (ถ้าจำเป็นรูปสี่เหลี่ยมเพียงอย่างเดียวอาจดีพอ) สำหรับแต่ละการค้นหาจริง วงกลม / วงรี

เนื่องจากระยะทางมีแนวโน้มว่า 20M หรือน้อยกว่านั้นคุณอาจตกลงบนพื้นราบเพื่อคำนวณระยะทางแม้ว่าคุณจะเริ่มเห็นข้อผิดพลาดที่เห็นได้ชัดไปจนถึงจุดสิ้นสุด 20M หากต้องการช่วงที่มีขนาดใหญ่กว่าอย่างแม่นยำ สำหรับโลกเช่นระยะทาง Haversine

นอกจากนี้ยังมีรายละเอียดอื่น ๆ อีกมากมายที่สามารถพูดได้เช่นการออกแบบ UI, DB schema ซึ่งอาจเป็นหัวข้อทั้งหมดในสิทธิของตนเอง


ที่ 20 ไมล์ข้อผิดพลาดเนื่องจากแบบจำลองพื้นราบจะไม่สำคัญ อย่างไรก็ตามเมื่อผู้ใช้ต้องการดูรายการบ้านที่อยู่ในระยะ 20 ไมล์จากสำนักงานของเขาเขาไม่สนใจว่าจะมีบ้านที่อยู่ห่างออกไป 20 ไมล์และ 10 หลาอยู่ในผลการค้นหาหรือไม่
วินไคลน์

1
แน่นอนและหากว่าผลบวกที่ผิดพลาดไม่สำคัญคุณอาจข้ามการคำนวณระยะทางจริงไปพร้อมกันและส่งคืน MBR
jk

สิ่งหนึ่งที่ฉันอยากรู้เกี่ยวกับ: เนื่องจากมีบ้านขายจำนวนมาก บริษัท ต่างๆ (เช่น Zillo อาจจะ) เก็บไว้ทั้งหมดในฐานข้อมูลและเพียงแค่เลือกจากมัน? ฉันคิดว่ามันน่าจะเป็นผลงานที่ยิ่งใหญ่และมันจะเร็วกว่ามากในการจัดเก็บทั้งหมดไว้ในหน่วยความจำด้วยการแสดงกราฟ - อาจเป็นเมทริกซ์หรือรายการคำสรรพนามและใช้อัลกอริทึมระยะทางเพื่อค้นหาบ้านที่ใกล้ที่สุด คุณคิดอย่างไร?
paul smith

@ ช่างประปาฉันไม่รู้ แต่ฉันสงสัยอย่างยิ่งว่ามันอยู่ในฐานข้อมูลเชิงพื้นที่ฐานข้อมูลเชิงพื้นที่อาจจะใช้การแสดงกราฟภายในต่อไป (ส่วนใหญ่น่าจะเป็นต้นไม้ R- ตามที่กล่าวถึง แต่มีตัวเลือกอื่น ๆ ) สามารถเลือกได้เฉพาะรายการที่อยู่ในสี่เหลี่ยมมุมต่ำสุดในตำแหน่งแรก
jk

8

เมื่อใดก็ตามที่คุณประสบกับคำถามเช่นนี้และคุณไม่มีความเชี่ยวชาญในโดเมนปัญหาคุณควรทำสองสามอย่าง

ก่อนอื่นรับทราบว่าคุณไม่มีความเชี่ยวชาญเฉพาะในโดเมนปัญหานี้

ขั้นที่สองอธิบายว่าคุณจะแก้ปัญหาอย่างไร

แม้ว่าฉันจะไม่มีประสบการณ์ที่เฉพาะเจาะจงเมื่อทำงานกับการค้นหาทางภูมิศาสตร์ฉันมั่นใจว่ามีอัลกอริทึมที่มีเอกสารที่ดีและเทคโนโลยีที่มีอยู่เพื่อแก้ไขปัญหา ฉันจะสำรวจสิ่งเหล่านี้เพื่อรับความรู้เกี่ยวกับการแก้ปัญหาทั่วไปที่มีให้ฉันและทำการเลือกเกี่ยวกับการดำเนินการตามข้อกำหนดของโครงการ

ประการที่สามลดปัญหาเช่นนี้ตลอดไปจนถึงองค์ประกอบพื้นฐาน คุณรู้ว่าตำแหน่งบนแผนที่นั้นมีการกระจายแบบ 2 มิติ คุณรู้ว่าถ้าคุณได้รับโดยพลการ x, y พิกัดระยะทางสำหรับแต่ละพิกัดจากพิกัดอื่นคำนวณโดยการสร้างรูปสามเหลี่ยมและแก้สำหรับความยาวที่ไม่รู้จัก คุณหวังว่าจะรู้ว่าหากคุณถูกขอให้ค้นหาพิกัดทั้งหมดภายในกล่องขอบเขตคุณสามารถทำได้โดยการคำนวณขอบเขตของกล่องที่คุณต้องการค้นหาและใช้ง่ายกว่าตรรกะน้อยกว่าทั้งสองแกน

สุดท้ายฉันไม่เคยจ้างนักพัฒนาที่ดูเหมือนจะเลิกตอบคำถาม ถ้าฉันถามคำถามและบุคคลนั้นพูดว่า "ฉันไม่รู้" และไม่แม้แต่จะพยายามคิดผ่านมันด้วยวาจาทำให้ฉันรู้สึกว่าพวกเขาไม่ได้มีส่วนร่วมในการระดมสมอง - ซึ่งเป็นสิ่งสำคัญสำหรับองค์กรที่กำลังเขียนซอฟต์แวร์ .


ทุกคำแนะนำที่ดี
jk

@Ben ฉันเห็นด้วยกับทุกสิ่งที่คุณกล่าวถึงอย่างแน่นอนอย่างไรก็ตามเนื่องจากผู้สัมภาษณ์พูดอย่างเปิดเผยก่อนเริ่มเซสชันว่าไม่เป็นไรที่จะบอกว่าคุณไม่รู้ฉันเพิ่งทำตามคำแนะนำของเขาและบอกเขาล่วงหน้าว่าฉันไม่รู้: )
paul smith

4

นี่อาจเห็นได้ชัด แต่สำหรับหลาย ๆ แอปการแก้ปัญหาที่ช้าของคนจนอาจใช้ได้

มีตารางในฐานข้อมูลเชิงสัมพันธ์ที่เก็บละติจูดและลองจิจูด ค้นหาสถานที่ทั้งหมดที่มีละติจูดภายใน 20 ไมล์และลองจิจูดภายใน 20 ไมล์ สิ่งนี้จะช่วยให้คุณมีขอบเขตสี่เหลี่ยมผืนผ้าขนาดของขอบเขตสี่เหลี่ยมผืนผ้าที่เล็กที่สุดที่มีรัศมีที่คุณต้องการค้นหา (และไม่สนใจความโค้งของโลกด้วย)

จากนั้นคุณนำชุดที่ส่งคืน (โดยแบบสอบถามโดยใช้ดัชนี) และกรองลงโดยใช้การคำนวณระยะทางที่แม่นยำ

ดังนั้นประสิทธิภาพไม่ได้มีประสิทธิภาพ แต่มีประสิทธิภาพมากในเวลาที่จะพัฒนา สำหรับแอปพลิเคชั่นมากมายที่อาจเป็นทางเลือกที่ดีกว่า


2

วิธีที่ง่ายที่สุดคือการใช้ควอดทรีในการจัดเก็บตำแหน่งบ้านของคุณโดยสมมติว่ามีการกระจายในแนวนอนแบบ 2D การค้นหาควรตรงไปตรงมาพอสมควร

หากคุณใช้ RDBMS ที่เปิดใช้งาน GIS เพื่อจัดเก็บข้อมูลของคุณคุณไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งนั้น ดูคำถามนี้สำหรับข้อมูลบางอย่างเกี่ยวกับประสิทธิภาพของผู้เล่นหลัก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.