বাইনারি গাছের সর্বনিম্ন উচ্চতা কেন


10

আমার জাভা ক্লাসে, আমরা বিভিন্ন ধরণের সংগ্রহের জটিলতা সম্পর্কে শিখছি।

শীঘ্রই আমরা বাইনারি গাছগুলি নিয়ে আলোচনা করব, যা আমি পড়ছি। বইটিতে বলা হয়েছে যে বাইনারি গাছের সর্বনিম্ন উচ্চতাlog2(n+1)1, তবে আরও ব্যাখ্যা দেয় না।

কেউ ব্যাখ্যা করতে পারেন কেন?


আমি এখানে ব্যাখ্যা stackoverflow.com/a/13093274/550393
2cupsOfTech

উত্তর:


11

একটি বাইনারি গাছের পাতাগুলিবিহীন নোডে 1 বা 2 এবং পাতার নোডে 0 টি নোড থাকে। হতে দিনn একটি গাছের নোড এবং আমাদের সেগুলি এমনভাবে সাজিয়ে তুলতে হবে যাতে তারা এখনও একটি বৈধ বাইনারি গাছ গঠন করে।

প্রমাণ ছাড়াই, আমি উল্লেখ করছি যে উচ্চতা সর্বাধিক করার জন্য প্রদত্ত নোডগুলি রৈখিকভাবে সাজানো উচিত, অর্থাত প্রতিটি নন-পাতার নোডের কেবল একটি শিশু হওয়া উচিত:

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

এখানে নোডের সংখ্যার দিক দিয়ে উচ্চতার সম্পর্কের গণনা করার সূত্রটি সোজা-ফরোয়ার্ড। যদিh তাহলে গাছের উচ্চতা h=n1

এখন, আমরা যদি একটি বাইনারি গাছ নির্মাণের চেষ্টা করি nন্যূনতম উচ্চতাযুক্ত নোডগুলি (সর্বদা সম্পূর্ণ বাইনারি গাছের কাছে হ্রাসযোগ্য), পরবর্তী স্তরে যাওয়ার আগে আমাদের উপরের স্তরে যতগুলি সম্ভব নোড প্যাক করতে হবে। সুতরাং, গাছ নিম্নলিখিত গাছের রূপ নেয়:

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

আসুন একটি নির্দিষ্ট কেস দিয়ে শুরু করি, n=2m1

আমরা জানি যে,

20+21+22+...+2m1=2m1

এছাড়াও, এটি প্রমাণ করা সহজ, একটি স্তর i সর্বাধিক থাকতে পারে 2i এটি নোড।

উপরের যোগফলে এই ফলাফলটি ব্যবহার করে আমরা এটি প্রতিটি স্তরের জন্য খুঁজে পাই iথেকে, থেকে 0 প্রতি m, একটি সম্পর্কিত শব্দ বিদ্যমান 2i1 এর প্রসারণে 2m1। এটি বোঝায়, এটি একটি সম্পূর্ণ বাইনারি গাছ2m1 নোডগুলি সম্পূর্ণরূপে পূর্ণ এবং উচ্চতা রয়েছে, h(2m1)=m1, কোথায় h(n)= সাথে একটি সম্পূর্ণ বাইনারি গাছের উচ্চতা n নোড।

এই ফলাফলটি ব্যবহার করে, h(2m)=m, গাছের সাথে 2m1 নোডগুলি পুরোপুরি ভরাট এবং এর সাথে একটি গাছ tree (2m1)+1=2m নোডগুলিকে পরবর্তী স্তরে অতিরিক্ত নোড সমন্বিত করতে হয় m, উচ্চতা 1 থেকে বৃদ্ধি m1 প্রতি m

এখন অবধি আমরা প্রমাণ করেছি,

h(2m)=m,
h(2m+1)=m+1
পাশাপাশি,
h(2m+11)=m

সুতরাং, nZ,2mn<2m+1

mh(n)<m+1

তবে, উভয় পক্ষের লগ (বেস 2) নেওয়া,

mlog2(n)<m+1
m=log2(n)

সুতরাং, n,n[2m,2m+1)

h(n)=m=log2(n)

এবং আমরা এই ফলাফলটি সাধারণীকরণ করতে পারি nZ আনয়ন ব্যবহার

