প্রশ্নটি বেশ কয়েকটি উপায়ে পড়া যায়। আমি এটি ব্যাখ্যা করি এর অর্থ আপনার কাছে প্রচুর পরিমাণে পয়েন্ট রয়েছে এবং আপনি সমন্বয়যুক্ত জোড় হিসাবে স্বেচ্ছাচারী পয়েন্টগুলি দিয়ে বারবার তদন্তের পরিকল্পনা করছেন এবং n এর আগেই নির্দিষ্ট করা n দিয়ে তদন্তের নিকটতম পয়েন্টগুলি অর্জন করতে চান। (নীতিগতভাবে, যদি n পৃথক হয়, আপনি প্রতিটি সম্ভাব্য এন এর জন্য একটি ডেটা স্ট্রাকচার সেট আপ করতে এবং প্রতিটি তদন্তের সাথে ও (1) সময়ে এটি নির্বাচন করতে পারেন: এটি খুব দীর্ঘ সেটআপ সময় নিতে পারে এবং প্রচুর র্যাম লাগতে পারে, তবে আমরা যেমন উদ্বেগ উপেক্ষা করতে বলা হয়।)
সমস্ত পয়েন্টের অর্ডার-এন ভোরোনাই চিত্রটি তৈরি করুন । এই প্লেনটি সংযুক্ত অঞ্চলে বিভক্ত করে, যার প্রত্যেকেরই একই n প্রতিবেশী রয়েছে। এটি পয়েন্ট-ইন-বহুভুজ সমস্যার ক্ষেত্রে পরিস্থিতি হ্রাস করে, যার অনেকগুলি কার্যকর সমাধান রয়েছে।
ভোরোনাই চিত্রের জন্য একটি ভেক্টর ডেটা কাঠামো ব্যবহার করে, পয়েন্ট-ইন-বহুভুজ অনুসন্ধানে ও (লগ (এন)) সময় লাগবে। ব্যবহারিক উদ্দেশ্যে আপনি খুব সহজেই ডায়াগ্রামের রাস্টার সংস্করণ তৈরি করে একটি খুব ছোট সংক্ষিপ্ত সহগ সহ এই ও (1) তৈরি করতে পারেন। রাস্টারটিতে কোষের মানগুলি হয় (i) নিকটতম পয়েন্টগুলির তালিকার একটি পয়েন্টার বা (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).
ও (১) কর্মক্ষমতা অর্জনের জন্য, রাস্টার জাল যথেষ্ট পরিমাণে ঠিক করতে হবে যে তুলনামূলকভাবে কয়েকটি প্রোব পয়েন্টগুলি একাধিক ভোরোনাই অঞ্চলগুলিকে বিভক্ত করে এমন কোষগুলিতে পড়বে। গ্রিডগুলির সঞ্চয়স্থানে সম্ভাব্য দুর্দান্ত ব্যয় সহ এটি সর্বদা সম্পন্ন করা যায়।