কেবলমাত্র ও (কে) মেমরি ও (এন) সময়ের সাথে প্রদত্ত ক্রম থেকে কি'থ ক্ষুদ্রতম উপাদান সন্ধান করা


11

ধরা যাক আমরা একের পর এক সংখ্যাগুলির ক্রম পড়ি । কিভাবে এটি 'ম ক্ষুদ্রতম মাত্র ব্যবহার করে উপাদান সেল মেমরি এবং রৈখিক সময় ( )। আমি মনে করি আমরা প্রথম সংরক্ষণ করা উচিত ক্রম পদ এবং কখন পেতে 'ম শব্দ, একটি শব্দ যা আমরা নিশ্চিত যে এটা হতে পারে না মুছতে ম ক্ষুদ্রতম উপাদান এবং তারপর সংরক্ষণ করুন' 'ম পরিভাষা। সুতরাং আমাদের একটি সূচক থাকা উচিত যা প্রতিটি পদক্ষেপে এই অকেজো শব্দটি দেখায় এবং এই সূচকটি প্রতিটি পদক্ষেপে দ্রুত আপডেট হওয়া উচিত। আমি "সর্বোচ্চ" দিয়ে শুরু করেছি ; তবে তা দ্রুত আপডেট হতে পারে না; মানে আমরা যদি সর্বোচ্চ বিবেচনা করিnkO(k)O(n)kk+1k( কে ) ( এন - কে ) × ( কে ) কেk+1তারপরে প্রথম মুছে ফেলার পরে আমরা সর্বোচ্চটি মিস করি এবং আমাদের এবং এর কারণ সময়টি লিনিয়ার না হওয়ার সময় সর্বাধিক অনুসন্ধান করা উচিত । হয়তো আমরা প্রথম সংরক্ষণ করা উচিত ক্রম পদ আরো বুদ্ধিমত্তার।O(k)(nk)×O(k)k

আমি কীভাবে এই সমস্যার সমাধান করব?


1
আপনি কি কোনও অনলাইন অ্যালগরিদম সম্পর্কে আগ্রহী, বা কোনও অ্যালগরিদম করবেন?
যুবাল ফিল্মাস

যদি তবে আপনি আদেশের পরিসংখ্যান অ্যালগরিদম ব্যবহার করে এটি করতে পারেন। যদি তবে আপনি উচ্চতা ভারসাম্যযুক্ত গাছ ব্যবহার করে মেমরি এবং সময় করতে পারেন। কে = ( এন ) ( কে ) ( এন লগ কে )k=θ(n)k=o(n)O(k)O(nlogk)
শ্রীেশ

এটা তোলে নির্বাচন সমস্যা বলা হচ্ছে en.wikipedia.org/wiki/Selection_algorithm
xavierm02

প্লেয়ার ইন-প্লেস অ্যালগরিদমগুলি রয়েছে, যা আপনি গুগল করতে পারেন তবে তারা কিছুটা জটিল।
যুবাল ফিল্মাস

@ xavierm02 এটি অভিন্নভাবে নির্বাচনের সমস্যা নয়। কারণ একটি স্মৃতি সীমাবদ্ধতা আছে।
শাহাব_এইচকে

উত্তর:


16

আকারের একটি বাফার তৈরি করুন । অ্যারে থেকে উপাদানগুলিতে পড়ুন । বাফারকে পার্টিশন করার জন্য একটি রৈখিক-সময় নির্বাচন অ্যালগরিদম ব্যবহার করুন যাতে ক্ষুদ্রতম উপাদানগুলি প্রথমে থাকে; এটি সময় নেয় । বাফারে আপনার অ্যারের থেকে অন্য আইটেম পড়ুন, বাফার বৃহত্তম আইটেমগুলি প্রতিস্থাপন করুন, বাফারটিকে আগের মতো ভাগ করুন এবং পুনরাবৃত্তি করুন।2 কে কে ( কে ) কে কে2k2kkO(k)kk

এটি সময় এবং স্থান নেয়।( কে )O(kn/k)=O(n)O(k)


