কেন জাভা আদিমগুলিতে একটি রেডিক্স সাজ্ট ব্যবহার করে না?


12

java.util.Arrays.sort(/* int[], char[], short[], byte[], boolean[] */) একটি রেডিক্স বাছাইয়ের পরিবর্তে 'টিউনড কুইকোর্ট' হিসাবে প্রয়োগ করা হয়।

আমি কিছুক্ষণ আগে একটি গতির তুলনা করেছি, এবং এন> 10000 এর মতো কিছু দিয়ে, রেডিক্স সাজানোর কাজটি সর্বদা দ্রুত ছিল। কেন?

উত্তর:


17

আমি অনুমান করব যে:

  • অ্যারে.সোর্টটি কুইকোর্ট হিসাবে কার্যকর করা হয়, কারণ কুইকোর্টটি তুলনামূলকভাবে শালীন সময়ে যে কোনও কিছুকে বাছাই করতে পারে।
  • 10000 এন্ট্রিগুলির তালিকা বাছাই করা এত সাধারণ বিষয় নয়। 10000 বা আরও বেশি উপাদানের একটি ডেটা-কাঠামো অ্যাক্সেস করা বরং সাধারণ। আপনার যদি শৃঙ্খলা বজায় রাখার প্রয়োজন হয় তবে প্রতিবার আপনার ক্ষুদ্রতম এলিমেন্টের প্রয়োজন হলে আপনার পুরো অ্যারে বাছাই করার চেয়ে ভারসাম্যপূর্ণ অনুসন্ধান গাছটি প্রায়শই যাওয়ার আরও ভাল উপায়।
  • আদিমদের বাছাই করা এতটা সাধারণ বিষয় নয়, যদিও বিশ্ববিদ্যালয় যা শিক্ষা দেয়।

মুল বক্তব্যটি হ'ল এটি সাধারণ ব্যবহারের মতো ঘটনা নয়, এটির আদর্শিককরণটি স্ট্যান্ডার্ড লাইব্রেরিতে থাকা দরকার। আপনি যদি কোনও অ্যাপ্লিকেশন লিখে থাকেন, এতে পারফরম্যান্স সংক্রান্ত সমস্যা রয়েছে, যেখানে আপনি 10000+ ইনট এর অ্যারে বাছাই করা আসলে বাধা হ'ল এটি নির্ধারণের মাধ্যমে নির্ধারণ করে থাকেন, তবে আপনি প্রথমে হাতের বাছাই বা আপনার পছন্দসই ডেটা কাঠামোর পুনর্বিবেচনা করতে পারেন জায়গা।


100% নিশ্চিত নয়, তবে আমি মনে করি টিমসোর্টটি এখন কিছু ক্ষেত্রে ব্যবহৃত হয়।
মার্টিজন ভার্গবার্গ

1
তবে অ্যারে.সোর্ট হিসাবে কিছু নেই, একাধিক অ্যারে.সোর্টস রয়েছে, এবং প্রশ্নটি এই সংখ্যা সংক্রান্ত ধরণেরগুলির জন্য বিশেষত ছিল।
ডানুবিয়ান নাবিক

6

ব্যাকডোডস সব বলেছে, আমি যে বিষয়টিকে সবচেয়ে গুরুত্বপূর্ণ বলে মনে করি তা আরও স্পষ্ট করার চেষ্টা করব:

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

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

একটি উদাহরণ:

আমাদের কাছে স্ট্রিংগুলির একটি অ্যারে রয়েছে: [0] = "মাইক", [1] = "অ্যালবার্ট", ​​[2] = "জোরো"। তারপরে আমরা সেই স্ট্রিংগুলিতে সূচকের একটি অ্যারে ঘোষণা করি: [0] = 0, [1] = 1, [2] = 2। তারপরে, আমরা সূচকের অ্যারে বাছাই করে এটিকে তুলনাকারী করে যা সূচীগুলির সাথে তাদের তুলনা করে না, তবে এই সূচকগুলি দ্বারা উল্লিখিত প্রকৃত স্ট্রিংগুলি। বাছাইয়ের পরে, সূচকের ফলাফলগুলির অ্যারেটি এর মতো দেখতে পাবেন: [0] = 1, [1] = 0, [2] = 2। আপনি দেখতে পাচ্ছেন, এই সাজানোর অর্ডারের অ্যারের মধ্যে থাকা মানগুলির বাইনারি ধরণগুলির সাথে কোনও সম্পর্ক নেই, এবং তবুও সূচকের এই অ্যারেটি অনুসরণ করে এবং প্রতিটি সম্পর্কিত স্ট্রিং আনার মাধ্যমে আমরা স্ট্রিংটিকে সাজানো ক্রমে পরিদর্শন করি।

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