পিএস: একটি সম্পূর্ণ বাইনারি গাছের উচ্চতার উল্লেখ করে এমন বই log2(n+1)1 সবার জন্য বৈধ নয় n কারণ log2(n) বেশিরভাগ পূর্ণসংখ্যার জন্য অ-অবিচ্ছেদ্য মান দেয় n (অর্থাত্ নিখুঁত বাইনারি গাছগুলির জন্য সকলের জন্য), তবে গাছের উচ্চতা নিখুঁতভাবে অবিচ্ছেদ্য।


19

আমি এটা ধরে নিচ্ছি এন, আপনি বাইনারি গাছের মোট নোডের অর্থ। বাইনারি গাছের উচ্চতা (বা গভীরতা) হ'ল মূল নোড (পিতামহীন নোড) থেকে গভীর পাতার নোডের পথের দৈর্ঘ্য। এই উচ্চতা সর্বনিম্ন করার জন্য, গাছটি সর্বাধিক পরিপূর্ণভাবে স্যাচুরেটেড হয় (শেষ স্তর বাদে) অর্থাত্ যদি নির্দিষ্ট স্তরের বাচ্চাদের সাথে নোড থাকে, তবে প্যারেন্ট টায়ারের সমস্ত নোডের অবশ্যই দুটি বাচ্চা থাকতে হবে।

সুতরাং একটি সম্পূর্ণ স্যাচুরেটেড বাইনারি গাছ 4 স্তর আছে 1+ +12+ +122+ +1222 সর্বাধিক নোড এবং এর গভীরতা থাকবে 3। সুতরাং যদি আমাদের কাছে বাইনারি গাছের গভীরতা থাকে তবে আমরা খুব সহজেই সর্বাধিক সংখ্যক নোডগুলি খুঁজে পাই (যা গাছ পুরোপুরি স্যাচুরেটেড হওয়ার পরে ঘটে)। যদি আপনি আপনার বীজগণিত শ্রেণি থেকে প্রত্যাহার করেন এটি কেবল একটি জ্যামিতিক সিরিজ এবং সুতরাং এটির মতো উপস্থাপন করা যেতে পারে:

নোড=1+ +2+ +22+ +23+ ++ +2গভীরতা=Σ=0গভীরতা2=1-2গভীরতা+ +11-2

সুতরাং আসুন পুনরায় সাজানো:

নোড=2গভীরতা+ +1-1,
তারপরে গভীরতার জন্য সমাধান করুন:
নোড+ +1=2গভীরতা+ +1লগ2(নোড+ +1)=লগ2(2গভীরতা+ +1)=গভীরতা+ +1লগ2(নোড+ +1)-1=গভীরতা
এবং আপনার সূত্র আছে। এখন মনে রাখবেন এটি কেবল পূর্ণসংখ্যার মান দেয় যখন প্রতিটি গাছ সম্পূর্ণরূপে পূর্ণ হয় (একটি 'নিখুঁত' বাইনারি ট্রি) তাই আপনি যদি একটি পূর্ণসংখ্যার মান পান তবে চার্জ করতে ভুলবেন না।

4

উচ্চতা সর্বনিম্ন রাখতে, এটি দেখতে সহজ যে আমাদের সম্ভবত শেষটি বাদে সমস্ত স্তর পূরণ করতে হবে। কেন? অন্যথায়, আমরা কেবলমাত্র শেষ স্তরের নোডগুলি উপরের স্তরের খালি স্লটে সরিয়ে নিতে পারি।

এখন, কল্পনা করুন যে আমার কাছে কিছু অনির্দিষ্ট শিম রয়েছে এবং আমি আপনাকে একবারে একটি শিম দিচ্ছি এবং আপনাকে ন্যূনতম উচ্চতার সাথে বাইনারি গাছ বানাতে বলব। আপনি শেষ স্তরটি সম্পূর্ণরূপে পূরণ করেছেন বা কমপক্ষে সর্বশেষ স্তরে একটি শিম পেয়ে যাবেন এমন সময়ের মধ্যে আমি মটরশুটিগুলি চালিয়ে যেতে পারি। আসুন বলছি, আপনি আপনার গাছ উচ্চতা আছে এই সময়ে।

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

20+ +21+ +22+ +23+ ++ +2=2+ +1-1এন
তাই সর্বনিম্ন
=এলজি(এন+ +1)-1
তবে ছাদ প্রয়োগ করুন যেহেতু আমরা কল্পিত মটরশুটি যুক্ত করছি এবং সেগুলি মুছে ফেলছি না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.