+1, এটি জিজ্ঞাসিত অ্যাসিম্পটোটিকগুলি ফিট করে। যে হচ্ছে বলেন, আমি বিশ্বাস করি না এই একটি একক রৈখিক সময় নির্বাচন অ্যালগরিদম করছেন চেয়ে দ্রুত ... ব্যতীত একটি ছোট ধ্রুবক হয়, তাহলে এটি একটি আকর্ষণীয় দৃষ্টিকোণ প্রদান করে। উদাহরণস্বরূপ এই অ্যালগরিদম ফাংশনটি উত্পাদন করে । কে = 1kk=1min
orlp

1
কখনও কখনও, রৈখিক-সময় নির্বাচন অ্যালগরিদম খুব বেশি স্থান ব্যবহার করে। উদাহরণস্বরূপ, এটি স্ট্রিমিং প্রসঙ্গে বা ইনপুট অ্যারে অপরিবর্তনীয় যখন ব্যবহারের জন্য উপযুক্ত নয়।
jbapple

সেগুলি বৈধ পয়েন্ট।
orlp

3

আপনি মেমরি এবং সময়ে সময়ে প্রথম উপাদানগুলির একটি নির্দিষ্ট আকারের সর্বোচ্চ-হিপ গঠন করে , তারপরে বাকী অ্যারের উপরে পুনরাবৃত্তি করে এবং একটি চাপ দিয়ে এটি করতে পারেন নতুন উপাদান এবং তারপরে জন্য পপিং প্রতিটি সময়কে মোট সময় দেয় = ।O(k)O(nlogk)kO(k)O(logk)O(k+nlogk)O(nlogk)

আপনি এটি সহায়ক মেমরি এবং সময়ে মিডিয়েন-অফ-মিডিয়ানস নির্বাচনীকরণ অ্যালগরিদম ব্যবহার করে, এ নির্বাচন করে এবং প্রথম উপাদানগুলিতে ফিরে এসে এটি করতে পারেন। অ্যাসিম্পটিকগুলিতে কোনও পরিবর্তন না করে আপনি গড় কেস দ্রুত করতে ইন্ট্রোসलेक्ट ব্যবহার করতে পারেন। এটি আপনার সমস্যা সমাধানের আধ্যাত্মিক উপায়।O(logn)O(n)kk

এখন প্রযুক্তিগতভাবে এবং অতুলনীয়। তবে আমি যুক্তি দিয়ে বলছি যে অনুশীলনে আরও ভাল, কারণ কোনও কম্পিউটার সিস্টেমে মেমরির বাইটের বেশি, effectively নয় বলে কার্যকরভাবে ধ্রুবক হিসাবে বিবেচনা করা হয় । এদিকে মতো বড় হতে পারে ।( কে ) ( লগ এন ) 2 64 লগ 2 64 = 64 কে এনO(logn)O(k)O(logn)264log264=64kn


নোট করুন যে আপনি হিপ-ভিত্তিক অ্যালগরিদমকে এর জটিলতা উন্নত করতে পারেন যখন এটি আকর্ষণীয় হয় তখন apাল দ্বারা ব্যবহৃত ক্রমটি বিপরীত করে। O(n×logmin(k,nk))
xavierm02

@ xavierm02 = । প্রুফ: জন্য সবচেয়ে খারাপ অবস্থা হল । জন্য সবচেয়ে খারাপ ক্ষেত্রে হয় । ধ্রুবক ফ্যাক্টরের মধ্যে এগুলি একই হয়, এইভাবে = । O(min(k,nk))O(k)knmin(k,nk)n2O(min(k,nk))O(k)
orlp

@ xavierm02 এটি বলা হচ্ছে, এটি এখনও একটি দুর্দান্ত
স্পিডআপ

un,k=k হয় কিন্তু এটা না। ধরুন তো তাই। তারপরে কিছু এবং কিছু যাতে প্রতিটি আমাদের কাছে যা পরিষ্কারভাবে মিথ্যা (কারণ আমরা সুতরাং । O(k)O(min(k,nk))CMMknkC(nk)n=k+).O(min(k,nk))O(k)
xavierm02

@ xavierm02 আমি আপনার ation স্বাক্ষরের সাথে অপরিচিত । সত্যি কথা বলতে, আমি বহুমুখী বড়- স্বরলিপিটির সাথে সাধারণভাবে বেশ অপরিচিত , বিশেষত যে মাত্রাগুলি বিবেচনা করে সম্পর্কযুক্ত নয়। un,kOn,k
orlp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.