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

পাইথনে দেওয়া সীমাবদ্ধতায় সব কাজ শেষ করার ন্যূনতম সময় বের করা

ধরা যাক বিভিন্ন সময় আওতাধীন কাজের একটি অ্যারে আছে, k জন ব্যক্তি কাজ বাঁটতে পারেন এবং প্রতিটি ব্যক্তি এক ইউনিট কাজ করতে t সময় নেয়। আমাদের সব কাজ শেষ করার ন্যূনতম সময় বের করতে হবে নিচের সীমাবদ্ধতা মেনে:

  • একজন ব্যক্তির শুধু সঙ্কলিত (contiguous) কাজ দেওয়া যায়।
  • দুইজন ব্যক্তি একই কাজ শেয়ার বা করতে পারবেন না।

যেমন, k=4, t=5, job=[12,6,9,15,5,9] হলে আউটপুট 75, কারণ কাজ বাঁট: [12], [6,9], [15], [5,9]।

সমাধানের ধাপসমূহ

  • is_valid(time, K, job) ফাংশন: দেওয়া time-এ K জন দিয়ে কাজ শেষ করা সম্ভব কিনা চেক করুন।
  • বাইনারি সার্চ ব্যবহার করে ন্যূনতম time বের করুন।
  • ফলাফল হলো res * T।

উদাহরণ

def is_valid(time, K, job):
    n = len(job)
    count = 1
    curr_time = 0
    i = 0
    while i < n:
        if curr_time + job[i] > time:
            curr_time = 0
            count += 1
        else:
            curr_time += job[i]
            i += 1
    return count <= K
def get_minimum_time(K, T, job):
    n = len(job)
    end = sum(job)
    begin = 0
    res = end
    job_max = max(job)
    while begin <= end:
        mid = (begin + end) // 2
        if mid >= job_max and is_valid(mid, K, job):
            res = min(res, mid)
            end = mid - 1
        else:
            begin = mid + 1
    return res * T
job = [12, 6, 9, 15, 5, 9]
k = 4
T = 5
print(get_minimum_time(k, T, job))

ইনপুট

4, 5, [12, 6, 9, 15, 5, 9]

আউটপুট

75
  1. পাইথনে সব পয়েন্ট কানেক্ট করার ন্যূনতম খরচ বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ম্যাট্রিক্সে 0 দিয়ে ভরা সব আয়তাকার খুঁজে বের করা

  3. পাইথনে অ্যারের সব ভালো ইনডেক্স খুঁজে বের করা

  4. পাইথনে স্ট্রিংয়ের সকল সম্ভাব্য পারমুটেশন বের করা