प्रश्न को कई तरीकों से पढ़ा जा सकता है। मेरा मतलब है कि आपके पास बड़ी संख्या में अंक हैं और आप उन्हें मनमाने ढंग से बिंदुओं के साथ बार-बार जांच करने का इरादा रखते हैं, समन्वित जोड़े के रूप में दिए गए हैं, और जांच के लिए निकटतम निकटतम बिंदुओं को प्राप्त करने की इच्छा रखते हैं, एन निश्चित पूर्व से। (सिद्धांत रूप में, यदि n अलग-अलग होगा, तो आप हर संभव n के लिए एक डेटा संरचना सेट कर सकते हैं और इसे प्रत्येक जांच के साथ O (1) समय में चुन सकते हैं: यह बहुत लंबा सेटअप समय ले सकता है और बहुत अधिक RAM की आवश्यकता होती है, लेकिन हम ऐसी चिंताओं को नजरअंदाज करने के लिए कहा जाता है।)
सभी बिंदुओं के क्रम-एन वोरोनोई आरेख का निर्माण करें । यह विमान को जुड़े क्षेत्रों में विभाजित करता है, जिनमें से प्रत्येक में समान पड़ोसी होते हैं। यह स्थिति को बिंदु-इन-बहुभुज समस्या को कम करता है, जिसमें कई कुशल समाधान हैं।
वोरोनोई आरेख के लिए एक वेक्टर डेटा संरचना का उपयोग करते हुए, बिंदु-इन-बहुभुज खोजों में ओ (लॉग (एन)) समय लगेगा। व्यावहारिक उद्देश्यों के लिए आप इस O (1) को आरेख के रेखापुंज संस्करण बनाकर एक अत्यंत छोटे निहित गुणांक के साथ बना सकते हैं। रेखापुंज में कोशिकाओं के मान या तो हैं (i) n निकटतम बिंदुओं की सूची के लिए एक सूचक या (ii) एक संकेत है कि यह कोशिका आरेख में दो या अधिक क्षेत्रों को स्थिर करती है। एक मनमाना बिंदु के लिए परीक्षण (x, y) हो जाता है:
Fetch the cell value for (x,y).
If the value is a list of points, return it.
Else apply a vector point-in-polygon algorithm to (x,y).
O (1) प्रदर्शन को प्राप्त करने के लिए, रास्टर जाल को पर्याप्त रूप से ठीक होना चाहिए कि अपेक्षाकृत कुछ जांच बिंदु कोशिकाओं में गिरेंगे जो कई वोरोनोई क्षेत्रों को फैलाते हैं। यह हमेशा पूरा किया जा सकता है, ग्रिड के लिए भंडारण में संभावित रूप से महान व्यय के साथ।