CodeGym /Java Blog /এলোমেলো /জাভাতে সন্নিবেশ সাজান
John Squirrels
লেভেল 41
San Francisco

জাভাতে সন্নিবেশ সাজান

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

সন্নিবেশ বাছাই কি?

মূলত, সন্নিবেশ বাছাই একটি অ্যালগরিদম যা বিকাশকারীরা ছোট সংখ্যার স্ট্রিংগুলিকে সংগঠিত করতে ব্যবহার করে। এটি সমস্ত মানকে দুটি স্ট্যাকের মধ্যে বিভক্ত করে - একটি সাজানো এবং একটি সাজানো না করা। একের পর এক, "বিন্যাস না করা" স্ট্যাকের সংখ্যাগুলি বাছাই করা হয় এবং সঠিক ক্রমে রাখা হয়৷ জাভাতে সন্নিবেশ বাছাই - 1আসুন ইনপুট এবং সন্নিবেশ সাজানোর আউটপুটটি ঘনিষ্ঠভাবে দেখি:
  • ইনপুট: সাজানো না হওয়া সাংখ্যিক উপাদান সহ একটি অ্যারে A: A[0,1, n, n-2...]।
  • আউটপুট: একই সংখ্যা ধারণকারী একটি অ্যারে কিন্তু সম্পূর্ণভাবে সাজানো। এটিকে সাধারণত B: B[0]B[1]...B[n-1] বলা হয়।
সন্নিবেশ বাছাই ব্যবহার করার কয়েকটি উপায় রয়েছে - এখানে সবচেয়ে জনপ্রিয়:
  • সংখ্যাগত বাছাই (ক্রমবর্ধমান): [1, 2, 3, 4, 5]
  • সংখ্যাগত বাছাই (হ্রাসমান ক্রম): [5, 4, 3, 2, 1]
  • বর্ণানুক্রমিক বাছাই: [a, b, c, d]
দ্রষ্টব্য: আপনার যদি একটি খালি অ্যারে বা একটি সিঙ্গলটন থাকে, তবে এগুলিকে ডিফল্টরূপে সাজানো বলে মনে করা হয়।

সন্নিবেশ সাজানোর তত্ত্ব বোঝা

সন্নিবেশ সাজানোর পিছনে কোডটি অন্বেষণ করার আগে, চলুন অ-প্রযুক্তিগত ভাষা ব্যবহার করে অ্যালগরিদম ভেঙে দেওয়া যাক। যেহেতু আমরা ক্রমবর্ধমান ক্রমে সাজানোর জন্য কোডটি দেখাব, তাই এই পোস্টে ধাপে ধাপে অ্যালগরিদম ব্যাখ্যা করা বোধগম্য। ধাপ 1. একটি সাংখ্যিক মান সাধারণত 10-এর চেয়ে কম কোথায় arr[1]এবং এর মধ্যে পুনরাবৃত্তি করা। ধাপ 2. পদ্ধতিটি ব্যবহার করে অনুক্রমের পূর্ববর্তী সংখ্যার সাথে আপনি যে উপাদানটি বেছে নিয়েছেন (যা হিসাবে পরিচিত) তার তুলনা করুন । ধাপ 3. যদি সমস্ত উপাদান তাদের উত্তরসূরিদের থেকে ছোট হয়, আপনি একটি বড় মান না পাওয়া পর্যন্ত তুলনাটি পুনরাবৃত্তি করুন। ধাপ 4. একটি অর্ডারকৃত সিকোয়েন্স তৈরি করতে ছোট একটির বাইরে একটি বড় মানের একটি অবস্থান অদলবদল করুন। arr[n]nkeysort()ধাপ 5. প্রক্রিয়াটি পুনরাবৃত্তি করুন যতক্ষণ না আপনি অক্ষরের একটি সাজানো স্ট্রিং পান

আদিম অ্যারে বাছাই

যেহেতু অ্যালগরিদম সবচেয়ে সহজবোধ্য জাভা ক্রিয়াকলাপগুলির মধ্যে একটি, এমনকি সম্পূর্ণ নতুনদেরও এটি বাস্তবায়নে খুব বেশি সমস্যা হওয়ার কথা নয়। এখানে একটি অ্যারে সাজানোর জন্য একটি ধাপে ধাপে নির্দেশিকা রয়েছে৷

