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

পাইথনে সার্ভিস সেন্টারের সেরা পজিশন বের করার প্রোগ্রাম


মনে করুন positions নামক একটি লিস্ট আছে যাতে কিছু বাড়ির কোঅর্ডিনেট পয়েন্ট থাকে। যদি আপনি (xc, yc) এ একটি সার্ভিস সেন্টার বানাতে চান যাতে যেকোনো দেয়া পয়েন্ট থেকে (xc, yc)-এর ইউক্লিডিয়ান দূরত্বের যোগফল ন্যূনতম হয়। তবে ন্যূনতম দূরত্বের যোগফল বের করতে হবে।

যেমন, ইনপুট positions = [(10,11),(11,10),(11,12),(12,11)] হলে, আউটপুট হবে 4.0

পাইথনে সার্ভিস সেন্টারের সেরা পজিশন বের করার প্রোগ্রাম

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

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

  • numIter := 50

  • total() ফাংশন ডিফাইন করুন। এটি cx, cy, positions প্যারামিটার নেবে

    • total := 0.0

    • positions-এ থাকা প্রতিটি p-এর জন্য

      • x, y := p

      • total += sqrt((cx-x)^2 + (cy-y)^2)

    • total রিটার্ন করুন

  • fy() ফাংশন ডিফাইন করুন। এটি x, positions প্যারামিটার নেবে

    • l := 0, r := 101, res := 0

    • i = 0 থেকে numIter-১ পর্যন্ত

      • y1 := l + (r-l)/3, y2 := r - (r-l)/3

      • t1 := total(x, y1, positions), t2 := total(x, y2, positions)

      • res := min(t1, t2)

      • যদি t1 < t2 হয়, তবে r := y2, অন্যথায় l := y1

    • res রিটার্ন করুন

  • fx() ফাংশন ডিফাইন করুন। এটি positions প্যারামিটার নেবে

    • l := 0, r := 101, res := 0

    • i = 0 থেকে numIter-১ পর্যন্ত

      • x1 := l + (r-l)/3, x2 := r - (r-l)/3

      • t1 := fy(x1, positions), t2 := fy(x2, positions)

      • res := min(t1, t2)

      • যদি t1 < t2 হয়, তবে r := x2, অন্যথায় l := x1

    • res রিটার্ন করুন

  • মেইন মেথড থেকে fx(positions) রিটার্ন করুন

উদাহরণ

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

from math import sqrt def solve(points):    numIter = 50    def total(cx, cy, positions):       total = 0.0       for p in positions:          x, y = p          total += sqrt((cx - x) * (cx - x) + (cy - y) * (cy - y))       return total    def fy(x, positions):       l, r = 0, 101       res = 0       for i in range(numIter):          y1 = l + (r - l) / 3          y2 = r - (r - l) / 3          t1 = total(x, y1, positions)          t2 = total(x, y2, positions)          res = min(t1, t2)          if t1 < t2:             r = y2          else:             l = y1       return res    def fx(positions):       l, r = 0, 101       res = 0       for i in range(numIter):          x1 = l + (r - l) / 3          x2 = r - (r - l) / 3          t1 = fy(x1, positions)          t2 = fy(x2, positions)          res = min(t1, t2)          if t1 < t2:             r = x2          else:         l = x1 return res return fx(positions) positions = [(10,11),(11,10),(11,12),(12,11)] print(solve(positions))

ইনপুট

[(10,11),(11,10),(11,12),(12,11)] 

আউটপুট

4.0

  1. পাইথনে অ্যারে গুণফলকে n দিয়ে ভাগ করার অবশেষ বের করার প্রোগ্রাম

  2. পাইথনে একটি সংখ্যার গুণনীয়গুলোর ন্যূনতম যোগফল বের করার প্রোগ্রাম

  3. পাইথনে একটি সংখ্যার সর্বোচ্চ质因数 বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম: সিলিন্ডারের পেরিমিটার বের করা