ছোট উইন্ডো আকারে, n log n
বাছাইয়ের কাজ হতে পারে। এটি অর্জনের জন্য আরও ভাল অ্যালগরিদম আছে কি?
ছোট উইন্ডো আকারে, n log n
বাছাইয়ের কাজ হতে পারে। এটি অর্জনের জন্য আরও ভাল অ্যালগরিদম আছে কি?
উত্তর:
কোনও মিডিয়ান গণনা করার জন্য অ্যারে বাছাই করা এটি খারাপ ফর্ম। মেডিয়ান (এবং অন্যান্য কোয়ান্টাইলস) সাধারণত ও ( এন ) জটিলতার সাথে কুইক সিলেক্ট অ্যালগরিদম ব্যবহার করে গণনা করা হয় ।
আপনি এখানে সাম্প্রতিক সম্পর্কিত প্রশ্নের আমার উত্তরটিও দেখতে চাইতে পারেন ।
এখানে একটি নিবন্ধটি একটি সম্ভাব্য অ্যালগরিদম বর্ণনা করে। উত্স কোড অন্তর্ভুক্ত এবং একটি বেশ গুরুতর অ্যাপ্লিকেশন (লেজার ইন্টারফেরোমেট্রির উপর ভিত্তি করে মহাকর্ষ তরঙ্গ সনাক্তকরণ), যাতে আপনি এটির ভাল পরীক্ষা করা আশা করতে পারেন।
আপনি যদি একটি আনুমানিক সহ্য করতে রাজি হন তবে অন্যান্য পদ্ধতিও রয়েছে। উদাহরণস্বরূপ, একটি আনুমানিক একটি মান যাঁর র্যাঙ্ক প্রকৃত মিডিয়ান থেকে কিছু (ব্যবহারকারী নির্দিষ্ট) দূরত্বে থাকে। উদাহরণস্বরূপ, মিডিয়ানটি (সাধারণীকরণের) র্যাঙ্কটি 0.5 রেখেছে এবং আপনি যদি 10% এর ত্রুটি শব্দটি নির্দিষ্ট করেন তবে আপনি একটি উত্তর চান যা 0.45 এবং 0.55 এর মধ্যে রয়েছে।
যদি এই জাতীয় উত্তর উপযুক্ত হয়, তবে এমন অনেকগুলি সমাধান রয়েছে যা ডেটা স্লাইডিং উইন্ডোতে কাজ করতে পারে। মূল ধারণাটি হ'ল একটি নির্দিষ্ট আকারের (প্রায় 1 / ত্রুটির শব্দ) ডেটার একটি নমুনা বজায় রাখা এবং এই নমুনায় মধ্যকটি গণনা করা। এটি দেখানো যেতে পারে যে উচ্চ সম্ভাবনার সাথে ইনপুটের প্রকৃতি নির্বিশেষে, ফলস্বরূপ মধ্যমাটি উপরে বর্ণিত বৈশিষ্ট্যগুলিকে সন্তুষ্ট করে।
সুতরাং, মূল প্রশ্নটি কীভাবে কোনও নির্দিষ্ট আকারের ডেটার চলমান নমুনা বজায় রাখতে হয় এবং জলাশয়ের নমুনা হিসাবে পরিচিত প্রযুক্তি সহ এর জন্য অনেকগুলি পন্থা রয়েছে। উদাহরণস্বরূপ, এই কাগজ: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.7136
যদি আপনি বাছাই করা দ্বিগুণ সংযুক্ত তালিকার হিসাবে তথ্যের দৈর্ঘ্য-কে উইন্ডোটি বাইনারি অনুসন্ধানের মাধ্যমে (উইন্ডোতে স্থানান্তরিত হওয়ার সাথে সাথে প্রতিটি নতুন উপাদান সন্নিবেশ করানো) এবং পয়েন্টারগুলির একটি বৃত্তাকার অ্যারে (অবিলম্বে উপাদানগুলি সনাক্ত করার জন্য) রাখেন মুছে ফেলা দরকার), উইন্ডোটির প্রতিটি শিফটে একটি উপাদান সন্নিবেশ করানোর জন্য ও (লগ (কে)) প্রচেষ্টা প্রয়োজন, উইন্ডো থেকে সরানো উপাদান মুছতে কেবল ও (1) প্রচেষ্টা এবং সন্ধান করার জন্য কেবল ও (1) প্রচেষ্টা দরকার মিডিয়ান (কারণ প্রতিটি সময় তালিকার মধ্যে একটি উপাদান সন্নিবেশ করা বা মুছলে আপনি ও (1) সময়ে মধ্যমকে একটি পয়েন্টার আপডেট করতে পারেন। দৈর্ঘ্যের অ্যারের প্রসেসের জন্য মোট প্রচেষ্টা হ'ল ও ((এনকে) লগ (কে)) <= ও (এন লগ (কে))। এটি এখন পর্যন্ত প্রস্তাবিত অন্য যে কোনও পদ্ধতির চেয়ে ভাল এবং এটি কোনও অনুমান নয়, এটি সঠিক।
যেমন আপনি উল্লেখ করেছেন বাছাই করা হবে O(n·log n)
দৈর্ঘ্যের একটি উইন্ডো জন্যn
। এই চলনটি করা l=vectorlength
মোট ব্যয়কে আরও একটি যোগ করে O(l·n·log n)
।
এটিকে ধাক্কা দেওয়ার সহজতম উপায় হ'ল এক উইন্ডো থেকে পরের উইন্ডোতে যাওয়ার সময় মেমোরিতে সর্বশেষ n উপাদানগুলির একটি অর্ডার করা তালিকা রাখা। অর্ডার তালিকায় / থেকে একটি উপাদান সরিয়ে / সন্নিবেশ করানো উভয়ই O(n)
এর ব্যয় হতে পারে O(l·n)
।
সুডোকোড:
l = length(input)
aidvector = sort(input(1:n))
output(i) = aid(n/2)
for i = n+1:l
remove input(i-n) from aidvector
sort aid(n) into aidvector
output(i) = aid(n/2)
এখানে বর্তমান মিডিয়ান সন্ধানের জন্য একটি সমাধান ও (1), এবং একটি নতুন সংখ্যা যুক্ত করার জন্য ও (লগ এন) http://www.dsalgo.com/RunningMedian.php
আপনি যদি সত্যিকারের মাধ্যমের পরিবর্তে কোনও অনুমানের সাথে বেঁচে থাকতে পারেন তবে রেমেডিয়ান অ্যালগরিদম (পিডিএফ) হ'ল স্বল্প সঞ্চয়ের প্রয়োজনীয়তা এবং সঠিকভাবে সংজ্ঞায়িত নির্ভুলতার সাথে এক পাস।
বেস বি দিয়ে প্রতিকারকারী বি পর্যবেক্ষণের গ্রুপগুলির মিডিয়ানগুলির গণনা করে এবং তারপরে এই মিডিয়ানদের মধ্যকগণের দ্বারা এগিয়ে যায়, যতক্ষণ না কেবল একটি একক অনুমান থাকে। এই পদ্ধতিতে কেবল খ আকারের k অ্যারে প্রয়োজন (যেখানে এন = বি ^ কে) ...
আমি এই রানিংস্ট্যাটস সি ++ লাইব্রেরি ব্যবহার করেছি একটি এম্বেড অ্যাপ্লিকেশনটিতে ব্যবহার করেছি। এটি আমি খুঁজে পাওয়া সবচেয়ে সহজ চলমান পরিসংখ্যান লাইব্রেরি।
লিঙ্ক থেকে:
কোডটি ডেটা দিয়ে একটি পাসে স্ট্যান্ডার্ড বিচ্যুতি গণনা করার জন্য নুথ এবং ভেলফোর্ডের পদ্ধতির একটি এক্সটেনশন। এটি স্কিউনেস এবং কুর্তোসিসের পাশাপাশি একই ইন্টারফেসের সাথে গণনা করে। কেবলমাত্র ডেটা দিয়ে একটি পাসের প্রয়োজন ছাড়াও, অ্যালগরিদম সংখ্যাগতভাবে স্থিতিশীল এবং নির্ভুল।