সংখ্যা এবং অক্ষরের ক্রমানুসারে ক্রিয়াকলাপ সম্পাদন করা প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ দিক। স্লাইডিং উইন্ডো অ্যালগরিদম এটি করার জন্য একটি আদর্শ অ্যালগরিদম।
দিনের MUO ভিডিও কন্টেন্টের সাথে চালিয়ে যেতে স্ক্রোল করুন
এটি একটি মার্জিত এবং বহুমুখী সমাধান যা একাধিক ডোমেনে তার পথ খুঁজে পেয়েছে। স্ট্রিং ম্যানিপুলেশন থেকে শুরু করে অ্যারে ট্রাভার্সাল এবং পারফরম্যান্স অপ্টিমাইজেশান, এই অ্যালগরিদম একটি ভূমিকা পালন করতে পারে।
সুতরাং, কীভাবে স্লাইডিং উইন্ডো অ্যালগরিদম কাজ করে এবং আপনি কীভাবে এটি গো-তে প্রয়োগ করতে পারেন?
স্লাইডিং উইন্ডো অ্যালগরিদম বোঝা
সেখানে অনেক শীর্ষ অ্যালগরিদম যেগুলো একজন প্রোগ্রামার হিসেবে জানার জন্য উপযোগী, এবং স্লাইডিং উইন্ডো তাদের মধ্যে একটি। এই অ্যালগরিদমটি ডেটার একটি সিকোয়েন্সের উপর একটি গতিশীল উইন্ডো বজায় রাখার একটি সাধারণ ধারণার চারপাশে ঘোরে, সেই ডেটার উপসেটগুলিকে দক্ষতার সাথে প্রক্রিয়াকরণ এবং বিশ্লেষণ করতে।
আপনি অ্যালগরিদম প্রয়োগ করতে পারেন যখন অ্যারে, স্ট্রিং বা ডেটার ক্রম জড়িত কম্পিউটেশনাল সমস্যাগুলি সমাধান করার সময়।
স্লাইডিং উইন্ডো অ্যালগরিদমের পিছনে মূল ধারণা হল একটি নির্দিষ্ট বা পরিবর্তনশীল আকারের একটি উইন্ডোকে সংজ্ঞায়িত করা এবং এটিকে ইনপুট ডেটার মাধ্যমে সরানো। এটি আপনাকে অপ্রয়োজনীয় গণনা ছাড়াই ইনপুটের বিভিন্ন উপসেটগুলি অন্বেষণ করতে দেয় যা কর্মক্ষমতাকে বাধা দিতে পারে।
এটি কীভাবে কাজ করে তার একটি ভিজ্যুয়াল উপস্থাপনা এখানে রয়েছে:
উইন্ডোর সীমানা নির্দিষ্ট সমস্যার প্রয়োজনীয়তা অনুযায়ী সামঞ্জস্য করতে পারে।
প্রাইম প্যান্ট্রি একটি ভাল চুক্তি
Go-তে স্লাইডিং উইন্ডো অ্যালগরিদম বাস্তবায়ন করা
স্লাইডিং উইন্ডো অ্যালগরিদম কীভাবে কাজ করে তা শিখতে আপনি একটি জনপ্রিয় কোডিং সমস্যা ব্যবহার করতে পারেন: একটি প্রদত্ত দৈর্ঘ্য সহ একটি সাব-অ্যারের বৃহত্তম যোগফল খুঁজে বের করা।
এই নমুনা সমস্যার লক্ষ্য হল আকারের সাব-অ্যারে খুঁজে বের করা k যার উপাদানগুলির যোগফল সর্বাধিক মূল্যের। সমাধান ফাংশন দুটি প্যারামিটারে লাগে: ইনপুট অ্যারে এবং একটি ধনাত্মক পূর্ণসংখ্যা প্রতিনিধিত্ব করে k .
নমুনা অ্যারে হতে দিন সংখ্যা , নীচের কোড দেখায় হিসাবে:
nums := []int{1, 5, 4, 8, 7, 1, 9}
এবং সাব-অ্যারের দৈর্ঘ্য হতে দিন k , 3 এর মান সহ:
k := 3
তারপর আপনি দৈর্ঘ্য k সহ সাব-অ্যারেগুলির সর্বাধিক যোগফল খুঁজে পেতে একটি ফাংশন ঘোষণা করতে পারেন:
func maximumSubarraySum(nums []int, k int) int {
// body
}
আপনি হয়তো ভাবছেন উইন্ডোটি এমন একটি অ্যারে হতে হবে যা লক্ষ্য উপাদানগুলির অনুলিপি সংরক্ষণ করে। যদিও এটি একটি বিকল্প, এটি খারাপভাবে কাজ করে।
পরিবর্তে, আপনাকে এটির ট্র্যাক রাখতে উইন্ডোটির সীমানা নির্ধারণ করতে হবে। উদাহরণস্বরূপ, এই ক্ষেত্রে, প্রথম উইন্ডোতে একটি শুরু সূচক থাকবে 0 এবং একটি শেষ সূচক k-1 . উইন্ডোটি স্লাইড করার প্রক্রিয়াতে, আপনি এই সীমানাগুলি আপডেট করবেন।
ফ্রি শিপিং দিবস ২০১ 2016 কখন
এই সমস্যা সমাধানের প্রথম ধাপ হল k আকারের প্রথম সাব-অ্যারের যোগফল পাওয়া। আপনার ফাংশনে নিম্নলিখিত কোড যোগ করুন:
var windowStart, windowEnd, maxSum, windowSum int
windowStart = 0
for i := 0; i < k; i++ {
windowSum += nums[i]
}
maxSum = windowSum
উপরের কোডটি অ্যালগরিদমের জন্য প্রয়োজনীয় ভেরিয়েবল ঘোষণা করে এবং অ্যারের প্রথম উইন্ডোর যোগফল খুঁজে পায়। এটি তখন আরম্ভ করে সর্বোচ্চ পরিমাণ প্রথম উইন্ডোর যোগফলের সাথে।
পরবর্তী ধাপ হল জানালা স্লাইড মাধ্যমে পুনরাবৃত্তি দ্বারা সংখ্যা সূচক থেকে অ্যারে k অবশেষে. উইন্ডোটি স্লাইড করার প্রতিটি ধাপে:
- হালনাগাদ windowSum বর্তমান উপাদান যোগ করে এবং এ উপাদান বিয়োগ করে উইন্ডো স্টার্ট .
- হালনাগাদ সর্বোচ্চ পরিমাণ যদি নতুন মান windowSum এর চেয়ে বড়।
নিম্নলিখিত কোডটি স্লাইডিং উইন্ডোটি প্রয়োগ করে। এটি যোগ করুন সর্বাধিক সুবারেসম ফাংশন
for windowEnd = k; windowEnd < len(nums); windowEnd++ {
windowSum = windowSum + nums[windowEnd] - nums[windowStart]
if windowSum > maxSum {
maxSum = windowSum
}
// slide window forward
windowStart++
}
লুপটি সম্পূর্ণ হলে, আপনার কাছে সর্বাধিক যোগফল থাকবে সর্বোচ্চ পরিমাণ , যা আপনি ফাংশনের ফলাফল হিসাবে ফিরে আসতে পারেন:
return maxSum
আপনার সম্পূর্ণ ফাংশন এই মত হওয়া উচিত:
func maximumSubarraySum(nums []int, k int) int {
var windowStart, windowEnd, maxSum, windowSum int
windowStart = 0
for i := 0; i < k; i++ {
windowSum += nums[i]
}
maxSum = windowSum
for windowEnd = k; windowEnd < len(nums); windowEnd++ {
windowSum = windowSum + nums[windowEnd] - nums[windowStart]
if windowSum > maxSum {
maxSum = windowSum
}
// slide window forward
windowStart++
}
return maxSum
}
আপনি অ্যালগরিদম পরীক্ষা করার জন্য একটি প্রধান ফাংশন সংজ্ঞায়িত করতে পারেন, এর মান ব্যবহার করে সংখ্যা এবং k আগে থেকে:
func main() {
nums := []int{1, 5, 4, 8, 7, 1, 9}
k := 3
fmt.Println(maximumSubarraySum(nums, k))
}
এই ক্ষেত্রে আউটপুট হবে 19 , যা সাব-অ্যারের যোগফল [4, 8, 7], যা বৃহত্তম।
আপনি এখন একই কৌশলটি অনুরূপ সমস্যার ক্ষেত্রে প্রয়োগ করতে পারেন, এমনকি অন্যান্য ভাষায়ও, যেমন a ব্যবহার করে একটি উইন্ডোর মধ্যে বারবার উপাদান পরিচালনা করা জাভা হ্যাশ মানচিত্র , উদাহরণ স্বরূপ.
দক্ষ অ্যাপ্লিকেশনে সর্বোত্তম অ্যালগরিদম ফলাফল
এই অ্যালগরিদমটি সমস্যা সমাধানের ক্ষেত্রে দক্ষ সমাধানের শক্তির প্রমাণ হিসাবে দাঁড়িয়েছে। স্লাইডিং উইন্ডো কর্মক্ষমতা সর্বাধিক করে এবং অপ্রয়োজনীয় গণনা দূর করে।
স্লাইডিং উইন্ডো অ্যালগরিদম সম্পর্কে একটি দৃঢ় উপলব্ধি এবং Go-তে এর বাস্তবায়ন আপনাকে অ্যাপ্লিকেশন তৈরি করার সময় বাস্তব-বিশ্বের পরিস্থিতি মোকাবেলা করতে সজ্জিত করে।