আমি খুব কৌতূহলী, কেন অ্যালগরিদম বাছাইয়ে স্থিতিশীলতা বা গুরুত্বপূর্ণ নয়?
IBM (Insertion, Bubble, Merge)
আমি খুব কৌতূহলী, কেন অ্যালগরিদম বাছাইয়ে স্থিতিশীলতা বা গুরুত্বপূর্ণ নয়?
IBM (Insertion, Bubble, Merge)
উত্তর:
বাছাই করা অ্যালগরিদমকে স্থিতিশীল বলা হয় যদি সমান কীগুলির সাথে দুটি বস্তু বাছাইয়ের জন্য ইনপুট অ্যারেতে প্রদর্শিত হয় তবে তারা সাজানো আউটপুটে একই ক্রমে উপস্থিত হয়। কিছু বাছাই করা অ্যালগরিদম প্রকৃতি দ্বারা সন্নিবেশ সাজান, মার্জ বাছাই করা, বুদ্বুদ বাছাই ইত্যাদির দ্বারা স্থিতিশীল এবং কিছু বাছাই করা অ্যালগরিদমগুলি হিপ বাছাই করা, দ্রুত বাছাই করা ইত্যাদির মতো হয় না etc.
পটভূমি : একটি "স্থিতিশীল" বাছাই করা অ্যালগরিদম আইটেমগুলিকে একই বাছাইয়ের কী দিয়ে সাজিয়ে রাখে। ধরুন আমাদের কাছে 5-অক্ষরের শব্দের একটি তালিকা রয়েছে:
peach
straw
apple
spork
যদি আমরা প্রতিটি শব্দের প্রথম অক্ষর দ্বারা তালিকাটি সাজান তবে একটি স্থিতিশীল-সাজানোর উত্পন্ন হবে:
apple
peach
straw
spork
একটি অস্থির সাজানোর অ্যালগরিদমে straw
বা spork
বিনিময় হতে পারে তবে স্থিতিশীল অবস্থায় তারা একই আপেক্ষিক অবস্থানে থাকে (যেহেতু straw
ইনপুটটিতে আগে উপস্থিত হয় spork
, এটি spork
আউটপুটে আগে উপস্থিত হয় )।
আমরা এই অ্যালগরিদমটি ব্যবহার করে শব্দের তালিকাটিকে বাছাই করতে পারি: কলাম 5, তারপরে 4, তারপরে 3, তারপরে 2, তারপরে 1 দ্বারা স্থিতিশীল বাছাই করা 1 শেষে, এটি সঠিকভাবে বাছাই করা হবে। নিজেকে বিশ্বাস করুন। (যাইহোক, সেই অ্যালগরিদমকে রেডিক্স সাজ্ট বলা হয়)
এখন আপনার প্রশ্নের উত্তর দেওয়ার জন্য, ধরুন আমাদের কাছে প্রথম এবং শেষ নামগুলির একটি তালিকা রয়েছে। আমাদের "শেষ নাম অনুসারে, তারপরে প্রথমে" বাছাই করতে বলা হয়। আমরা প্রথম নাম অনুসারে প্রথমে বাছাই করতে পারি (স্থিতিশীল বা অস্থির), তারপরে শেষ নাম দ্বারা স্থিতিশীল সাজান। এই ধরণের পরে, তালিকাটি প্রাথমিকভাবে বাছাই করা হয় শেষ নাম দ্বারা। তবে, যেখানে শেষ নামগুলি একই, প্রথম নামগুলি বাছাই করা হয়।
আপনি একই ফ্যাশনে অস্থির প্রকারের স্ট্যাক করতে পারবেন না।
straw
এবং spork
সমান তুলনা করুন। স্থিতিশীল বাছাই ইনপুট ক্রম সংরক্ষণ করবে, অন্যদিকে অস্থির সাজান যে গ্যারান্টি তোলে না। "সঠিক" অ্যাপ্লিকেশন উপর নির্ভর করে। বেশিরভাগ প্রোগ্রামিং ভাষাগুলিতে বাছাই ফাংশন ব্যবহারকারীকে একটি কাস্টম অর্ডারিং ফাংশন সরবরাহ করতে দেয়। যদি ব্যবহারকারীর ফাংশনটি বিভিন্ন আইটেমকে সমান হিসাবে বিবেচনা করে (যেমন একই নাম, আলাদা আলাদা পদবি), এটি জানতে সহায়তা করে যে মূল ক্রমটি সংরক্ষণ করা হবে কিনা। রিয়েল-ওয়ার্ল্ড উদাহরণের জন্য ওক্যামেলের অ্যারে বাছাই করার ক্রিয়াগুলি দেখুন ।
একটি স্থিতিশীল বাছাই আলগোরিদিম এক যে তাদের একই আদেশ অভিন্ন উপাদানের বাছাই করে তারা ইনপুট প্রদর্শিত হয়, যখন অস্থির শ্রেণীবিভাজন হয় না হতে পারে যদি সন্তুষ্ট। - আমি আমার অ্যালগরিদম প্রভাষক দিদেম গজুপেককে ধন্যবাদ জানাই যে তারা অ্যালগোরিদম সম্পর্কে অন্তর্দৃষ্টি দিয়েছিল ।
স্থিতিশীল বাছাই অ্যালগরিদম:
অস্থির বাছাই অ্যালগরিদম:
স্থায়িত্ব বাছাই মানে একই কী দিয়ে রেকর্ডগুলি সাজানোর আগে এবং পরে তাদের আপেক্ষিক ক্রম ধরে রাখে।
সুতরাং স্থিতিশীলতা গুরুত্বপূর্ণ যদি এবং কেবল যদি আপনি সমস্যার সমাধান করছেন তবে সেই আপেক্ষিক আদেশটি ধরে রাখা দরকার।
যদি আপনার স্থায়িত্বের প্রয়োজন না হয় তবে আপনি লাইব্রেরি থেকে হিপসোর্ট বা কুইকোর্টের মতো একটি দ্রুত, মেমরি-সিপিং অ্যালগরিদম ব্যবহার করতে পারেন এবং এটিকে ভুলে যেতে পারেন।
আপনার যদি স্থিতিশীলতার প্রয়োজন হয় তবে এটি আরও জটিল। স্থিতিশীল অ্যালগরিদমের অস্থির অ্যালগরিদমের চেয়ে বেশি বিগ-ও সিপিইউ এবং / অথবা মেমরির ব্যবহার রয়েছে। সুতরাং আপনার যখন একটি বড় ডেটা সেট থাকে, তখন আপনাকে সিপিইউ বা স্মৃতিটিকে মারধর করতে হবে। আপনি যদি উভয় সিপিইউ এবং মেমরির প্রতিবন্ধক হন তবে আপনার একটি সমস্যা আছে। একটি ভাল আপস স্থিতিশীল অ্যালগরিদম হ'ল বাইনারি ট্রি সাজান; Wikipedia নিবন্ধটি একটি করুণ সহজ সি ++ STL উপর ভিত্তি করে প্রয়োগ করা হয়েছে।
প্রতিটি রেকর্ডের জন্য সর্বশেষ স্থান কী হিসাবে মূল রেকর্ড নম্বর যুক্ত করে আপনি একটি অস্থির অ্যালগরিদমকে একটি স্থিতিশীল হিসাবে তৈরি করতে পারেন।
এটি আপনি যা করেন তার উপর নির্ভর করে।
কল্পনা করুন যে আপনি প্রথম এবং শেষ নামের ক্ষেত্রের সাথে কিছু লোকের রেকর্ড পেয়েছেন। প্রথমে আপনি তালিকাটি প্রথম নাম অনুসারে বাছাই করুন। তারপরে যদি আপনি স্থিত অ্যালগরিদম দিয়ে তালিকার নাম রেখেছেন তবে আপনার প্রথম নাম এবং পদবি অনুসারে বাছাই করা একটি তালিকা থাকবে।
স্থায়িত্ব গুরুত্বপূর্ণ হওয়ার কয়েকটি কারণ রয়েছে। একটি হ'ল, যদি দুটি রেকর্ডগুলি অদলবদল করে অদলবদলের প্রয়োজন না হয় আপনি একটি স্মৃতি আপডেট করতে পারেন, একটি পৃষ্ঠা নোংরা চিহ্নিত করা হয়েছে, এবং ডিস্কে (বা অন্য ধীর মিডিয়াম) পুনরায় লিখিত হওয়া দরকার।
বাছাই করা অ্যালগরিদমকে স্থিতিশীল বলা হয় যদি সমান চাবিযুক্ত দুটি বস্তু যদি সাজানো আউটপুটে একই ক্রমে উপস্থিত হয় তবে তারা ইনপুট অরসোর্টড অ্যারেতে উপস্থিত হয়। কিছু বাছাই করা অ্যালগরিদম প্রকৃতি দ্বারা সন্নিবেশ সাজানো, মার্জ বাছাই করা, বুদ্বুদ বাছাই ইত্যাদি ইত্যাদির দ্বারা স্থিতিশীল এবং কিছু বাছাই করা অ্যালগরিদমগুলি হিপ বাছাই, দ্রুত বাছাই করা ইত্যাদির মতো হয় না etc.
তবে স্থিতিশীল নয় এমন যে কোনও প্রদত্ত বাছাই অ্যালগো স্থিতিশীল হতে সংশোধন করা যেতে পারে। এটিকে স্থিতিশীল করার জন্য অ্যালগো নির্দিষ্ট পদ্ধতিতে বাছাই করা যেতে পারে তবে সাধারণভাবে যে কোনও তুলনা ভিত্তিক বাছাই অ্যালগরিদম যা প্রকৃতির দ্বারা স্থিতিশীল নয় তা কী তুলনা ক্রিয়াকলাপটি পরিবর্তন করে স্থিতিশীল হতে পারে যাতে দুটি চাবির তুলনা অবস্থানকে বিবেচনা করে সমান কী সহ বস্তুর জন্য ফ্যাক্টর।
তথ্যসূত্র: http://www.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf http://en.wikedia.org/wiki/Sorting_algorithm#Stability
আমি জানি এই জন্য অনেক উত্তর আছে, কিন্তু আমার কাছে এই উত্তর দ্বারা রবার্ট হার্ভে , এটা আরো অনেক কিছু পরিষ্কারভাবে সংক্ষিপ্ত:
একটি স্থিতিশীল বাছাই হ'ল যা ইনপুট সেটটির মূল ক্রম সংরক্ষণ করে, যেখানে [অস্থির] অ্যালগরিদম দুটি বা ততোধিক আইটেমের মধ্যে পার্থক্য করে না।
আপনি যদি ধরে নেন যে আপনি যা বাছাই করছেন তা কেবল সংখ্যা এবং কেবল তাদের মানগুলি তাদের সনাক্ত / আলাদা করতে পারে (উদাহরণস্বরূপ একই মানযুক্ত উপাদানগুলি অভিন্ন) তবে বাছাইয়ের স্থায়িত্ব-ইস্যু অর্থহীন।
তবে, বাছাইয়ের ক্ষেত্রে একই অগ্রাধিকারযুক্ত জিনিসগুলি পৃথক হতে পারে এবং কিছু সময় তাদের আপেক্ষিক ক্রম অর্থবহ তথ্য। এই ক্ষেত্রে, অস্থির বাছাই সমস্যা উত্পন্ন করে।
উদাহরণস্বরূপ, আপনার কাছে ডেটাগুলির একটি তালিকা রয়েছে যা একটি খেলায় স্তর [এল] দিয়ে একটি গোলকধাঁধা পরিষ্কার করতে সমস্ত খেলোয়াড়ের সময় ব্যয় [টি] ধারণ করে। ধরা যাক খেলোয়াড়রা কীভাবে দ্রুত ধাঁধাটি পরিষ্কার করে তার দ্বারা আমাদের র্যাঙ্ক করা উচিত। যাইহোক, একটি অতিরিক্ত নিয়ম প্রযোজ্য: খেলোয়াড় যারা উচ্চ-স্তরের সাথে ধাঁধাটি পরিষ্কার করে থাকে তাদের সর্বদা উচ্চতর পদ থাকে, সময় ব্যয়টি কত দীর্ঘ হোক না কেন।
অবশ্যই আপনি জোড় করা মান [টি, এল] কে কোনও অ্যালগোরিদম দিয়ে কোনও আসল সংখ্যায় [আর] ম্যাপ করার চেষ্টা করতে পারেন যা নিয়ম অনুসরণ করে এবং তারপরে [আর] মানযুক্ত সমস্ত খেলোয়াড়কে র্যাঙ্ক করে।
তবে, যদি স্থিতিশীল বাছাই করা সম্ভব হয় তবে আপনি পুরো তালিকাটিকে [টি] (প্রথমে আরও দ্রুত প্লেয়ার) এবং তারপরে [এল] দ্বারা সারণি করতে পারেন। এই ক্ষেত্রে, খেলোয়াড়দের আপেক্ষিক ক্রম (সময় সাপেক্ষে) পরিবর্তিত হবে না যখন আপনি তাদের ধুয়ে ফেলার ধরণের স্তরে গ্রুপবদ্ধ করার পরে।
পিএস: অবশ্যই দু'বার বাছাইয়ের পদ্ধতিটি নির্দিষ্ট সমস্যার সর্বোত্তম সমাধান নয় তবে পোস্টারের প্রশ্নটি ব্যাখ্যা করার জন্য এটি যথেষ্ট হওয়া উচিত।
স্থিতিশীল বাছাই সর্বদা একই ইনপুটটিতে একই দ্রবণ (ক্রমশক্তি) প্রদান করবে।
উদাহরণস্বরূপ [২,১,২] স্থির ক্রমানুসারে ক্রমানুসারে বাছাই করা হবে [2,1,3] (প্রথমে সূচক 2, তারপর সূচী 1 তারপর সারণি আউটপুট ইনডেক্স 3) এর অর্থ এই যে আউটপুট সর্বদা একইভাবে পরিবর্তিত হয়। অন্যান্য অ স্থিতিশীল, তবে এখনও সঠিক অনুক্রমটি [2,3,1]।
দ্রুত বাছাই স্থিতিশীল বাছাই নয় এবং একই উপাদানগুলির মধ্যে ক্রম পার্থক্য পিভট বাছাইয়ের জন্য অ্যালগরিদমের উপর নির্ভর করে on কিছু বাস্তবায়ন এলোমেলোভাবে গ্রহণ করে এবং তা একই ধরণের অ্যালগোরিদম ব্যবহার করে একই ইনপুটটিতে বিভিন্ন ক্রমান্বয়ে উত্পাদন করে দ্রুত সাজিয়ে তোলে।
স্থিতিশীল বাছাই অ্যালগরিদম প্রয়োজনীয় নির্মাতারা।
sort([(5,3),(1,5),(3,3),(1,3)], x) => [(1,5),(1,3),(3,3),(5,3)]
। আমি একটি নিয়ামবাদী বাছাই করতে পারি যা সর্বদা (নির্দ্বিধায়) ফলাফলগুলি হয়: [(1,3),(1,5),(3,3),(5,3)]
তবে এটি কোনও স্থিতিশীল সাজ নয়।
স্থিতিশীল প্রকারের জন্য চাওয়ার কারণের আরও কয়েকটি উদাহরণ। ডাটাবেসগুলি একটি সাধারণ উদাহরণ। শেষ | প্রথম নাম, তারিখ | ক্রয়ের সময়, আইটেম নম্বর, দামের চেয়ে লেনদেনের ডেটা বেসের ক্ষেত্রে নিন। বলুন ডেটা বেসটি সাধারণত তারিখ | সময় অনুসারে বাছাই করা হয়। তারপরে একটি জিজ্ঞাসা শেষ | প্রথম নাম দ্বারা ডেটা বেসের একটি সাজানো অনুলিপি তৈরি করা হয়, যেহেতু একটি স্থিতিশীল সাজান মূল অর্ডার সংরক্ষণ করে, তদন্তের তুলনায় কেবল সর্বশেষ | প্রথম নাম অন্তর্ভুক্ত থাকে, প্রতিটি শেষের জন্য প্রথম লেনদেন | প্রথম নাম হবে ডেটা হতে | সময় ক্রম।
অনুরূপ উদাহরণটি ক্লাসিক এক্সেল, যা একবারে 3 টি কলামের মধ্যে সীমাবদ্ধ করে। Col টি কলাম সাজানোর জন্য, সর্বাধিক তাত্পর্যপূর্ণ 3 টি কলামের সাথে একটি ক্রমানুসারে সর্বনিম্ন তাত্পর্যপূর্ণ 3 কলাম দিয়ে সম্পন্ন করা হয়।
স্থিতিশীল রেডিক্স সাজানোর একটি ক্লাসিক উদাহরণ হ'ল কার্ড সোর্টার, বেস 10 সংখ্যার কলামগুলির ক্ষেত্র দ্বারা সাজানোর জন্য ব্যবহৃত হয়। কার্ডগুলি কমপক্ষে উল্লেখযোগ্য অঙ্ক থেকে সর্বাধিক তাৎপর্যপূর্ণ অঙ্কে বাছাই করা হয়। প্রতিটি পাসে, কার্ডগুলির একটি ডেকে পড়া হয় এবং সেই কলামের অঙ্ক অনুযায়ী 10 টি আলাদা বিনে বিভক্ত হয়। তারপরে 10 টি বিন কার্ডটি ইনপুট হপারে আবার অর্ডারে রেখে দেওয়া হবে ("0" কার্ড আগে, "9" কার্ড শেষ)। তারপরে সমস্ত কলামটি বাছাই করা না হওয়া অবধি পরবর্তী পাসেমের মাধ্যমে আরেকটি পাস করা হবে। কার্ডের 12 টি অঞ্চল থাকার কারণে প্রকৃত কার্ড সোর্টারদের 10 টিরও বেশি বিন রয়েছে, একটি কলাম ফাঁকা হতে পারে, এবং একটি ভুল-পঠিত বিন রয়েছে। বর্ণগুলি বাছাই করতে, প্রতি কলামে 2 পাসের প্রয়োজন, অঙ্কের জন্য 1 ম পাস, 12 11 জোনের জন্য দ্বিতীয় পাস pass
পরবর্তীতে (১৯৩37) কার্ড কলটিং (মার্জিং) মেশিনগুলি ছিল যা ক্ষেত্রের সাথে তুলনা করে দুটি ডেকে কার্ডগুলিকে একীভূত করতে পারে। ইনপুটটি ছিল দুটি ইতিমধ্যে বাছাই করা ডেক কার্ড, একটি মাস্টার ডেক এবং একটি আপডেট ডেক। কল্টার দুটি ডেকে আ এয়া ম্যাটার বিন এবং একটি সংরক্ষণাগার বিনের সাথে একীভূত করলেন, যা allyচ্ছিকভাবে মাস্টার ডুপ্লিকেটগুলির জন্য ব্যবহৃত হত যাতে নতুন মাস্টার বিনটিতে কেবল নকলের ক্ষেত্রে আপডেট কার্ড থাকে। এটি সম্ভবত মূল (নীচে আপ) মার্জ সাজানোর পিছনে ধারণার ভিত্তি ছিল।