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

পাইথনে n-ary ট্রি-তে সর্বোচ্চ পথ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

একটি এজ লিস্ট দেওয়া আছে যেখানে প্রতিটি আইটেম (u, v) মানে u হল v-এর পেরেন্ট। ট্রি-তে সবচেয়ে লম্বা পথের দৈর্ঘ্য বের করতে হবে। পথ দৈর্ঘ্য = ১ + পথে থাকা নোডের সংখ্যা।

উদাহরণ: এজ লিস্ট [(1, 2), (1, 3), (1, 4), (4, 5), (5, 7), (1, 6), (4, 8)] হলে আউটপুট 5। কারণ পথ [1, 4, 5, 7] (৪টি নোড), পথ দৈর্ঘ্য = ১ + ৪ = ৫।

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

ট্রির ডায়ামিটার (diameter) বের করার классиক্যাল BFS/DFS পদ্ধতি:

  1. এডজেসেন্সি লিস্ট g তৈরি করুন (অনডাইরেক্টেড গ্রাফ হিসেবে)।
  2. যভাবেই একটা নোড o থেকে BFS করে সবচেয়ে দূরতম নোড f বের করুন।
  3. f থেকে আবার BFS করে সবচেয়ে দূরতম নোড বের করুন। সেই দূরততাই ডায়ামিটার।
  4. পথ দৈর্ঘ্য = ডায়ামিটার + ১।

পাইথন কোড

def solve(edges):
    # এডজেসেন্সি লিস্ট তৈরি করুন
    g = {}
    for u, v in edges:
        if u not in g:
            g[u] = []
        g[u].append(v)
        if v not in g:
            g[v] = []
        g[v].append(u)
    
    d = {}
    
    def bfs(o):
        d[o] = 1
        f = o
        q = [o]
        for x in q:
            for y in g[x]:
                if y not in d:
                    d[y] = d[x] + 1
                    if d[y] > d[f]:
                        f = y
                    q.append(y)
        return f
    
    # যেকোনো নোড থেকে শুরু করুন (এখানে প্রথম নোড)
    for o in g:
        f = bfs(o)
        d = {}
        return d[bfs(f)]
    return 0

# টেস্ট
edges = [(1, 2), (1, 3), (1, 4), (4, 5), (5, 7), (1, 6), (4, 8)]
print(solve(edges))  # আউটপুট: 5

ব্যাখ্যা

প্রথম BFS-এ যেকোনো নোড থেকে সবচেয়ে দূরতম নোড f পাওয়া যায়। দ্বিতীয় BFS-এ f থেকে সবচেয়ে দূরতম নোড পাওয়া যায়, সেই দূরততাই ট্রির ডায়ামিটার।

সময় জটিলতা

O(V + E) - দুটি BFS ট্রাভার্সাল।

  1. পাইথনে বাইনারি ট্রির লংগেস্ট কনsekutিভ পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ট্রির সর্বোচ্চ অল্টারনেটিং পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রির রুট থেকে লিফ পর্যন্ত সবচেয়ে লম্বা পাথের যোগফল খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রিতে জোড় মান সম্বলিত সর্বোচ্চ পথ খুঁজে বের করার প্রোগ্রাম