কম্পিউটার

একটি সারি ডিজাইন করার প্রোগ্রাম যা পাইথনে সবচেয়ে সাম্প্রতিক ব্যবহৃত উপাদানটিকে এটির শেষে নিয়ে যায়


ধরুন, আমাদেরকে এমন একটি সারি ডিজাইন করতে বলা হয়েছে যা অতি সম্প্রতি ব্যবহৃত উপাদানটিকে এর শেষে নিয়ে যায়। সারিটি পূর্ণসংখ্যা 1 থেকে n দিয়ে শুরু করা হবে। এখন আমাদের একটি ফাংশন তৈরি করতে হবে যাতে যখনই এটিকে কল করা হয়, এটি তার ইনপুট হিসাবে প্রদত্ত অবস্থান থেকে মানটিকে সারির শেষে নিয়ে যায়। আমরা ফাংশনটিকে একাধিকবার কল করব, এবং ফাংশনটি তার চলমান কাজ সম্পাদন করার সময় সারির শেষে বর্তমানে মানটি ফিরিয়ে দেবে৷

সুতরাং, যদি সারিটি n =5 মান দিয়ে শুরু করা হয়, বা এতে 1 থেকে 5 পর্যন্ত মান থাকে; এবং অবস্থান যেখানে সঞ্চালিত হয় যথাক্রমে 5, 2, 3, এবং 1, তাহলে আউটপুট হবে 5, 2, 4, 1

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • i :=অ্যারে সূচক - 1-এর অবস্থান, যেখানে সাজানো ক্রম বজায় রাখার জন্য ডানদিকে k মান সন্নিবেশ করা যেতে পারে
  • x :=মুছে ফেলুন (k - index[i])th উপাদান থেকে ডেটা[i]
  • র জন্য i+1 থেকে সূচকের আকারের পরিসরে, করুন
    • index[ii] :=index[ii] - 1
  • যদি ডেটার শেষ উপাদানটির আকার>=nn হয়, তাহলে
    • তালিকা ডেটার শেষে একটি নতুন তালিকা ঢোকান
    • তালিকা সূচকের শেষে n সন্নিবেশ করান
  • ডেটার শেষে x ঢোকান
  • যদি ডেটা[i] rmpty হয়, তাহলে
    • ডেটা থেকে ith উপাদান মুছুন
    • সূচী থেকে ith উপাদান মুছুন
  • এক্স রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

from bisect import bisect_right
from math import sqrt
class TestQueue:
   def __init__(self, n):
      self.n = n
      self.nn = int(sqrt(n))
      self.data = []
      self.index = []
      for i in range(1, n+1):
         ii = (i-1)//self.nn
         if ii == len(self.data):
            self.data.append([])
            self.index.append(i)
         self.data[-1].append(i)

   def solve(self, k):
      i = bisect_right(self.index, k)-1
      x = self.data[i].pop(k - self.index[i])
      for ii in range(i+1, len(self.index)):
         self.index[ii] -= 1
      if len(self.data[-1]) >= self.nn:
         self.data.append([])
         self.index.append(self.n)
      self.data[-1].append(x)
      if not self.data[i]:
         self.data.pop(i)
         self.index.pop(i)
      return x

queue = TestQueue(5)
print(queue.solve(5))
print(queue.solve(2))
print(queue.solve(3))
print(queue.solve(1))

ইনপুট

queue = TestQueue(5)
print(queue.solve(5))
print(queue.solve(2))
print(queue.solve(3))
print(queue.solve(1))

আউটপুট

5
2
4
1

  1. বৃত্তাকার লিঙ্কযুক্ত তালিকায় একটি উপাদান অনুসন্ধান করতে পাইথন প্রোগ্রাম

  2. একটি সিরিজের সবচেয়ে বারবার উপাদান খুঁজে পেতে পাইথনে একটি প্রোগ্রাম লিখুন

  3. একটি সিরিজের সবচেয়ে ঘন ঘন পুনরাবৃত্ত উপাদান প্রিন্ট করতে পাইথনে একটি প্রোগ্রাম লিখুন

  4. পাইথন প্রোগ্রাম একটি অ্যারের বৃহত্তম উপাদান খুঁজে বের করতে