একটি সমস্যা নিয়ে চিন্তা করার সময়, আমি বুঝতে পেরেছিলাম যে আমাকে নিম্নলিখিত কার্যটি সমাধান করার জন্য একটি দক্ষ অ্যালগরিদম তৈরি করতে হবে:
সমস্যা: আমাদের পাশ এর একটি দ্বি-মাত্রিক বর্গক্ষেত্র বাক্স দেওয়া হবে যার পক্ষের অক্ষগুলির সাথে সমান্তরাল l আমরা উপরের মাধ্যমে এটি দেখতে পারেন। যাইহোক, অনুভূমিক অংশগুলিও রয়েছে। প্রতিটি বিভাগে একটি পূর্ণসংখ্যা কর্ডিনেট ( ) এবং -ordordates ( ) রয়েছে এবং পয়েন্টগুলি এবং (দেখুন নীচে ছবি)।
আমরা জানতে চাইব, বাক্সের শীর্ষে প্রতিটি ইউনিট বিভাগের জন্য, আমরা যদি এই বিভাগটি দেখি তবে বাক্সের অভ্যন্তরে আমরা কতটা গভীরভাবে দেখতে পারি।
আনুষ্ঠানিকভাবে জন্য
উদাহরণ: প্রদত্ত এবং বিভাগগুলি নীচের চিত্রের মতো অবস্থিত, ফলাফল (5, 5, 5, 3, 8, 3, 7, 8, 7) । কীভাবে গভীর আলো বাক্সে যেতে পারে তা দেখুন।মি = 7 ( 5 , 5 , 5 , 3 , 8 , 3 , 7 , 8 , 7 )
সৌভাগ্যবশত আমাদের জন্য, উভয় এবং হয় বেশ ছোট এবং আমরা বন্ধ-লাইন কম্পিউটেশন করতে পারেন।
এই সমস্যার সমাধান করার সবচেয়ে সহজ অ্যালগরিদম হ'ল ব্রুটি ফোর্স: প্রতিটি বিভাগের জন্য পুরো অ্যারেটি অতিক্রম করে এবং যেখানে প্রয়োজন সেখানে আপডেট করুন। তবে এটি আমাদের খুব চিত্তাকর্ষক দেয় না ।
একটি দুর্দান্ত উন্নতি হ'ল একটি সেগমেন্ট ট্রি ব্যবহার করা যা ক্যোয়ারির সময় বিভাগে মূল্য সর্বাধিক করতে সক্ষম হয় এবং চূড়ান্ত মানগুলি পড়তে পারে। আমি এটি আর বর্ণনা করব না, তবে আমরা দেখতে পাচ্ছি যে সময়ের জটিলতা হ'ল ।
তবে আমি একটি দ্রুত অ্যালগরিদম নিয়ে এসেছি:
রূপরেখা:
কর্ডিনেটের ক্রমহ্রাসমান ক্রমগুলিতে বিভাগগুলিকে বাছাই করুন (গণনার সাজানোর প্রকরণের সাথে লিনিয়ার সময়)। এখন নোট করুন যে কোনওx এর ইউনাইট অংশটি আগে কোনও বিভাগ দ্বারা আচ্ছাদিত হয়ে থাকে তবে নিম্নলিখিত কোনও বিভাগটি এই ইউনাইট বিভাগের মধ্য দিয়ে যাওয়া আলোর রশ্মিকে আবদ্ধ করতে পারে না। তারপরে আমরা উপরের থেকে বাক্সের নীচে একটি লাইন সুইপ করব।
এখন আসুন কিছু সংজ্ঞা পরিচয় করিয়ে: -unit সেগমেন্ট মিষ্টির যার উপর একটি কাল্পনিক অনুভূমিক সেগমেন্ট হয় এক্স -coordinates পূর্ণসংখ্যা যার দৈর্ঘ্য 1. সুদূরপ্রসারী প্রক্রিয়া চলাকালীন প্রতিটি সেগমেন্ট পারেন হতে পারে অচিহ্নিত (যে, একটি হালকা মরীচি থেকে যাচ্ছে বাক্সের শীর্ষস্থানটি এই বিভাগে পৌঁছতে পারে) বা চিহ্নিত (বিপরীত ক্ষেত্রে)। X 1 = n , x 2 = n + 1 সহ সর্বদা চিহ্নবিহীন একটি এক্স- ইউনিট বিভাগ বিবেচনা করুন । এস সেটগুলি এস 0 = { 0 } প্রবর্তন করা যাকনিম্নলিখিতচিহ্নবিহীনবিভাগেরসাথে x -unit বিভাগের (যদি থাকে তবে)থাকবে। । প্রতিটি সেটে একটানাচিহ্নিতচিহ্নের পুরো ক্রম থাকবে
আমাদের এমন একটি ডেটা স্ট্রাকচার দরকার যা এই বিভাগগুলিতে পরিচালনা করতে সক্ষম হয় এবং দক্ষতার সাথে সেট করে। আমরা সর্বাধিক হোল্ড ফিল্ড দ্বারা প্রসারিত একটি সন্ধান ইউনিয়ন কাঠামো ব্যবহার করব -unit সেগমেন্ট ইনডেক্স (সূচকঅচিহ্নিতসেগমেন্ট)।
এখন আমরা বিভাগগুলি দক্ষতার সাথে পরিচালনা করতে পারি। ধরা যাক আমরা এখন -th বিভাগটিকে ক্রমানুসারে বিবেচনা করছি (এটি "ক্যোয়ারী" বলুন), যা x 1 থেকে শুরু হয়ে x 2 এ শেষ হবে । আমরা সব বের করতে হবে অচিহ্নিত এক্স -unit অংশ যা ভিতরে অন্তর্ভুক্ত করা হয় আমি -th সেগমেন্ট (এই ঠিক অংশ যার উপর হালকা মরীচি তার পথ শেষ হয়ে যাবে আছে)। আমরা নিম্নলিখিতটি করবো: প্রথমত, আমরা কোয়েরির ভিতরে প্রথম চিহ্নবিহীন বিভাগটি পাই ( x 1 রয়েছে এমন সেটটির প্রতিনিধি খুঁজুন এবং এই সেটটির সর্বাধিক সূচীটি পাবেন, যা সংজ্ঞা অনুসারে চিহ্ন চিহ্নযুক্ত অংশ )। তারপরে এই সূচকটি ক্যোয়ারির অভ্যন্তরে রয়েছে, এটিকে ফলাফলের সাথে যুক্ত করুন (এই বিভাগের ফলাফল y হয় ) এবংএই সূচিটিচিহ্নিত করুন ( x এবং x + 1 সমেতইউনিয়নসেট)। তারপর এই পদ্ধতি পুনরাবৃত্তি যতক্ষণ না আমরা সব অনুসন্ধানঅচিহ্নিতঅংশ হলো, আগামীখুঁজুনক্যোয়ারী আমাদের সূচক দেয় এক্স ≥ এক্স 2 ।
নোট করুন যে প্রতিটি ফাইন্ড -ইউনিয়ন অপারেশন কেবল দুটি ক্ষেত্রে করা হবে: হয় আমরা একটি বিভাগ বিবেচনা করা শুরু করি (যা টাইম হতে পারে ) অথবা আমরা সবেমাত্র একটি এক্স- ইউনিট বিভাগ চিহ্নিত করেছি (এটি এন বার হতে পারে )। সুতরাং সামগ্রিক জটিলতার হয় হে ( ( এন + + মি ) α ( এন ) ) ( α হয় একটি Ackermann ফাংশন বিপরীত )। যদি কিছু পরিষ্কার না হয় তবে আমি এ সম্পর্কে আরও বিস্তারিত বলতে পারি। আমার কিছুটা সময় থাকলে আমি কিছু ছবি যুক্ত করতে সক্ষম হব।
এখন আমি "প্রাচীর" পৌঁছেছি। আমি লিনিয়ার অ্যালগরিদম নিয়ে আসতে পারি না, যদিও মনে হয় এটি একটি হওয়া উচিত। সুতরাং, আমার দুটি প্রশ্ন রয়েছে:
- লিনিয়ার-টাইম অ্যালগরিদম আছে (যা, ) অনুভূমিক অংশটি দৃশ্যমানতার সমস্যাটি সমাধান করছে?
- যদি না হয়, প্রমাণ দৃশ্যমানতা সমস্যা কি ?