প্রায় এই জাতীয় সমস্ত প্রশ্নের মতোই, সর্বোত্তম পদ্ধতির উপর নির্ভর করে "ব্যবহারের ক্ষেত্রে" এবং কীভাবে বৈশিষ্ট্যগুলি উপস্থাপন করা হয়। ব্যবহারের কেসগুলি সাধারণত (ক) প্রতিটি স্তরে অনেক বা কয়েকটি বস্তু রয়েছে কিনা এবং (খ) উভয় স্তর (বা উভয়) স্তরগুলি কিছু ডেটা স্ট্রাকচার পূর্ববর্তী করার অনুমতি দেয় কিনা তা দ্বারা আলাদা করা হয়; এটি হ'ল, উভয়ই বা উভয়ই পূর্ববর্তী ক্ষেত্রে বিনিয়োগকে সার্থক করার জন্য পর্যাপ্ত স্থিতিশীল এবং অপরিবর্তনীয়।
বর্তমান ক্ষেত্রে, এটি নিম্নলিখিত পরিস্থিতিতে ফল দেয়। সাধারণত পয়েন্টগুলি গতিশীল হয়: অর্থাৎ এগুলি আগে দেওয়া হয় না। (যদি সেগুলি আগে থেকে উপলব্ধ থাকে বা খুব বড় গ্রুপে থাকে তবে সেগুলি বাছাইয়ের উপর ভিত্তি করে কিছু অপ্টিমাইজেশন পাওয়া যাবে Q ) প্রশ্নটি কোয়েরি পয়েন্টের সংখ্যা এবং পি বহুভুজের শীর্ষাংশের সংখ্যা হয়ে উঠুক ।
ভেক্টর বহুভুজের ডেটা
(1) কয়েক পয়েন্ট, কয়েক বহুভুজ ছেদচিহ্ন সাকল্যে । ক্লাসিক লাইন-স্ট্যাবিং অ্যালগরিদমের মতো একটি ব্রুট-ফোর্স পদ্ধতি ব্যবহার করুন । যে কোনও শালীন পদ্ধতির জন্য, ব্যয়টি ও (পি * কিউ) হয়, কারণ একটি বহুভুজ প্রান্তের সাথে একটি বিন্দুর তুলনা করতে ও (1) সময় ব্যয় হয় এবং এই জাতীয় সমস্ত তুলনা করতে হয়।
(২) সম্ভবত অনেকগুলি বহুভুজের শীর্ষাংশ, তবে এগুলি গতিশীল: প্রতি বারে কোনও বিন্দু কোয়েরিতে ব্যবহার করা হলে বহুভুজগুলি সমস্ত পরিবর্তিত হতে পারে। আবার ব্রুট-ফোর্স অ্যালগরিদম ব্যবহার করুন। ব্যয়টি এখনও ও (পি * কিউ), যা বড় হবে কারণ পি বড় হবে, তবে এটির কোনও সহায়তা নেই। যদি পরিবর্তনগুলি ছোট বা নিয়ন্ত্রিত হয় ( উদাহরণস্বরূপ , বহুভুজগুলি কিছুটা পরিবর্তিত আকারে বা ধীরে ধীরে ধীরে ধীরে চলতে থাকে) আপনি পরবর্তী সমাধানের একটি সংস্করণ ব্যবহার করতে সক্ষম হবেন এবং বহুভুজগুলি পরিবর্তনের সাথে সাথে ডেটা স্ট্রাকচার আপডেট করার কার্যকর উপায় খুঁজে পেতে পারেন। এটি মূল গবেষণার জন্য সম্ভবত বিষয় হতে পারে।
(3) অনেকগুলি বহুভুজ উল্লম্ব এবং স্থির বহুভুজ (যা বহুভুজ স্তর খুব কমই পরিবর্তিত হবে)। অনুসন্ধানকে সমর্থন করার জন্য কোনও ডেটা স্ট্রাকচার প্রাক্কম্প্ট করুন (যা কোনও লাইন সুইপ বা চতুর্ভুজ অ্যালগরিদমের উপর ভিত্তি করে হতে পারে )। এই অ্যালগরিদমগুলির পূর্বনির্মাণের ব্যয় হ'ল ও (পি * লগ (পি)), তবে প্রশ্নের ব্যয় হ'ল ও (কিউ * লগ (পি)) হয়ে যায়, সুতরাং মোট ব্যয় হয় ও ((পি + কিউ) * লগ ( পি))।
কিছু উন্নতি বিশেষ ক্ষেত্রে যেমন উপলব্ধ
(ক) সমস্ত বহুভুজ উত্তল হয় ( বহুভুজগুলি আরও দ্রুত করা যায় ),
(খ) সমস্ত বহুভুজ অভ্যন্তরীণগুলি বিচ্ছিন্ন , এক্ষেত্রে আপনি তাদের ইউনিয়নকে একক বহুভুজ বলে মনে করতে পারেন (যা সোজা দক্ষ অ্যালগরিদম যেমন ত্রিভুজানের উপর ভিত্তি করে, এবং
(গ) বেশিরভাগ বহুভুজ খুব মারাত্মক নয় - এর ফলে তারা তাদের সীমানা বাক্সগুলির বড় অংশ দখল করে - এমন ক্ষেত্রে আপনি কেবল বাউন্ডিং বাক্সের উপর ভিত্তি করে প্রাথমিক পরীক্ষা করতে পারেন এবং তারপরে সমাধানটি পরিমার্জন করতে পারেন। এটি একটি জনপ্রিয় অপ্টিমাইজেশন।
(d) পয়েন্টের সংখ্যাটি বড়। তাদের বাছাইয়ের সময়টির উন্নতি হতে পারে। উদাহরণস্বরূপ, বাম থেকে ডানদিকে লাইন সুইপ পয়েন্ট-ইন-বহুভুজ অ্যালগরিদম প্রয়োগ করার সময়, আপনি পয়েন্টগুলি তাদের প্রথম স্থানাঙ্কের মধ্যে সাজান, আপনি একই সময়ে বহুভুজ প্রান্তের উপর দিয়ে ঝাঁকুনির মাধ্যমে পয়েন্টগুলি সরিয়ে ফেলতে পারবেন। আমি জানি না যে এই ধরনের একটি অপ্টিমাইজেশন প্রকাশিত হয়েছে। তবে যা প্রকাশিত হয়েছে তা হ'ল সমস্ত বিন্দু এবং বহুভুজের অনুভূমিকের মিলন একটি সীমাবদ্ধ ত্রিভুজায়ন সম্পাদন করা : একবার ত্রিভুজ সম্পূর্ণ হয়ে গেলে, অভ্যন্তরীণ পয়েন্টগুলি চিহ্নিত করা দ্রুত হওয়া উচিত। গুণগত ব্যয় O (Q * লগ (কিউ) + (পি + কিউ) * লগ (পি + কিউ) হিসাবে স্কেল করবে।
রাস্টার বহুভুজ ডেটা
এটি অবিশ্বাস্যরকম সহজ: বহুভুজ স্তরটি বাইনারি সূচক রাস্টার হিসাবে দেখুন (1 = বহুভুজের অভ্যন্তরে, 0 = বাইরে)। (এটির জন্য রাস্টার মানগুলি অভ্যন্তরীণ / বাহ্যিক সূচকগুলিতে রূপান্তর করতে একটি সন্ধানের টেবিলের প্রয়োজন হতে পারে)) প্রতিটি পয়েন্ট অনুসন্ধানে এখন রাস্টার সেলের সূচীকরণের জন্য ও (1) প্রচেষ্টা প্রয়োজন এবং এর মানটি পড়তে হবে। মোট প্রচেষ্টা ও (কিউ) Q
সাধারণভাবে
একটি দুর্দান্ত সংকর সমাধানঅনেকগুলি স্ট্যাটিক ভেক্টর বহুভুজের ক্ষেত্রে (উপরে ভেক্টর কেস 3) বহুভুজনকে প্রথমে জরিমানা করতে পারে, সম্ভবত একটি মোটা রেজোলিউশন দিয়েও, এবার বহুভুজের সীমানার কোনও অংশ ছেদ করে এমন কোনও কোষকে আলাদা করে (তাদের 2 টির মান দিন, বলুন) । একজন রাস্টার প্রোব (দাম: ও (1)) ব্যবহারের ফলে সাধারণত একটি নির্দিষ্ট উত্তর পাওয়া যায় (পয়েন্টটি ভিতরে বা বাইরের হিসাবে পরিচিত) তবে মাঝে মাঝে অনির্দিষ্ট উত্তর দেয় (পয়েন্টটি এমন একটি কোষে পড়ে যার মাধ্যমে কমপক্ষে একটি প্রান্ত থাকে) পাস), সেক্ষেত্রে আরও ব্যয়বহুল ও (লগ (পি)) ভেক্টর কোয়েরি করা হয়। এই পদ্ধতিতে রাস্টারটির জন্য কিছু বাড়তি স্টোরেজ ব্যয় আনা হয়, তবে অনেক ক্ষেত্রে এমনকি একটি ছোট রাস্টার (এক এমবি 2000 দ্বারা 2000 রাস্টারকে অনুমতি দেয় যে 0,1,2, নাল-মানগুলি সংরক্ষণ করে) গণনার সময় বিশাল সুবিধা প্রদান করতে পারে । asymptotically,