বাছাই করা অ্যারেতে উপাদান যুক্ত করা হচ্ছে


31

এটি করার দ্রুততম উপায় কী হবে (একটি অ্যালগোরিদমিক দৃষ্টিকোণ, পাশাপাশি একটি ব্যবহারিক বিষয় থেকে)?

আমি নিম্নলিখিত লাইন বরাবর কিছু ভাবছিলাম।

আমি একটি অ্যারের প্রান্তে যুক্ত করতে পারতাম এবং তারপরে বুদবুদর্টটি ব্যবহার করতে পারি কারণ এটির সবচেয়ে কাছাকাছি একটি সেরা কেস (সম্পূর্ণভাবে সাজানো অ্যারে) রয়েছে এবং লিনিয়ার চলমান সময় রয়েছে (সেরা ক্ষেত্রে)।

অন্যদিকে, যদি আমি জানি যে আমি সাজানো অ্যারে দিয়ে শুরু করছি, তবে একটি নির্দিষ্ট উপাদানটির জন্য সন্নিবেশ বিন্দুটি সন্ধান করতে আমি বাইনারি অনুসন্ধান ব্যবহার করতে পারি।

আমার কুণ্ডলীটি হ'ল দ্বিতীয় উপায়টি প্রায় অনুকূল, তবে কী আছে তা দেখার জন্য আগ্রহী।

এটি কীভাবে সেরা করা যায়?


1
দ্রুততম উপায়, যদি আপনাকে প্রায়শই এটি করতে হয় তবে প্রথমে কোনও অ্যারে ব্যবহার করা নয়।
রিনিয়ারপোস্ট

বাইনারি গাছে নিজেকে ভারসাম্যহীন বলতে চাইছেন?
soandos

হ্যাঁ, সম্ভবত; উত্তরগুলি দেখুন ...
পুনরায় পোস্টার

উত্তর:


25

আমরা অ্যারে উপাদান পঠন এবং লেখার সংখ্যা গণনা করি। বুদ্বুদ সাজানোর জন্য আপনার অ্যাক্সেসের প্রয়োজন (প্রাথমিক লেখার শেষে লেখা, তারপরে, সবচেয়ে খারাপ ক্ষেত্রে, দুটি রি এবং দুটি এন এন অদলবদল করতে লিখুন)। বাইনারি অনুসন্ধান করতে, আমাদের বাইনারি অনুসন্ধানের জন্য 2 লগ এন + 2 এন + 1 ( 2 লগ এন) প্রয়োজন , তারপরে, সবচেয়ে খারাপ ক্ষেত্রে অ্যারের উপাদানগুলি ডানে সরিয়ে নিতে 2 এন , তারপরে অ্যারে উপাদানটি লিখতে 1 এটির যথাযথ অবস্থান)।1+4nn2logn+2n+12logn2n

সুতরাং উভয় পদ্ধতির অ্যারে বাস্তবায়নের জন্য একই জটিলতা রয়েছে, তবে বাইনারি অনুসন্ধান পদ্ধতিতে দীর্ঘমেয়াদে কম অ্যারে অ্যাক্সেসের প্রয়োজন হয় ... অ্যাসেম্পোটোটিক্যালি অর্ধেক হিসাবে। স্বাভাবিকভাবে খেলতে খেলতে অন্যান্য কারণও রয়েছে।

2n+1logn+2n+1

আরও ভাল সমাধানে কোনও আলাদা ডেটা কাঠামো ব্যবহার করা জড়িত। অ্যারে আপনাকে ও (1) অ্যাক্সেস দেয় (এলোমেলো অ্যাক্সেস) দেয় তবে সন্নিবেশ এবং মুছতে ব্যয় হতে পারে। একটি হ্যাশ টেবিলটিতে ও (1) সন্নিবেশ এবং মুছে ফেলা হতে পারে, অ্যাক্সেসগুলি ব্যয় করতে পারে। অন্যান্য বিকল্পের মধ্যে বিএসটি এবং হিপস অন্তর্ভুক্ত রয়েছে ইত্যাদি সন্নিবেশ, মুছা এবং অ্যাক্সেসের জন্য আপনার অ্যাপ্লিকেশনটির ব্যবহারের প্রয়োজনগুলি বিবেচনা করা এবং আরও বিশেষ কাঠামোগত কাঠামো চয়ন করা উপযুক্ত।

