জাভা এবং। নেট: কেন বিভিন্ন বাছাই করা অ্যালগরিদমগুলি ডিফল্টরূপে ব্যবহৃত হয়?


19

কেন Javaএবং .NET Frameworkডিফল্টরূপে বিভিন্ন বাছাই করা অ্যালগরিদম ব্যবহার করে তা অবাক করেই ভাবছি ।

জাভা Array.Sort() ব্যবহার একত্রীকরণ সাজানোর ডিফল্টরূপে অ্যালগরিদম এবং Wikipedia.com বলেছেন:

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

.NET ফ্রেমওয়ার্কে ডিফল্ট বাছাই অ্যালগরিদম ( এমএসডিএন ) হিসাবে দ্রুত বাছাই করা Array.Sort/List.Sort()ব্যবহার করে :

তালিকা.সর্ট () অ্যারে.সোর্ট ব্যবহার করে, যা কুইকসোর্ট অ্যালগরিদম ব্যবহার করে। এই প্রয়োগটি একটি অস্থিতিশীল বাছাই করে; এটি হ'ল যদি দুটি উপাদান সমান হয় তবে তাদের ক্রমটি সংরক্ষণ করা যাবে না। বিপরীতে, একটি স্থিতিশীল বাছাই সমান যে উপাদানগুলির ক্রম সংরক্ষণ করে।

মহান দিকে তাকিয়ে "আলগোরিদিম তুলনা" টেবিল আমরা দেখতে পারি উভয় আলগোরিদিম সবচেয়ে খারাপ ক্ষেত্রে এবং মেমরি ব্যবহার দৃষ্টিকোণ থেকে চমত্কার বিভিন্ন আচরণ আছে:

এখানে চিত্র বর্ণনা লিখুন

উভয়ই Javaএবং .NETএন্টারপ্রাইজ সলিউশন বিকাশের দুর্দান্ত ফ্রেমওয়ার্ক, উভয়ের এম্বেডযুক্ত উন্নয়নের জন্য প্ল্যাটফর্ম রয়েছে। সুতরাং কেন তারা ডিফল্টরূপে বিভিন্ন বাছাই করা অ্যালগরিদম ব্যবহার করছে, কোন চিন্তা?


1
এই দুটি প্রকারের মধ্যে একটি তুলনা আরো আলোচনার জন্য দেখুন stackoverflow.com/q/680541/866022
yoozer8

উত্তর:


10

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

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

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


1
List<T>.Sortইন। নেট সিএলআর প্রয়োগ করা একটি নেটিভ পদ্ধতি ব্যবহার করে (যদি আপনি কাস্টম তুলনামূলক ব্যবহার না করেন) তবে ওএস লাইব্রেরিতে কোনও নির্ভরতা নেই।
জো

1
@ কিথ - .NET কোনও কিছুর উপরে স্তরযুক্ত নয় এবং প্ল্যাটফর্মটি স্বাধীন হওয়ার জন্য ডিজাইন করা হয়েছিল। আপনি বাস্তবায়নটি এখনই
রবার্ট ম্যাকলিন

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

মাইক্রোসফ্ট ডেভেলগুলি অন্যান্য বাস্তবায়নগুলির তুলনায় কুইকসোর্টের প্রমাণিত ফ্যানবয়, যেমন কুইকসোর্ট এমএস-ডস থেকেই পছন্দসই অ্যালগরিদম হিসাবে কাজ করেছে এবং এটি তাদের এই অ্যালগোরিদমের সাথে .NET এর বাছাইয়ের সিদ্ধান্তকে প্রভাবিত করবে।
কিথস

এই উত্তরটি এত ভুল যে আমি সত্যই হতবাক হয়েছি।
ব্যবহারকারী 9993

17

দুটি বিভিন্ন সংস্থার বিভিন্ন উন্নয়ন দল তাদের কাঠামো এবং উপাদানগুলির জন্য সাধারণ ব্যবহারের ক্ষেত্রে বিভিন্ন সিদ্ধান্তে এসেছিল এবং সে অনুযায়ী বাস্তবায়ন করার সিদ্ধান্ত নিয়েছে।

মূলত, প্রতিটি সংস্থা তাদের বিশ্লেষণ করে, তাদের ক্লায়েন্ট বেসকে দেখে এবং সেই অনুযায়ী বিভিন্ন সিদ্ধান্ত নেয়।

বিভিন্ন অনুমান এবং কাঁচা তথ্য ব্যবহার করে একই সিদ্ধান্তে আসতে আপনি বিভিন্ন সংস্থা ও দল দ্বারা বিশ্লেষণ আশা করতে পারবেন না।


5
বা এমনকি একই অনুমান এবং কাঁচা তথ্য। । ।
ওয়াইয়াট বার্নেট

হ্যাঁ এটি সম্ভবত অভ্যাসের বল ছিল - মাইক্রোসফ্ট (অস্থির) কোউকোর্টটি ব্যবহার করার অভ্যস্ত ছিল, জাভা স্থিতিশীল ধরণের সাথে যেতে চেয়েছিল ... এবং মার্জ সাজানো ছিল দ্রুততম স্থিতিশীল ...
রজারডপ্যাক

12

এই প্রশ্নটি কিছুটা পুরানো , যেহেতু জাভা এখন টিমসোর্ট ব্যবহার করে (জাভা 7 হিসাবে)

উল্লিখিত নির্দিষ্ট অ্যালগরিদমগুলির মধ্যে:

  • কুইকসোর্টের ও (এন ^ 2) এ খারাপ প্রতিক্রিয়াজনক খারাপ পারফরম্যান্স রয়েছে তবে এটি খানিকটা বেশি লাইটওয়েট / কম স্মৃতিশক্তি গ্রহণকারী তাই সাধারণ ক্ষেত্রে আরও ভাল পারফরম্যান্স সরবরাহ করে।

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

জাভা ডিজাইনাররা সাধারণভাবে কিছুটা রক্ষণশীল / "সঠিক জিনিস" তে মনোনিবেশিত বলে মনে হয় তাই অবাক হওয়ার কিছু নেই যে তারা এই দুটির মধ্যে Mergesort বেছে নিয়েছে কারণ এটি আরও ভাল গ্যারান্টি দেয়।

মাইক্রোসফ্ট কেন কুইকসোর্টকে বেছে নিল তা নিশ্চিত নয়, সম্ভবত তারা এটি কিছু মাইক্রো-বেঞ্চমার্কগুলিতে আরও ভাল দেখায়?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.