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

Python দিয়ে একই লেবেল ওয়ালা সাব-ট্রি নোড সংখ্যা বের করার প্রোগ্রাম


মান লাগিয়ে, আমাদের একটি রুটেড জেনারেল ট্রি আছে n নোড সহ, যেসব নোড 0 থেকে n-1 পর্যন্ত নম্বর দেওয়া আছে। প্রতিটি নোডের একটি লেবেল আছে লোয়ারকেস ইংলিশ লেটার। লেবেলগুলো labels অ্যারে-তে দেওয়া আছে, যেখানে labels[i] হল i-তম নোডের লেবেল। ট্রিটি একটি এজ লিস্ট দিয়ে রিপ্রেজেন্ট করা আছে যেখানে প্রতিটি edge e = [u,v] মানে u পেরেন্ট এবং v চাইল্ড। আমাদের n আকারের একটি অ্যারে A বের করতে হবে, যা i-তম নোডের সাব-ট্রিতে i-র লেবেলের মত নোড সংখ্যা রিপ্রেজেন্ট করে।

যেমন, ইনপুট যদি এমন হয়:

Python দিয়ে একই লেবেল ওয়ালা সাব-ট্রি নোড সংখ্যা বের করার প্রোগ্রাম

এখানে n = 5 এবং label = "ccaca"

তবে আউটপুট হবে [3, 2, 1, 1, 1] কারণ রুটের তিনটি ডিসেন্ডেন্ট একই লেবেলে, নোড ১-এর দুটি ডিসেন্ডেন্ট, এবং বাকিগুলো নিজের লেবেল ধারণ করে।

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

  • E := দেওয়া এজ লিস্ট থেকে গ্রাফ বানান
  • N := প্রতিটি নোড নম্বর এবং তার লেবেল ধারণকারী একটি ম্যাপ
  • R := আকার n-এর একটি লিস্ট, ০ দিয়ে ভরা
  • একটি ফাংশন r() ডিফাইন করুন। এটি ni নেবে:
    • C := কী ফ্রিকোয়েন্সি ধারণকারী একটি ম্যাপ
    • E[ni]-এ থাকা প্রতিটি e জন্য:
      • E[e]-তে থেকে ni ডিলিট করুন
      • r(e) C-তে আপডেট করুন
    • N[ni] C-তে আপডেট করুন
    • 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. Python দিয়ে বাইনারি ট্রিতে ভালো লিফ নোড পেয়ার সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে একই x বা y কোঅর্ডিনেট वाले নিকটতম পয়েন্ট খুঁজে বের করা

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

  4. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা