একটি N- বৃক্ষ বৃক্ষের মধ্যে একাধিক নোডের সর্বনিম্ন সাধারণ পূর্বপুরুষ

I am trying to implement LCA of multiple nodes in an n-ary tree in java. I am working with parse trees of sentences, So its reasonable to assume that number of children of a node <= 6. Multiple nodes here are two phrases(continuous word sequence) in a sentence. Let k be the number of nodes involved.

এক উপায় হল K/2 জোড়া জন্য দুটি নোডের LCA খুঁজে পাওয়া এবং আমরা k/2 নোড পাবেন। এখন এই K/2 নোডগুলিতে recurse। অর্ডারটি O (nlog k) হতে হবে, যেখানে O (n) হল রৈখিক এলসিএ সন্ধানকারী অ্যালগরিদমগুলির জটিলতা। আমি কি এটা আরও দক্ষতার সাথে করতে পারি?

0
@ ভিএসওভারফ্লো আমি লগ (কি) ধাপ পাব এবং প্রত্যেকটি ধাপটি O (n) লাগে, অতএব, সামগ্রিকভাবে তার O (nlog k)। হে (ক) আপনার গণনা কি?
যোগ লেখক damned, উৎস
আমি মনে করি জটিলতাটি হে (এন ক) না (না। লগ (k))। আপনার কাছে k/2, k/4 এর লগ (k) ধাপ থাকবে। যা ও (k)
যোগ লেখক VSOverFlow, উৎস
আমি অনুমান করছি যে এলসিএ (২, এন) হল ও (এন)। যখন আপনি বাইনারি ট্রি তৈরি করেন তখন LCA কলের মোট সংখ্যাটি O (k) (k/2 + k/4 + ....)। সুতরাং মোট রানটাইম জটিলতা হল O (n * k) (i.e. কে ও (n) এর কলগুলি)। লগ (k) ধাপগুলির প্রতিটিতে অনেকগুলি O (n) ধাপ রয়েছে (k/2, k/4, k/8, ...)
যোগ লেখক VSOverFlow, উৎস

1 উত্তর

আমি এই সমস্যাটি সমাধান করে দিয়েছি যে বাক্যাংশগুলির নোডগুলি ক্রমাগত হয় i.e. একটি পার্স বৃক্ষের পাতা নোডের তালিকায় ক্রমাগত সূচক রয়েছে।

সেগমেন্ট 1 কোডটি start1 থেকে end1 থেকে ধারন করুন। সেগমেন্ট 2 = (start2, end2) এর ক্ষেত্রেও একইরকম হতে পারে।

(start1, end1) এবং (start2, end2) এর প্রয়োজনীয় সাধারণ পূর্বপুরুষ সূচকগুলি মিনিট (start1, start2) এর সাথে নোডের সাধারণ পূর্বপুরুষ। > এবং <�কোড> সর্বোচ্চ (শেষ 1, শেষ ২) ।

0
যোগ
ধারণাটি হল যে যদি সব নোডগুলি পরপর লিপ নোড থাকে তবে এই সকল নোডের এলসিএ হবে প্রথম এবং শেষ নোডের এলসিএ।
যোগ লেখক damned, উৎস
আপনি পূর্ণ পদ্ধতি দিতে দয়া করে? আমি আপনার অ্যালগরিদমকে প্রকৃত কোডে রূপান্তর করতে সক্ষম নই।
যোগ লেখক javafan, উৎস