1. সাজানোর জন্য একটি অ্যারে ঘোষণা করুন

শুরু করার জন্য, আসুন মানগুলির একটি স্ট্রিং তৈরি করি যা আমরা পরে জাভা ব্যবহার করে প্রদর্শন করব। সন্নিবেশ সাজানোর ব্যবহার করতে, আপনাকে একটি অ্যারে তৈরি করতে হবে। এর জন্য, ব্যবহার করুনint[]

int[] arrayA = {10, 14, 20, 30};

2. অ্যালগরিদম বাস্তবায়ন করতে sort_arr ব্যবহার করুন

sort_arr পদ্ধতিটি সন্নিবেশ সাজানোর জন্য সবচেয়ে সাধারণ উপায়গুলির মধ্যে একটি। অনুশীলনে, এটি এই মত দেখায়:

for(int i=0; i< sort_arr.length; ++i){
        int j = i;

3. একটি লুপ এবং একটি পুনরাবৃত্তিকারী তৈরি করুন

সন্নিবেশ সাজানোর অ্যালগরিদমে একটি লুপ ব্যবহার করে, বিকাশকারীদের প্রতিটি উপাদানের জন্য যুক্তি পুনরাবৃত্তি করতে হবে না। যদিও লুপ তৈরি করা জটিল বলে মনে হচ্ছে, এটি বেশ সহজ - এখানে একটি উদাহরণ:

for(int i=0; i< sort_arr.length; ++i){
এখন যেহেতু আপনার একটি কার্যকরী লুপ আছে, এটি একটি পুনরাবৃত্তিকারী তৈরি করার সময় যা সমস্ত উপাদান পছন্দসই ক্রমে সাজাতে হবে। এখন থেকে, আমরা পুনরাবৃত্তিকারীকে " j" হিসাবে উল্লেখ করব।
        int j = i;

4. একটি "while loop" তৈরি করা

সন্নিবেশ সাজানোর ক্ষেত্রে, একটি নতুন, সাজানো অ্যারের জন্য একটি "যখন" লুপ অপরিহার্য। একটি আরোহী-ক্রম সন্নিবেশ সাজানোর জন্য এটি সেট আপ করতে, একজন বিকাশকারীকে দুটি শর্ত মেনে চলতে হবে:
  • j-এর জন্য নির্ধারিত মান 0-এর বেশি হতে হবে
  • নির্ধারিত মান সূচকের j-1চেয়ে বেশি হওয়া প্রয়োজনj
while লুপের উভয় শর্তই সত্য হওয়ার সাথে সাথে অ্যারের কী মান সূচকের সমান হবে j

5. অ্যারে সাজানো

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

int key = sort_arr[j];
          sort_arr[j] = sort_arr[j-1];
          sort_arr[j-1] = key;
          j = j-1;

একটি ArrayList বাছাই

যদিও সন্নিবেশ সাজানোর পিছনে গণিত বোঝা গুরুত্বপূর্ণ, যখন এটি বাস্তব-জীবনের সফ্টওয়্যার বিকাশের ক্ষেত্রে আসে, তখন আপনি আদিম অ্যারেগুলির ক্রমগুলির চেয়ে অনেক বেশি অ্যারেলিস্টগুলিকে বাছাই করবেন৷ এখানে একটি ArrayList বাছাই করার জন্য একটি ধাপে ধাপে নির্দেশিকা রয়েছে:
  1. Elementসংগ্রহের অন্তর্গত আইটেমগুলির জন্য একটি নতুন ক্লাস তৈরি করুন ।

    
    public class Element {
        private int id;
    
        public Element(int id) {
            this.id = id;
        }
    

  2. একটি সংগ্রহের মধ্যে, একটি পদ্ধতি আছে compareTo()- আমরা দুটি উপাদানের আইডি তুলনা করতে এটি ব্যবহার করব।

    
        public int compareTo(Element element) {
            int res = 0;
            if (this.id < element.getId()) {
                res = -1;
            }
            if (this.id > element.getId()) {
                res = 1;
            }
            return res;
        }
    }
    

  3. অ্যালগরিদম প্রয়োগ করুন এবং বস্তুগুলিকে ArrayListতুলনা করার পরিবর্তে একটিতে সাজানোর জন্য কিছু লুপ তৈরি করুন।

    
    public static void insertionSortArrayList(List<element> list) {
        for (int j = 1; j < list.size(); j++) {
            Element current = list.get(j);
            int i = j-1;
            while ((i > -1) && ((list.get(i).compareTo(current)) == 1)) {
                list.set(i+1, list.get(i));
                i--;
            }
            list.set(i+1, current);
        }
    }
    

  4. ArrayListনীচে দেখানো হিসাবে আপনি পাশাপাশি আরও উপাদান যোগ করতে পারেন :

    
    List<element> list = new ArrayList<>();
    
    // Create elements w/ IDs 0-24
    for (int i = 0; i < 25; i++) {
        list.add(new Element(i));
    }
    
    // To use insertion sort, shuffle the values
    Collections.shuffle(list);
    

  5. এখন বাছাই করার সময়:

    
    // This helps print values before sorting
    list.forEach(e -> System.out.print(e.getId() + ", "));
    
    // Sort the list
    insertionSortArrayList(list);
    
    System.out.println();
    
    // Display a sorted array 
    list.forEach(e -> System.out.print(e.getId() + ", "));
    

  6. এখন ইনপুট এবং আউটপুট তুলনা করা যাক যাতে আমরা কোন ভুল করিনি। এখানে আমরা একটি উদাহরণ হিসাবে ব্যবহৃত স্ট্রিং তুলনা.

    
    4, 2, 6, 7, 0, 5, 9, 1, 8, 3,
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
    

সন্নিবেশ বাছাই অনুশীলন সমস্যা

এখন যেহেতু আপনার কাছে এই সাজানোর অ্যালগরিদম আছে, এখন আপনার তাত্ত্বিক এবং ব্যবহারিক দক্ষতা পরীক্ষা করার সময়। তত্ত্ব ক্যুইজ #1 আপনাকে একটি অ্যারে দেওয়া হয়েছে [1, 4, 6, 8] এবং এটিতে একটি নতুন উপাদান n = 7 যোগ করছেন। সংখ্যার একটি সাজানো ক্রম পেতে আপনাকে কতটি তুলনা করতে হবে? অ্যারেতে ইনডেক্স n এর চূড়ান্ত মান নির্দেশ করুন। তত্ত্ব ক্যুইজ #2 একটি চাকরির ইন্টারভিউতে, একটি টিম লিড আপনাকে প্রমাণ করতে বলে যে সাজানো সন্নিবেশ একটি অদক্ষ পদ্ধতি। [0, 3, 6, 8, 9] এর একটি সংখ্যাসূচক স্ট্রিং দেওয়া, সাজানোর জন্য প্রয়োজনীয় চলমান সময়কে সর্বাধিক করার জন্য আপনার ইনপুট ক্রমটির ক্রম কী হওয়া উচিত? অনুশীলন সমস্যা জাভা জন্য সন্নিবেশ সাজানোর ব্যবহার করে তার আরোহী ক্রমে [0, 1, 4, 5, 2, 3, 7, 9, 8] অ্যারে সাজান।

উপসংহার

সন্নিবেশ বাছাই করার সবচেয়ে বড় চ্যালেঞ্জ হল প্রক্রিয়াটি কীভাবে কাজ করে তা বোঝা। একবার আপনি এটি হ্যাং হয়ে গেলে, টেমপ্লেটটিকে কোডে পরিণত করা কেকের একটি টুকরো। যতক্ষণ আপনি অনুশীলন করবেন এবং সময়ের সাথে প্রাসঙ্গিক অনুশীলন সমস্যাগুলি পুনরায় দেখুন, আপনি আপনার সন্নিবেশ বাছাইয়ের গতি দ্রুত উন্নত করবেন।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION