সময়ে অরসোর্টেড অ্যারের মাঝারি সন্ধান করুন


45

একটি অমীমাংসিত অ্যারের মাঝারিটি সন্ধান করতে আমরা উপাদানগুলির জন্য সময় একটি মিনিট হিপ করতে পারি এবং তারপরে আমরা মিডিয়ান পেতে একটি উপাদান একটি করে বের করতে পারি । তবে এই পদ্ধতির জন্য সময় লাগবে।এন এন / 2 ( এন লগ এন )O(nlogn)nn/2O(nlogn)

আমরা সময়ে কোনও পদ্ধতিতে একই করতে পারি ? আমরা যদি পারি, তবে কীভাবে?O(n)



1
@ জুক্কা সুওমেলা কেন এটিকে দ্রুত এবং সাধারণ উত্তর হিসাবে তুলবেন না (আদর্শভাবে এই জাতীয় একটি অ্যালগরিদমের সংক্ষিপ্ত ব্যাখ্যা সহ)?
রাফায়েল

2
সম্পর্কিত মেটা আলোচনা নোট করুন ; যেমনটি দেখা যাচ্ছে, সাধারণ ওয়েব অনুসন্ধানগুলি এই প্রশ্নের উত্তরের দিকে নিয়ে যায়।
রাফেল

উত্তর:


45

এই একটি বিশেষ ক্ষেত্রে দেখা যায় নির্বাচন অ্যালগরিদম যে জানতে পারেন ম সঙ্গে একটি অ্যারের ক্ষুদ্রতম উপাদান অ্যারের আকার অর্ধেক। একটি বাস্তবায়ন রয়েছে যা সবচেয়ে খারাপ ক্ষেত্রে লিনিয়ার।কেkk

জেনেরিক নির্বাচন অ্যালগরিদম

প্রথমে আসুন একটি অ্যালগোরিদম দেখুন find-kthযা একটি অ্যারের তমতম উপাদান খুঁজে পায় :k

find-kth(A, k)
  pivot = random element of A
  (L, R) = split(A, pivot)
  if k = |L|+1, return pivot
  if k ≤ |L|  , return find-kth(L, k)
  if k > |L|+1, return find-kth(R, k-(|L|+1))

ফাংশন split(A, pivot)ফেরৎ L,Rযেমন যে সব উপাদান Rতার চেয়ে অনেক বেশী হয় pivotএবং Lঅন্যান্যদের (বিয়োগ এক সংঘটন pivot)। তারপরে সবগুলি পুনরাবৃত্তভাবে করা হয়।

এই গড় কিন্তু সবচেয়ে খারাপ ক্ষেত্রে।( এন 2 )O(n)O(n2)

লিনিয়ার সবচেয়ে খারাপ ক্ষেত্রে: মিডিয়ান অফ মিডিয়ানস অ্যালগোরিদম

Aএই মধ্যস্থদের অ্যারেতে প্রক্রিয়াটি কল করে 5 মাপের সাব অ্যারেগুলির সব মিডিয়ানের মধ্যস্থতাই হ'ল একটি ভাল পাইভট।

find-kth(A, k)
  B = [median(A[1], .., A[5]), median(A[6], .., A[10]), ..]
  pivot = find-kth(B, |B|/2)
  ...

এটি সমস্ত ক্ষেত্রে এর গ্যারান্টি দেয় । এটা যে সুস্পষ্ট নয়। এই পাওয়ারপয়েন্ট স্লাইডগুলি অ্যালগরিদম এবং জটিলতা উভয় ব্যাখ্যা করতে সহায়ক।O(n)

নোট করুন যে বেশিরভাগ সময় এলোমেলো পিভট ব্যবহার করা দ্রুত হয়।


এই আকার 5মান? A এর আকার 5 এর চেয়ে কম হলে কী হবে?
জয়েশ

যে কোনও স্থির n এর জন্য জটিলতা ধ্রুবক, যদি না তা অসীম হয়। সুতরাং, আপনি যেমন (ওএস (2 ^ n) হলেও সীমাবদ্ধ জটিলতার সাথে কোনও বৈধ অ্যালগরিদম ব্যবহার করতে পারেন। একটি নির্দিষ্ট n এর জন্য (অর্থাত্ সর্বাধিক ৪ জন বাইরে) জটিলতাটি সর্বাধিক ও (2 ^ 4) = ও (1)।
v6ak

3
প্রথম অ্যালগরিদমে: return A[k]ভুল (যদি না Aবাছাই না করা হয় যা অ্যালগোরিদমকে মোটা করে তোলে)। যদি splitএমনটি ভাগ হয়ে যায় Aযে k = |L| + 1আপনি এখনও জানেন না যে kথিম উপাদানটি কোথায়। আপনার বেস কেসটি যখন তখন |A| = 1অন্য দুটি পুনরাবৃত্ত কলগুলির মধ্যে একটি করার দরকার হয়।
wcochran

2
@ নিকক্যাপলিংগার ওয়েব.আর্টিভ.আর.জি.
জ্যামডের

1
জেনেরিক নির্বাচন অ্যালগরিদম হে (এনলগএন) এর জন্য সবচেয়ে খারাপ পরিস্থিতিটি কি নয়? এমনকি যদি পুনরাবৃত্তিযোগ্য কল প্রতিটি কলের পরে অ্যারে মাত্র 10% ছেড়ে যায়, তবে এটি এখনও 10 ভিত্তিতে
লোগারিদম হয়

6

n1/4O(n)

অ্যালগরিদমের মূল ধারণাটি স্যাম্পলিং ব্যবহার করা। আমাদের দুটি উপাদান খুঁজে পেতে হবে যা অ্যারের বাছাই করা ক্রমে একত্রে খুব কাছাকাছি রয়েছে এবং এর মধ্যে মধ্যবর্তী মিথ্যা রয়েছে। সম্পূর্ণ আলোচনার জন্য রেফারেন্স [MU2017] দেখুন।


[MU2017] মাইকেল মিটজেনমার এবং এলি উপফল f "সম্ভাব্যতা এবং কম্পিউটিং: অ্যালগরিদম এবং ডেটা অ্যানালাইসিসে র্যান্ডমাইজেশন এবং সম্ভাবনা কৌশল," অধ্যায় 3, পৃষ্ঠা 57-62। কেমব্রিজ বিশ্ববিদ্যালয় প্রেস, দ্বিতীয় সংস্করণ, 2017।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.