কম্পিউটার

কিভাবে একটি Python QuickSort কোড করবেন

একটি Python QuickSort একটি পিভট উপাদান নির্বাচন করে এবং একটি উপাদানগুলিকে বিভক্ত করে অ্যারে দুটি নতুন তে অ্যারে s পিভটের চেয়ে বেশি সংখ্যা একতে যায় অ্যারে ; পিভটের চেয়ে কম সংখ্যাগুলি অন্যটিতে যায়। প্রতিটি অ্যারে সাজানো হয় এবং তারপর সব অ্যারে গুলিকে একটিতে একত্রিত করা হয়েছে৷

কিভাবে একটি Python QuickSort কোড করবেন

আপনি প্রোগ্রামিং এ একটি তালিকা সাজানোর জন্য ব্যবহার করতে পারেন প্রচুর বাছাই অ্যালগরিদম আছে. পাইথন সন্নিবেশের ধরন, বুদ্বুদ সাজানো এবং আরও অনেক কিছু আছে। QuickSort হল সবচেয়ে সাধারণ ধরনের একটি।

এই নির্দেশিকায়, আমরা QuickSorts কি এবং তারা কিভাবে কাজ করে সে সম্পর্কে কথা বলতে যাচ্ছি। আমরা পাইথন কুইকসর্টের একটি উদাহরণের মধ্য দিয়ে যাব যাতে আপনি কীভাবে এটি বাস্তবায়ন করতে হয় তা শিখতে পারেন৷

আর কোনো ঝামেলা ছাড়াই, চলুন শুরু করা যাক!

পাইথন কুইকসোর্ট কি?

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

QuickSort অ্যালগরিদম বিভাজন এবং জয় করে। এর মানে হল একটি তালিকা সাজানোর কাজটি কয়েকটি সাবটাস্কে বিভক্ত। সাজানোর শেষে, এই সাবটাস্কগুলির ফলাফলগুলি একটি সাজানো তালিকা ফেরাতে একত্রিত হয়।

QuickSort-এ, সাবটাস্ক প্রতিটি সাব-লিস্টের জন্য একটি পিভট সেট করছে এবং পিভটের সাপেক্ষে তাদের মানের উপর ভিত্তি করে উপাদানগুলিকে অর্ডার করছে।

আমি কখন পাইথন কুইকসর্ট ব্যবহার করব?

একটি QuickSort দরকারী যখন সময় জটিলতা গুরুত্বপূর্ণ. এর কারণ হল QuickSort অন্যান্য অ্যালগরিদমের তুলনায় কম মেমরি স্পেস ব্যবহার করে, যা তাদের দক্ষতা বৃদ্ধি করে।

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগদানের পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।

আপনি শুধুমাত্র একটি QuickSort ব্যবহার করা উচিত যদি আপনি Python recursion এর সাথে পরিচিত হন। এর কারণ হল QuickSort অ্যালগরিদম রিকারসিভ ফাংশনের উপর নির্ভর করে।

একটি QuickSort ছোট অ্যারেতে মার্জ সাজানোর চেয়ে বেশি দক্ষ। যাইহোক, বৃহত্তর ডেটা সেটগুলিতে, একটি সন্নিবেশ বাছাই বা মার্জ বাছাই দ্রুততর হতে পারে৷

একটি QuickSort কিভাবে কাজ করে?

একটি QuickSort একটি পিভট হিসাবে পরিবেশন করার জন্য একটি উপাদান বাছাই করে৷ এটি একটি তালিকার যেকোনো উপাদান হতে পারে। এই টিউটোরিয়ালের জন্য, আমরা একটি তালিকার শেষ আইটেমটি নির্বাচন করতে যাচ্ছি (3)।

8 4 5 2 1 3

একটি QuickSort প্রতিটি সংখ্যার সাথে পিভটের মান তুলনা করে যখন আমরা তালিকার আইটেমগুলি লুপ করি। যদি একটি আইটেম পিভট সংখ্যার চেয়ে বড় হয়, আমরা পিভটের পরে নম্বরটি সরিয়ে ফেলি; অন্যথায়, আমরা সংখ্যাটিকে পিভটের আগে সরিয়ে দিই:

2 1 3 8 5 4

মান 3 আমাদের তালিকার নিচে চলে গেছে। 3 এর কম সমস্ত আইটেম তার বাম দিকে সরানো হয়েছে; তিনটির চেয়ে বড় সমস্ত মান ডানদিকে সরানো হয়েছে৷

আমাদের পাইথন অ্যারে দুটি ভাগে বিভক্ত:পিভটের চেয়ে বড় আইটেম এবং একটি পিভটের চেয়ে কম আইটেম৷

