টাস্কটি স্পষ্টভাবে একটি সংখ্যার প্রয়োজনীয় সংখ্যার দৈর্ঘ্যের N এর দৈর্ঘ্যে N (1) অ্যালগরিদম সন্ধান করা। সুতরাং আপনার শীর্ষ 100 নম্বর বা 10000 নম্বর প্রয়োজন কিনা তাতে কিছু যায় আসে না, সন্নিবেশের সময়টি ও (1) হওয়া উচিত।
এখানে কৌশলটি হ'ল যদিও তালিকাটি সন্নিবেশ করানোর জন্য ও (1) প্রয়োজনীয়তার কথা বলা হয়েছে, পুরো সংখ্যাটিতে অনুসন্ধানের সময়ের ক্রম সম্পর্কে প্রশ্নটি কিছু বলেনি, তবে এটি O (1) করা যেতে পারে যেমন. এরপরে সমাধানটি নিম্নরূপ:
মানগুলির জন্য কী এবং যুক্ত লিঙ্ক তালিকার পয়েন্টারগুলির সংখ্যার সাথে একটি হ্যাশটেবলের ব্যবস্থা করুন। পয়েন্টারগুলির প্রতিটি জুটি লিঙ্কযুক্ত তালিকার ক্রমের শুরু এবং শেষ। এটি সাধারণত একটি উপাদান হবে তার পরের অংশে। লিঙ্কযুক্ত তালিকার প্রতিটি উপাদান পরবর্তী সর্বোচ্চ সংখ্যার সাথে উপাদানের পাশে যায়। লিঙ্কযুক্ত তালিকায় প্রয়োজনীয় সংখ্যার সাজানো ক্রম থাকে contains সর্বনিম্ন সংখ্যার একটি রেকর্ড রাখুন।
এলোমেলো স্ট্রিম থেকে একটি নতুন সংখ্যা এক্স নিন।
এটি কি সর্বশেষ রেকর্ড সর্বনিম্ন সংখ্যার চেয়ে বেশি? হ্যাঁ => পদক্ষেপ 4, ন => পদক্ষেপ 2
সবে নেওয়া নম্বরটি দিয়ে হ্যাশ টেবিলটি হিট করুন। এন্ট্রি আছে কি? হ্যাঁ => পদক্ষেপ No নং => একটি নতুন নম্বর নিন x-1 এবং এই পদক্ষেপটি পুনরাবৃত্তি করুন (এটি একটি সরল নিম্নগামী রৈখিক অনুসন্ধান, কেবল এখানে আমার সহ্য করুন, এটি উন্নত করা যেতে পারে এবং আমি কীভাবে ব্যাখ্যা করব)
হ্যাশ টেবিল থেকে সন্ধান প্রাপ্ত তালিকার সাথে, সংযুক্ত তালিকার উপাদানটির ঠিক পরে নতুন সংখ্যাটি সন্নিবেশ করুন (এবং হ্যাশ আপডেট করুন)
রেকর্ড করা সর্বনিম্ন সংখ্যাটি নিন (এবং এটি হ্যাশ / তালিকা থেকে সরিয়ে দিন)।
সবে নেওয়া নম্বরটি দিয়ে হ্যাশ টেবিলটি হিট করুন। এন্ট্রি আছে কি? হ্যাঁ => পদক্ষেপ 8. না => একটি নতুন নম্বর নিন l + 1 এবং এই পদক্ষেপটি পুনরাবৃত্তি করুন (এটি একটি সরল upর্ধ্বমুখী রৈখিক অনুসন্ধান)
ধনাত্মক আঘাতের সাথে সংখ্যাটি নতুন সর্বনিম্ন সংখ্যাতে পরিণত হয়। পদক্ষেপ 2 এ যান
সদৃশ মানগুলির জন্য অনুমতি দেওয়ার জন্য হ্যাশকে আসলে নকলযুক্ত উপাদানের লিঙ্কযুক্ত তালিকার ক্রমের শুরু এবং শেষ বজায় রাখতে হবে। প্রদত্ত কীতে কোনও উপাদান যুক্ত করা বা অপসারণ এইভাবে নির্দেশিত সীমাটি বাড়ায় বা হ্রাস করে।
এখানে সন্নিবেশ O (1)। উল্লিখিত অনুসন্ধানগুলি হ'ল, আমি ও (সংখ্যার মধ্যে গড় পার্থক্য) এর মতো কিছু অনুমান করি। গড় পার্থক্য সংখ্যা জায়গার আকারের সাথে বৃদ্ধি পায়, তবে সংখ্যার তালিকার প্রয়োজনীয় দৈর্ঘ্যের সাথে হ্রাস পায়।
সুতরাং লিনিয়ার অনুসন্ধান কৌশলটি বেশ দুর্বল, যদি সংখ্যার স্থানটি বড় হয় (যেমন একটি 4 বাইট ইনট টাইপের জন্য, 0 থেকে 2 ^ 32-1) এবং এন = 100। এই পারফরম্যান্স ইস্যুটি ঘুরে দেখার জন্য আপনি হ্যাশ টেবিলের সমান্তরাল সেট রাখতে পারেন, যেখানে উপযুক্ত কীগুলি তৈরি করতে সংখ্যাগুলি উচ্চতর প্রশস্ততা (যেমন 1s, 10s, 100s, বাক্য) এর সাথে গোল হয়। এইভাবে আপনি প্রয়োজনীয় অনুসন্ধানগুলি আরও দ্রুত সম্পাদন করতে গিয়ারগুলি ধাপে উপরে উঠতে পারেন। পারফরম্যান্সটি তখন ও (লগ নম্বররেঞ্জ) হয়ে যায়, আমি মনে করি, যা ধ্রুবক, অর্থাৎ ও (1)।
এই পরিষ্কার করার জন্য, কল্পনা করুন যে আপনার হাতে আছে 197 নম্বর। আপনি '১৯০' দিয়ে 10 হ্যাশ টেবিলটি আঘাত করেছেন, এটি প্রায় নিকটে দশটি গোল হয়েছে। কিছু? না। সুতরাং আপনি 120 বলার আগ পর্যন্ত 10 এর নিচে চলে যান Then তারপরে আপনি 1 হ্যাশটেবলে 129 থেকে শুরু করতে পারেন, তারপরে আপনি কিছু আঘাত না করা পর্যন্ত 128, 127 দিয়ে চেষ্টা করতে পারেন। সংযুক্ত তালিকার মধ্যে যেখানে 197 নম্বরটি সন্নিবেশ করানোর জন্য আপনি খুঁজে পেয়েছেন it এটিকে প্রবেশ করানোর সময়, আপনাকে অবশ্যই 197 টি প্রবেশের সাথে 1s হ্যাশটেবল আপডেট করতে হবে, ১৯০ নম্বর সহ ১০ টি হ্যাশটেবল, ১০০ এর সাথে ১০০ ইত্যাদি, সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপগুলি আপনি এখানে করতে হবে সংখ্যা পরিসীমা লগ 10 বার।
আমি বিশদগুলির কিছু ভুল পেয়েছি, তবে যেহেতু এটি প্রোগ্রামার এক্সচেঞ্জ, এবং প্রসঙ্গটি ছিল সাক্ষাত্কার I আমি আশা করব উপরের পরিস্থিতিটির জন্য দৃ .় প্রত্যয়যুক্ত উত্তর।
সম্পাদনা করুন আমি সমান্তরাল হ্যাশটেবল স্কিমটি ব্যাখ্যা করতে এখানে কিছু অতিরিক্ত বিশদ যুক্ত করেছি এবং এর অর্থ কীভাবে আমি বর্ণিত দরিদ্র রৈখিক অনুসন্ধানগুলি ও (1) অনুসন্ধানের সাথে প্রতিস্থাপন করা যেতে পারে। আমি আরও বুঝতে পেরেছি যে পরবর্তী সর্বনিম্ন সংখ্যাটি অনুসন্ধান করার দরকার নেই, কারণ আপনি হ্যাশটেবলটি সর্বনিম্ন সংখ্যার সাথে সন্ধান করে এবং পরবর্তী উপাদানটিতে অগ্রগতি করে সরাসরি এটিতে যেতে পারেন।