একটি বাইনারি গাছকে লাল-কালো গাছ হতে রঙ করুন


16

একটি সাধারণ সাক্ষাত্কারের প্রশ্নটি প্রদত্ত বাইনারি গাছের উচ্চতা ভারসাম্যপূর্ণ কিনা তা নির্ধারণ করার জন্য একটি অ্যালগরিদম দেওয়া হয় (এভিএল ট্রি সংজ্ঞা)।

আমি ভাবছিলাম যে আমরা যদি রেড-ব্ল্যাক গাছগুলির সাথে অনুরূপ কিছু করতে পারি।

একটি নির্বিচারে অসম্পূর্ণ বাইনারি ট্রি দেওয়া হয়েছে (NULL নোড সহ), এমন একটি "দ্রুত" অ্যালগরিদম রয়েছে যা নির্ধারণ করতে পারে যে আমরা নোডগুলিকে লাল / কালো করতে পারি কিনা (যাতে তারা কোনও লাল-কালো গাছের সমস্ত বৈশিষ্ট্য সন্তুষ্ট করে) (এই প্রশ্ন হিসাবে সংজ্ঞা )?

প্রাথমিক ধারণাটি ছিল যে আমরা কেবল NUL নোডগুলি সরিয়ে ফেলতে পারি এবং ফলস্বরূপ গাছটি একটি লাল-কালো গাছ হতে পারে কিনা তা পুনরাবৃত্তভাবে যাচাই করার চেষ্টা করতে পারি, তবে এটি কোথাও যেতে পারে বলে মনে হয় না।

আমি (একটি সংক্ষিপ্ত) কাগজপত্রের জন্য ওয়েব অনুসন্ধান করেছি, তবে এই সমস্যার মোকাবেলা করার জন্য মনে হয় এমন কোনও সন্ধান পাইনি।

এটা সম্ভব যে আমি কিছু সহজ অনুপস্থিত।


আমি নিশ্চিত যে প্রতিটি নোডের জন্য একটি গাছ লাল-কালো রঙের হতে পারে তবে এ থেকে নূলে নূলে যাওয়ার দীর্ঘতম পথটি সংক্ষিপ্ততমের চেয়ে দ্বিগুণ বেশি নয়। তা কি যথেষ্ট দ্রুত?
ক্যারোলিস জুডেলė

উত্তর:


12

যদি গাছের প্রতিটি নোডের জন্য, এটি থেকে একটি পাতা নোডের দীর্ঘতম পথটি সংক্ষিপ্তটির চেয়ে দ্বিগুণ বেশি নয়, তবে গাছে লাল-কালো বর্ণ রয়েছে।

যে কোনও নোডের রঙ বের করার জন্য এখানে একটি অ্যালগরিদম n

if n is root,
    n.color = black
    n.black-quota = height n / 2, rounded up.

else if n.parent is red,
    n.color = black
    n.black-quota = n.parent.black-quota.

else (n.parent is black)
    if n.min-height < n.parent.black-quota, then
        error "shortest path was too short"
    else if n.min-height = n.parent.black-quota then
        n.color = black
    else (n.min-height > n.parent.black-quota)
        n.color = red
    either way,
        n.black-quota = n.parent.black-quota - 1

এখানে n.black-quotaকালো নোড সংখ্যা আপনি একটি পাত গিয়ে নোড থেকে দেখতে আশা nএবং n.min-heightনিকটতম পাত থেকে দূরত্ব।

স্বরলিখনের বংশবৃদ্ধির জন্য, , এইচ ( এন ) = এবং এম ( এন ) = আসুন ।b(n)= n.black-quotah(n)= n.heightm(n)= n.min-height