এই প্রক্রিয়াটি শুরু হয়ে গেলে, দুটি অর্ধেকের প্রতিটিতে একটি নতুন পিভট শুরু হয়। এই পিভট আলাদাভাবে শুরু হয় এবং উপরের মত একই অ্যালগরিদম ব্যবহার করে। প্রথমে, আমরা একটি পিভট মান সেট করব যা প্রতিটি তালিকার শেষ মানের সমান:

পিভট ওয়ান

পিভট দুই

2 1
8 5 4

এর পরে, আমরা একটি পিভটের চেয়ে বড় সমস্ত মানকে পিভটের ডানদিকে সরিয়ে দেব। আমরা পিভটের চেয়ে কম সমস্ত মান বাম দিকে নিয়ে যাই।

পিভট ওয়ান

পিভট দুই

1 2
4 8 5

এই প্রক্রিয়াটি চলতে থাকে যতক্ষণ না আমরা আমাদের তালিকা সাজাই:

প্রথমবার 1 2
4 8 5
দ্বিতীয় বার
1

8 5





5 87t?/
তৃতীয় বার




8

আমাদের চূড়ান্ত অ্যারে এই মত দেখায়:

1 2 3 4 5 8

Python QuickSort উদাহরণ

QuickSort এর দুটি ফাংশন প্রয়োজন:একটি পিভট ফাংশন এবং একটি QuickSort ফাংশন৷

পার্টিশন ফাংশন দিয়ে শুরু করা যাক। এটি পিভট উপাদানের মানের উপর ভিত্তি করে অ্যারেকে বিভাজন বা প্রস্তুত করবে।

আমাদের পার্টিশন ফাংশন হবে:

  1. পিভট উপাদান নির্বাচন করুন
  2. পিভটের চেয়ে বড় সমস্ত আইটেম পিভটের ডানদিকে সরান
  3. পিভটের বাম দিকে পিভটের চেয়ে কম সমস্ত আইটেম সরান

কুইকসর্ট পাইথন প্রোগ্রাম

আসুন একটি প্রোগ্রাম লিখি যা এই অ্যালগরিদমটি প্রয়োগ করে:

def প্রস্তুত (সংখ্যা, নিম্ন, উচ্চ):পিভট =সংখ্যা [উচ্চ] আইটেম =নিম্ন - 1 সীমার জন্য i (নিম্ন, উচ্চ):যদি সংখ্যাগুলি[i] <=পিভট:আইটেম =আইটেম + 1 (সংখ্যা [আইটেম], সংখ্যা[i]) =(সংখ্যা[i], সংখ্যা[আইটেম]) (সংখ্যা[আইটেম + 1], সংখ্যা [উচ্চ]) =(সংখ্যা[উচ্চ], সংখ্যা[আইটেম + 1]) রিটার্ন আইটেম + 1

প্রথমত, আমরা একটি পিভট উপাদান নির্বাচন করি। এটি আমাদের তালিকার সর্বোচ্চ নম্বরের সমান৷

এর পরে, আমরা লুপের জন্য পাইথন ব্যবহার করে তালিকার সমস্ত আইটেম লুপ করি। যদি একটি সংখ্যা পিভটের থেকে কম বা সমান হয়, তবে এটি পিভটের বাম দিকে সরানো হয়। অন্যথায়, এটি পিভটের ডানদিকে যায়৷

আমাদের পাইথন ফাংশন নতুন উচ্চ মান প্রদান করে। নতুন উচ্চ মানটি আইটেম + 1 এর সমান।

পরবর্তী, আমাদের অ্যালগরিদম চালাতে হবে। আমরা একটি পৃথক ফাংশন লিখে এটি করতে পারি:

def quick_sort(সংখ্যা, কম, উচ্চ):কম থাকলে <উচ্চ:পিভট =প্রস্তুত(সংখ্যা, নিম্ন, উচ্চ) দ্রুত_সাঁজানো(সংখ্যা, নিম্ন, পিভট - 1) দ্রুত_ছাঁটা(সংখ্যা, পিভট + 1, উচ্চ) 

এই ফাংশনটি "নিম্ন" এর মান "উচ্চ" এর মানের থেকে কম কিনা তা পরীক্ষা করে। যদি হয়, আমাদের বাছাই চলতে পারে. অন্যথায়, আমাদের বাছাই বন্ধ. যদি আমাদের সাজানো বন্ধ হয়ে যায়, তার মানে আমরা তালিকাটি সাজিয়েছি।

এরপরে, আমাদের ফাংশন prepare() কে কল করে পদ্ধতি এটি পিভটের জন্য একটি পয়েন্টার সনাক্ত করে এবং আইটেমগুলিকে তাদের সঠিক জায়গায় নিয়ে যায়৷

