কম্পিউটার টিউটোরিয়াল

পাইথনে গ্রাফে সর্বোচ্চ ক্লিকের ন্যূনতম আকার বের করার প্রোগ্রাম


মনে করুন একটি গ্রাফ দেওয়া আছে এবং আমাদের গ্রাফে সর্বোচ্চ ক্লিকের ন্যূনতম আকার বের করতে বলা হয়েছে। একটি গ্রাফের ক্লিক হলো গ্রাফের একটি সাবসেট যেখানে প্রতিটি ভের্টেক্স জোড়া আডজেসেন্ট, অর্থাৎ প্রতিটি জোড়ার মধ্যএ একটি এজ থাকে। গ্রাফে সর্বোচ্চ ক্লিক বের করা পলিনোমিয়াল টাইমে সম্ভব নয়, তাই একটি ছোট গ্রাফের নোড এবং এজ সংখ্যা দেওয়া থাকলে তার সর্বোচ্চ ক্লিক বের করতে হবে।

যেমন, ইনপুট নোডস = ৪, এজস = ৪ হলে, আউটপুট হবে ২।

পাইথনে গ্রাফে সর্বোচ্চ ক্লিকের ন্যূনতম আকার বের করার প্রোগ্রাম

উপরোক্ত গ্রাফে, ক্লিকের সর্বোচ্চ আকার ২।

সমাধান পদ্ধতি

এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:

  • helper() ফাংশন ডিফাইন করুন। এটি x, y প্যারামিটার নেবে
    • ga := x mod y
    • gb := y - ga
    • sa := x // y + 1
    • sb := x // y
    • return ga * gb * sa * sb + ga * (ga - 1) * sa * sa // 2 + gb * (gb - 1) * sb * sb // 2
  • i := 1, j := nodes + 1
  • যখন i + 1 < j, तब
    • p := i + (j - i) // 2
    • k := helper(nodes, p)
    • যদি k < edges হয়, তবে
      • i := p
    • অন্যথায়,
      • j := p
  • j রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:

import math def helper(x, y):     ga = x % y     gb = y - ga     sa = x // y + 1     sb = x // y     return ga * gb * sa * sb + ga * (ga - 1) * sa * sa // 2 + gb * (gb - 1) * sb * sb // 2 def solve(nodes, edges):     i = 1     j = nodes + 1     while i + 1 < j:         p = i + (j - i) // 2         k = helper(nodes, p)         if k < edges:             i = p         else:             j = p     return j print(solve(4, 4)) 

ইনপুট

4,4

আউটপুট

2

  1. পাইথনে গ্রাফের সব ভের্টেক্সের মধ্যবর্তী ন্যূনতম খরচের যোগফল বের করার প্রোগ্রাম

  2. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

  3. পাইথনে গ্রাফে ক্রিটিকাল ও সিউডো-ক্রিটিকাল এজ খুঁজে বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম অ্যারেতে সবচেয়ে বড় এলিমেন্ট বের করা