কম্পিউটার

পাইথন ব্যবহার করে একই লেবেল সহ সাব-ট্রিতে নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে n নোড সহ একটি মূলযুক্ত সাধারণ গাছ আছে, যার নোডগুলি 0 থেকে n-1 পর্যন্ত সংখ্যাযুক্ত। প্রতিটি নোডে ছোট হাতের ইংরেজি অক্ষর সহ একটি লেবেল রয়েছে। লেবেলগুলি লেবেল অ্যারেতে ইনপুট হিসাবে দেওয়া হয়, যেখানে lables[i]-এ ith নোডের জন্য লেবেল থাকে। গাছটি প্রান্ত তালিকা দ্বারা প্রতিনিধিত্ব করা হয় যেখানে প্রতিটি প্রান্ত e এর [u,v] প্রতিনিধিত্ব করে u হল পিতামাতা এবং v হল শিশু। আমাদের n আকারের একটি অ্যারে খুঁজে বের করতে হবে, ith নোডের সাবট্রিতে i

একই লেবেল সহ নোডের সংখ্যা উপস্থাপন করে।

সুতরাং, যদি ইনপুট মত হয়

পাইথন ব্যবহার করে একই লেবেল সহ সাব-ট্রিতে নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম

এখানে n =5 এবং লেবেল =“ccaca”

তাহলে আউটপুট হবে [3, 2, 1, 1, 1] কারণ একই লেবেলের সাথে রুটের তিনটি বংশধর রয়েছে, নোড 1-এর দুটি বংশধর রয়েছে এবং অন্য সকলেই সেই লেবেলটি ধরে রেখেছে।

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

  • E :=প্রদত্ত প্রান্ত তালিকা থেকে গ্রাফ তৈরি করুন

  • N :=প্রতিটি নোড নম্বর এবং এর সংশ্লিষ্ট লেবেল ধারণকারী একটি মানচিত্র

  • R :=n আকারের একটি তালিকা এবং 0

    দিয়ে পূরণ করুন
  • একটি ফাংশন r() সংজ্ঞায়িত করুন। এটি নিবে

  • C :=একটি কীর ফ্রিকোয়েন্সি ধরে রাখার জন্য একটি মানচিত্র

  • E[ni]-এর প্রতিটি e-এর জন্য, করুন

    • E[e]

      থেকে ni মুছুন
    • C

      -এ r(e) আপডেট করুন
  • C

    -এ N[ni] আপডেট করুন
  • R[ni] :=C[N[ni]]

  • C

    ফেরত দিন
  • মূল পদ্ধতি থেকে r(0)

    কল করুন
  • R

    ফেরত দিন

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

উদাহরণ

from collections import defaultdict, Counter
def solve(n, edges, labels):
   E = defaultdict(set)
   for f,t in edges:
      E[f].add(t)
      E[t].add(f)
   N = {i:e for i,e in enumerate(labels)}
   R = [0]*n
   def r(ni):
      C = Counter()
      for e in E[ni]:
         E[e].remove(ni)
         C.update(r(e))
      C.update((N[ni]))
      R[ni] = C[N[ni]]
      return C
   r(0)
   return R
n = 5
edges = [[0,1],[0,2],[1,3],[0,4]]
labels = "ccaca"
print(solve(n, edges, labels))

ইনপুট

5, [[0,1],[0,2],[1,3],[0,4]], "ccaca"

আউটপুট

[3, 2, 1, 1, 1]

  1. পাইথন ব্যবহার করে ভাল লিফ নোড জোড়ার সংখ্যা খুঁজে বের করার প্রোগ্রাম

  2. পাইথন ব্যবহার করে একই x বা y স্থানাঙ্ক আছে এমন নিকটতম বিন্দু খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে একটি পরিসরে নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম একটি তালিকার ক্ষুদ্রতম সংখ্যা খুঁজে বের করতে