আমাদের ফাংশন তখন quick_sort() কে কল করে পদ্ধতি দুইবার। প্রথমবার, আমরা পিভটের বাম দিকের উপাদানগুলিতে QuickSort চালাই। দ্বিতীয়বার, আমরা পিভটের ডানদিকের উপাদানগুলিতে QuickSort চালাই। তাই, আমাদের ফাংশন পুনরাবৃত্তিমূলক কারণ এটি নিজেই কল করে।

তালিকার প্রতিটি আইটেম সাজানো না হওয়া পর্যন্ত এটি চলতে থাকে।

একটি প্রধান পদ্ধতি লেখা

আসুন একটি প্রধান প্রোগ্রাম লিখি যা সাজানোর জন্য একটি তালিকা সংজ্ঞায়িত করে:

মান =[8, 4, 5, 2, 1, 3]মোট_মান =len(মান) দ্রুত_ছাঁটা(মান, 0, মোট_মান - 1)মুদ্রণ(মান)

প্রথমে, আমরা সাজানোর জন্য মানগুলির একটি তালিকা নির্দিষ্ট করি। আমাদের মান তালিকার দৈর্ঘ্য গণনা করতে আমরা পাইথন লেন() পদ্ধতি ব্যবহার করি। এরপর, আমরা quick_sort() কে কল করি পদ্ধতি।

আমরা যে সংখ্যাগুলি সাজাতে চাই সেগুলি হিসাবে আমরা "মানগুলি" পাস করি। আমরা তারপর কম সংখ্যা হিসাবে 0 পাস. "মান" বিয়োগ 1 এর দৈর্ঘ্য হল উচ্চ মান যা আমরা নির্দিষ্ট করি। উচ্চ মান হল মানের দৈর্ঘ্য বিয়োগ 1 কারণ একটি তালিকার প্রথম আইটেমের সূচক নম্বর 0 রয়েছে।

আসুন আমাদের প্রোগ্রাম চালানোর চেষ্টা করি:

[1, 2, 3, 4, 5, 8] 

আমাদের কোড একটি সাজানো তালিকা প্রদান করে! আমরা এটা করেছি। নিজের স্তুতি দিতে। QuickSort বোঝা বা প্রয়োগ করা সহজ নয়৷

জটিলতা ওভারভিউ

গড়ে, এই অ্যালগরিদমটি O(n* log n) এ পারফর্ম করবে। এটি ঘটে যখন পিভট উপাদানটি সবচেয়ে বড় বা ক্ষুদ্রতম উপাদান না হয় এবং যখন পিভট উপাদানটি মধ্যম উপাদানের কাছাকাছি না থাকে।

QuickSort-এ O(n2) এর সবচেয়ে খারাপ কেস জটিলতা রয়েছে। এটি ঘটে যখন একটি পিভট হিসাবে নির্বাচিত উপাদানটি হয় সর্বশ্রেষ্ঠ বা ক্ষুদ্রতম উপাদান। যদি এটি হয়, পিভট উপাদান সবসময় একটি সাজানো অ্যারের শেষে থাকবে। এটি অনেকগুলি অপ্রয়োজনীয় সাব অ্যারে তৈরি করবে৷

এই অ্যালগরিদমের জন্য সেরা কেস জটিলতা হল O(n* log n)। এটি ঘটে যখন পিভট এলিমেন্ট হয় মাঝের এলিমেন্টের সমান হয় অথবা মাঝের এলিমেন্টের কাছাকাছি হয়।

অ্যালগরিদম জটিলতা সম্পর্কে আরও জানতে, বিগ ও নোটেশনের জন্য আমাদের গাইড দেখুন৷

উপসংহার

Python QuickSorts একটি তালিকাকে ছোট তালিকায় ভাঙ্গার জন্য পুনরাবৃত্তি ব্যবহার করে যা পরে সাজানো হয়। প্রতিটি তালিকা একটি পিভট উপাদানের চারপাশে সাজানো হয়। পিভটের চেয়ে বড় উপাদানগুলি তার ডানদিকে সরানো হয়; ছোট উপাদানগুলি পিভটের বাম দিকে সরানো হয়।

পাইথন শেখার শীর্ষস্থানীয় সংস্থান, অনলাইন কোর্স এবং বইগুলির বিষয়ে নির্দেশনার জন্য, আমাদের বিস্তৃত পাইথন নির্দেশিকা পড়ুন।


  1. পাইথন প্রোগ্রাম কিভাবে চালাবেন?

  2. QuickSort-এর জন্য পাইথন প্রোগ্রাম

  3. কিভাবে Google Colaboratory এ পাইথন কোড চালাবেন?

  4. পাইথনে বাইট কোড ফাইল কীভাবে তৈরি করবেন