mnm


1
"একটি হ্যাশ টেবিলের ও (1) সন্নিবেশ এবং মুছে ফেলা হতে পারে" - সাধারণভাবে সাধারণভাবে তৈরি or
রাফায়েল

8
Amortized প্রত্যাশিত
জেফ

O(log n)O(2 log n)

8

যদি গাদা ব্যবহার না করার কোনও কারণ থাকে তবে বুদ্বুদ বাছাইয়ের পরিবর্তে সন্নিবেশ বাছাই করার বিষয়টি বিবেচনা করুন । আপনার কয়েকটি অরসোর্টড উপাদান থাকলে এটি আরও ভাল।


8

O(n)

O(lgn)O(n+lgn)O(n)

O(1)

যাইহোক, বুবলি বাছাইয়ের কোনও কারণ আমি এই সমস্যার জন্য দেখতে পাচ্ছি না।


2
O

ছদ্মবেশী হওয়ার জন্য +1 .. :-)
কাশ্যপ

4

প্যাট্রিক ৮87 এগুলি খুব ভালভাবে ব্যাখ্যা করেছে। তবে একটি অতিরিক্ত অপ্টিমাইজেশন আপনি করতে পারেন বৃত্তাকার বাফারের মতো কিছু ব্যবহার করা: আপনি itemsোকানো উপাদানটির অবস্থানের ডানদিকে আইটেমগুলি যথারীতি ডানদিকে নিয়ে যেতে পারেন। তবে আপনি আইটেমগুলিও সঠিক অবস্থানের বাম দিকে বাম দিকে সরিয়ে নিতে পারেন। এটি করার জন্য, আপনাকে অ্যারেরটিকে বিজ্ঞপ্তি হিসাবে বিবেচনা করতে হবে, অর্থাৎ শেষ আইটেমটি প্রথমটির ঠিক আগে হওয়া উচিত এবং আইটেমগুলি বর্তমানে শুরু হয় এমন সূচিটিও আপনার রাখা দরকার।

আপনি যদি এটি করেন, এর অর্থ আপনি প্রায় অর্ধেক অ্যাক্সেস তৈরি করতে পারেন (সূচিগুলির যে একত্রে বিতরণ আপনি সন্নিবেশ করেছেন তা অনুমান করে)। অবস্থানটি সন্ধানের জন্য বাইনারি অনুসন্ধান করার ক্ষেত্রে, বামে বা ডানে সরে যাবেন কিনা তা বেছে নেওয়া তুচ্ছ। বুদ্বুদ সাজানোর ক্ষেত্রে, শুরু করার আগে আপনার সঠিকভাবে "অনুমান" করতে হবে। তবে এটি করা সহজ: কেবল সন্নিবেশ করা আইটেমিকে অ্যারের মধ্যকের সাথে তুলনা করুন, যা একক অ্যারে অ্যাক্সেসে করা যেতে পারে।


4

আমি এই সমস্যার জন্য কার্যকরভাবে সন্নিবেশ সাজানোর অ্যালগরিদম ব্যবহার করেছি । একসময় আমাদের একটি হ্যাশ টেবিল অবজেক্টের সাথে পারফরম্যান্সের সমস্যা ছিল, আমি একটি নতুন অবজেক্ট লিখেছিলাম যা বাইনারি অনুসন্ধান ব্যবহার করেছিল পরিবর্তে কর্মক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছিল। তালিকাটি সাজানো রাখার জন্য এটি সর্বশেষ সাজানোর পরে যোগ হওয়া আইটেমের সংখ্যা (যেমন আনসোর্টার্ড না হওয়া আইটেমের সংখ্যা) রাখে, যখন অনুসন্ধানের অনুরোধের কারণে তালিকাটি সাজানোর প্রয়োজন হয়, এটি একটি সন্নিবেশ বাছাই করে বা দ্রুত সাজানোর উপর নির্ভর করে অরসোর্টড আইটেমগুলির শতাংশের উপরে। কার্যকারিতা উন্নত করার জন্য সন্নিবেশ সাজানোর ব্যবহার কী ছিল।


মোড়ক চালানো অপারেশন ব্যয়ের বিষয়ে আপনার কি কোনও আনুষ্ঠানিক ফলাফল আছে? এবং: স্বাগতম!
রাফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.