কম্পিউটার

পাইথনে অভিধানিকভাবে সবচেয়ে বড় বৈধ ক্রম নির্মাণের জন্য প্রোগ্রাম


ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের একটি ক্রম খুঁজে বের করতে হবে যা নিম্নলিখিত সমস্ত নিয়মগুলিকে সন্তুষ্ট করে −

  • 1 অনুক্রমের মধ্যে একবার ঘটে।

  • 2 এবং n এর মধ্যে প্রতিটি সংখ্যা ক্রমানুসারে দুবার আসে।

  • 2 থেকে n পরিসরের প্রতিটি i-এর জন্য, i-এর দুটি ঘটনার মধ্যে দূরত্ব ঠিক i৷

অনুক্রমের দুটি সংখ্যার মধ্যে দূরত্ব, a[i] এবং a[j], হল |j - i|। আমাদের আভিধানিকভাবে সবচেয়ে বড় ক্রম খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুট n =4 এর মত হয়, তাহলে আউটপুট হবে [4, 2, 3, 2, 4, 3, 1]

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

  • একটি ফাংশন ব্যাকট্র্যাক() সংজ্ঞায়িত করুন। এটি elems, res, start :=0
  • লাগবে
  • যদি এলিমের আকার <=0 হয়, তাহলে
    • সত্য ফেরান
  • যদি start>=res এর সাইজ হয়, তাহলে
    • মিথ্যে ফেরত দিন
  • যদি res[start] -1 এর মত না হয়, তাহলে
    • রিটার্ন ব্যাকট্র্যাক(elems, res, start + 1)
  • এর জন্য আমি 0 থেকে এলিমের আকার - 1 এর মধ্যে, কর
    • সংখ্যা :=এলেম[i]
    • dist :=0 যখন num একই হয় 1 অন্যথায় num
    • যদি (start + dist)
    • res[start] :=সংখ্যা
    • res[start + dist] :=সংখ্যা
    • elems থেকে ith উপাদান মুছুন
    • যদি backtrack(elems, res, start) মিথ্যা হয়, তাহলে
      • res[start] :=-1
      • res[start + dist] :=-1
      • পজিশন i এ এলেমগুলিতে num সন্নিবেশ করান
      • পরবর্তী পুনরাবৃত্তির জন্য যান
    • অন্যথায়,
      • সত্য ফেরান
  • মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন
  • elems :=n থেকে 1 পর্যন্ত n উপাদান সহ একটি তালিকা
  • res :=n*2-1 আকারের একটি তালিকা এবং -1 দিয়ে পূরণ করুন
  • ব্যাকট্র্যাক(এলেম, রেস)
  • রিটার্ন রিটার্ন
  • উদাহরণ

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

    def backtrack(elems, res, start = 0):
       if len(elems) <= 0:
          return True
    
       if start >= len(res):
          return False
    
       if res[start] != -1:
          return backtrack(elems, res, start + 1)
    
       for i in range(len(elems)):
          num = elems[i]
          dist = 0 if num == 1 else num
    
          if (start + dist) < len(res) and res[start + dist] == -1:
             res[start] = num
             res[start + dist] = num
             elems.pop(i)
    
             if not backtrack(elems, res, start):
                res[start] = -1
                res[start + dist] = -1
                elems.insert(i, num)
                continue
             else:
                return True
    def solve(n):
       elems = [ i for i in range(n,0,-1)]
       res = [ -1 for i in range(n*2 - 1)]
       backtrack(elems, res)
       return res
    
    n = 4
    print(solve(n))

    ইনপুট

    4

    আউটপুট

    [4, 2, 3, 2, 4, 3, 1]

    1. একটি গ্রাফের বৃহত্তম চক্রের সর্বনিম্ন আকার খুঁজে বের করার জন্য প্রোগ্রাম (পাইথন)

    2. পাইথনে সম্ভাব্য সকল বৈধ পথ থেকে সর্বোচ্চ স্কোর খুঁজে বের করার প্রোগ্রাম

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

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