উপপাদ্য: একটি বাইনারি গাছ । যদি প্রতিটি নোডের জন্য n T , h ( n ) 2 মি ( এন ) এবং নোড r = রুট ( টি ) , বি ( আর ) [ 1TnTh(n)2m(n)r=root(T)এরপরেটিএরশিকড় থেকে পাতায় প্রতিটি পথেঠিক(আর)কালো নোডেরসাথে একটি লাল-কালো রঙথাকে।b(r)[12h(r),m(r)]Tb(r)

প্রুফ: আওতায় আনা b(n)

এক বা দুটি উচ্চতার চারটি গাছই দিয়ে উপপাদাকে সন্তুষ্ট করে তা যাচাই করুন ।b(n)=1

লাল-কালো গাছের সংজ্ঞা অনুসারে, মূলটি কালো is যাক একটি কালো পিতা বা মাতা সঙ্গে একটি নোড হতে পি যেমন যে ( পি ) [ 1np। তারপর(এন)=(পি)-1,এইচ(এন)=(পি)-1এবংH(এন)মি(এন)মি(পি)-1b(p)[12h(p),m(p)]b(n)=b(p)1h(n)=h(p)1h(n)m(n)m(p)1

ধরুন যে উপপাদ্যটি মূল , b ( r ) < b ( q ) সহ সমস্ত গাছের জন্য ধারণ করে ।rb(r)<b(q)

যদি , তবে এন সূচকীয় ধারণা দ্বারা লাল-কালো বর্ণযুক্ত হতে পারে।b(n)=m(n)n

যদি তারপর(এন)=1b(p)=12h(p)এনপ্ররোচক ধারণা অনুগ্রহ করে না এবং তাই লাল হতে হবে। আসুনcসন্তান হতেএনh(c)=h(p)-2এবং b(c)=b(p)-1=1b(n)=12h(n)1ncnh(c)=h(p)2। তারপরেসিটিলাল-কালো রঙের হতে পারে প্ররোচক ধারণাটি দ্বারা।b(c)=b(p)1=12h(p)1=12h(c)c

নোট করুন, একই যুক্তি দ্বারা, যদি , তারপর উভয়এনএবং সন্তানএনপ্রস্তাবনামূলক ধৃষ্টতা সন্তুষ্ট। সুতরাংএনকোন রঙ থাকতে পারে।b(n)(12h(r),m(r))nnn


@ আর্যভট্ট, যতটা পিতামাতাকে তার বাচ্চাদের আগে দেখা যায় ততক্ষণ কোনও ট্র্যাভারসাল ঠিক আছে। আমার কাছে কোনও আনুষ্ঠানিক প্রমাণ লেখা নেই, তবে এটি কীভাবে দেখবে সে সম্পর্কে আমার ধারণা আছে। আমি যখন লিখতে পারি তখন কিছু লেখার চেষ্টা করব।
ক্যারোলিস জুডেল

আর্যভট্ট, আমি একটি প্রমাণ যুক্ত করেছি দুঃখিত আমি এত দিন নিয়েছি।
কারোলিস জুডেল

@ আর্যভট্ট, ধারণাটি হ'ল কিছু নোড পি এর যদি নির্দিষ্ট সীমানার সাথে থাকে তবে পি বাচ্চা বা নাতির সি একই সীমার মধ্যে ( সি ) থাকতে পারে । এই সীমানায় ( এন ) থাকা n কালো হওয়ার সাথে মিলে যায়। প্রমাণ অধিকাংশই সীমান্ত সম্পর্কে এবং মি একটি সন্তান বা নাতি এর দেওয়া এবং মি বাবা-মা বা পিতামহ করুন। আপনার গাছ অবশ্যই অনুগ্রহযোগ্য। বি ( আর টি)b(p)pcpb(c)b(n)nhmhm , বাম সন্তানের কালো এবং ডান শিশু লাল, দৈর্ঘ্য 16 পথ... , দৈর্ঘ্য 8 পথ , 9 এর পাথ এবং 12 থাকতে পারে একাধিক বৈধ রঙ b(root)=8brbrbrbbbbbbbb
ক্যারোলিস জুডেল


2

আমি বিশ্বাস করি যে করোলিসের উত্তরটি সঠিক (এবং লাল-কালো গাছগুলির একটি দুর্দান্ত সুন্দর বৈশিষ্ট্য, একটি সময় অ্যালগরিদম দেয়), কেবল আরেকটি সম্ভাব্য উত্তর যুক্ত করতে চেয়েছিল।O(n)

একটি পদ্ধতির গতিশীল প্রোগ্রামিং ব্যবহার করা হয়।

একটি গাছ, প্রতিটি নোডের জন্য দেওয়া : আপনি দুটি সেট গঠন করা এস আর ( এন ) এবং এস বি ( এন ) যা সাবট্রি এ রুট সম্ভব কালো উচ্চতা রয়েছে এনএস আর ( এন ) এ কালো-উচ্চতা ধারণ করে এন ধরে রেড বর্ণকে ধরে নিয়েছে , এবং এস বি ( এন ) ধরে নিচ্ছে যে রঙিন কালো।nSR(n)SB(n)nSR(n)nSB(n)n

এখন জন্য সেট দেওয়া L e f t এবং n আর আই জি এইচ টি (অর্থাত্ এন এর প্রত্যক্ষ শিশুরা ), আমরা যথাযথ ছেদ এবং ইউনিয়ন (এবং প্রয়োজনীয় হিসাবে বৃদ্ধি) নিয়ে n এর জন্য সম্পর্কিত সেটগুলি গণনা করতে পারি ।n.Leftn.Rightnn

আমি বিশ্বাস করি এটি একটি সময় অ্যালগরিদম হতে পারে।O(nlogn)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.