আমার চলমান মিডিয়ান গণনা করা দরকার:
ইনপুট: , , ভেক্টর ।
আউটপুট: ভেক্টর , যেখানে হ'ল ।
(আনুমানিক সাথে কোনও প্রতারণা নয়; আমি সঠিক সমাধান পেতে চাই উপাদানসমূহ বৃহত্তর পূর্ণসংখ্যা))
একটি তুচ্ছ অ্যালগরিদম আছে যা সাইজের এর অনুসন্ধান গাছ বজায় রাখে ; মোট চলমান সময় হ'ল । (এখানে একটি "অনুসন্ধান ট্রি" কিছু কার্যকর ডেটা স্ট্রাকচারকে বোঝায় যা লগারিদমিক সময়ে সন্নিবেশ, মুছে ফেলা এবং মিডিয়ান কোয়েরিকে সমর্থন করে))ও ( এন লগ কে )
তবে এটি আমার কাছে কিছুটা বোকা মনে হচ্ছে। আমরা কার্যকরভাবে শিখতে হবে সব আকারের সকল উইন্ডো মধ্যে অর্ডার পরিসংখ্যান , শুধু মধ্যমা। তদুপরি, এটি অনুশীলনে খুব আকর্ষণীয় নয়, বিশেষত কে বড় হলে (বড় সন্ধানের গাছগুলি ধীরে ধীরে থাকে, মেমরির ব্যবহারে ওভারহেড অপ্রয়োজনীয় হয়, ক্যাশে-দক্ষতা প্রায়শই দুর্বল থাকে ইত্যাদি)।
আমরা কি যথেষ্ট পরিমাণে আরও ভাল করতে পারি?
কোন নিম্ন সীমানা আছে (উদাহরণস্বরূপ, তুলনা মডেল জন্য তুচ্ছ আলগোরিদম asympototically অনুকূল)?
সম্পাদনা করুন: তুলনা মডেলটির জন্য দাউদ এপস্টিন একটি দুর্দান্ত নীচে দিয়েছিলেন! আমি ভাবছি তবুও তুচ্ছ অ্যালগরিদমের চেয়ে কিছুটা চালাক কিছু করা সম্ভব কিনা?
উদাহরণস্বরূপ, আমরা এই লাইনগুলি বরাবর কিছু করতে পারি: ইনপুট ভেক্টর আকারের কিছু অংশে ভাগ করুন ; প্রতিটি অংশকে বাছাই করুন (প্রতিটি উপাদানগুলির মূল অবস্থানগুলি লক্ষ্য রাখছেন); এবং তারপরে কোনও সহায়ক ডেটা স্ট্রাকচার ছাড়াই চলমান মিডিয়েনসকে দক্ষতার সাথে খুঁজে পেতে টুকরোড়া সাজানো ভেক্টর ব্যবহার করবেন? অবশ্যই এটি এখনও , তবে অনুশীলন অনুসারে অ্যারে বাছাই করা অনুসন্ধানের গাছগুলি রক্ষণাবেক্ষণের চেয়ে অনেক দ্রুত হতে পারে।
সম্পাদনা 2: সা Saeedদ অনুসন্ধানের ক্রিয়াকলাপগুলির চেয়ে বাছাই করা কেন দ্রুত বলে মনে করি তার কয়েকটি কারণ দেখতে চেয়েছিলেন। , জন্য এখানে খুব দ্রুত মানদণ্ড রয়েছে :
- S 8s: প্রতিটি উপাদানগুলির সাথে ভেক্টর বাছাই করা
- ≈ 10s: উপাদানগুলির সাথে একটি ভেক্টর বাছাই করা
- ≈ 80s: সন্নিবেশ & আকারের একটি হ্যাশ টেবিল মুছে
- ≈ 390s: সন্নিবেশ & আকারের একটি সুষম অনুসন্ধান গাছে মুছে
হ্যাশ টেবিলটি কেবল তুলনার জন্য রয়েছে; এটি এই অ্যাপ্লিকেশনটিতে সরাসরি ব্যবহারের নয়।
সংক্ষেপে, ভারসাম্যপূর্ণ অনুসন্ধান ট্রি ক্রিয়াকলাপগুলি বাছাইয়ের পারফরম্যান্সে আমাদের প্রায় 50 টি পার্থক্য রয়েছে। এবং আমরা বাড়িয়ে দিলে জিনিসগুলি আরও খারাপ হয়ে যায় ।
(প্রযুক্তিগত বিবরণ: ডেটা = এলোমেলো 32-বিট পূর্ণসংখ্যা। কম্পিউটার = একটি আদর্শ আধুনিক ল্যাপটপ। স্ট্যান্ডার্ড লাইব্রেরি রুটিনগুলি (স্ট্যান্ড :: সাজান) এবং ডেটা স্ট্রাকচার (স্টাড :: মাল্টিসেট, স্টেড ::) ব্যবহার করে পরীক্ষার কোডটি সি ++ তে লেখা হয়েছিল was আনসোর্টড_মলিটসেট) আমি দুটি পৃথক সি ++ কম্পাইলার (জিসিসি এবং ক্ল্যাং) এবং স্ট্যান্ডার্ড লাইব্রেরির দুটি পৃথক বাস্তবায়ন (libstdc ++ এবং libc ++) ব্যবহার করেছি ditionতিহ্যগতভাবে, std :: মাল্টিসেটটি একটি অত্যন্ত অনুকূলিত লাল-কালো গাছ হিসাবে প্রয়োগ করা হয়েছে))