একটি স্বয়ং অর্ডারিং বাইনারি ট্রি তৈরি করা হচ্ছে


20

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

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

আমি জানি যে সন্নিবেশটি ঘটছে, এটি পরীক্ষা করে যে বর্তমান নোডের ডেটা বর্তমান নোডের চেয়ে কম বা বেশি, তবে এটি একটি নাল পয়েন্টার খুঁজে না পেয়ে এবং সেখানে নিজেকে inোকানো না হওয়া পর্যন্ত পুনরাবৃত্তভাবে সঠিক দিকে চলে যায়। এবং এটি isোকানোর পরে এটি অগ্রাধিকারটি 1 দ্বারা বৃদ্ধি করে।

template <class Type>
void BinarySearchTree<Type> ::  insert( const Type & x, BinaryNode<Type> * & t )
{
    if( t == NULL )
        t = new BinaryNode<Type>( x, NULL, NULL );
    else if( x < t->element )
        insert( x, t->left );
    else if( t->element < x )
        insert( x, t->right );
    else
        t->priority++;  // Duplicate; do nothing for right now
}

এখন আমাকে নোড সমান হলে কীভাবে গাছটিকে পুনরায় অর্ডার করবেন যাতে বর্তমান নোড (যিনি ইতিমধ্যে বিদ্যমান নোডের সমান) বিদ্যমান নোডটি সন্ধান করে, সেই নোডের অগ্রাধিকার বাড়ায়, তারপরে এটি স্থানান্তরিত করতে হবে রুট একটি নিম্ন অগ্রাধিকার।

আমার মনে হয় আমার এভিএল যুক্তিটি কাজ করবে এবং আমার কোন ধারণা স্থানান্তরিত হবে তখন এটি ডানদিকে বা একক আবর্তন বাম হতে পারে।

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

উত্তর:


12

মাত্র দুটি পয়েন্টার:

  1. আপনি যদি অগ্রাধিকারের সারি এবং বাইনারি অনুসন্ধানের গাছগুলির ধারণাগুলি প্রকৃতপক্ষে একত্র করতে চান তবে এক কাঠামোয় হিপ এবং বিএসটি সংযুক্ত করার বিষয়ে ভাবুন।
  2. স্ব-সংগঠিত তালিকার ধারণা রয়েছে । ধারণাটি হ'ল সাম্প্রতিক অ্যাক্সেস করা উপাদানটিকে (বা দিকে) সামনের দিকে এগিয়ে যাওয়া যাতে একই উপাদানটিতে ভবিষ্যতের অ্যাক্সেসগুলিকে গতিশীল করা যায়, সুতরাং সময়ের সাথে সাথে উপাদান বিতরণকে "শিক্ষণ" করা হয় (নির্দিষ্ট প্রয়োগের উপর নির্ভর করে মানের সাথে)। হতে পারে আপনি এটিকে গাছের সাথে মানিয়ে নিতে পারেন?

স্পোলার: নীচে লিঙ্কগুলি অনুসরণ করুন শুধুমাত্র যদি আপনি নিজের সাথে কিছু করতে না সক্ষম হন।

1. এটি একটি ট্র্যাপ বলা হয় ।
২. স্প্লে গাছগুলি এই ধারণাটি বাস্তবায়িত করে।


2

স্প্লে গাছগুলিতে একবার দেখুন, সেগুলি সত্যই আপনার প্রয়োজন। আপনাকে স্প্লে ফাংশনটি সংশোধন করতে হবে, প্রতিটি অ্যাক্সেসিত নোড সমস্ত জায়গায় গাছের দিকে না নিয়ে, ধীরে ধীরে উপরের দিকে যেতে হবে


2
কেন সে হবে আছে এই পরিবর্তন করতে? হয় কৌশল কার্যকর হয় , এবং অন্যান্য আছে। তদুপরি, এটি একটি হোম ওয়ার্কের প্রশ্ন / যাতে ইঙ্গিতগুলি (নিরবিচ্ছিন্ন) সমাধানগুলিতে পছন্দ করা হয়। শেষ অবধি, এই উত্তরটি যেমন হয় তেমন অপ্রয়োজনীয়; আপনার প্রস্তাবিত সমাধানের দিকে ওপিকে নেতৃত্ব দিতে আপনি এটি পরিবর্তন করতে পারেন?
রাফেল

ঠিক আছে, আপনার জন্য তখন কয়েকটি ইঙ্গিত: ১. স্প্লে ফাংশনটি দেখুন এবং এটি কী করে তা দেখুন, প্রশ্নটি পড়ুন এবং এটি কী বলে তার উপর ভিত্তি করে চিত্রটি বের করুন, আপনি স্প্লে ফাংশনটি পরিবর্তন করেছেন কিনা তা। এবং না, সমস্ত কৌশল কার্যকর হয় না যেহেতু তার অগ্রাধিকারের ভিত্তিতে কিছু নির্দিষ্ট প্রয়োজনীয়তা পূরণ করতে হয় তাই সারাক্ষণ সামনে সরে যাওয়া বৈধ নয় ২।অবিযুক্ত সমাধান? আমার উত্তর এবং অনিবন্ধিত সমাধান কীভাবে? ৩. "অপ্রয়োজনীয় যেমন হয়" ... আমি দেখতে পাই না যে আপনার উত্তর, উফ, দুঃখিত - ইঙ্গিতগুলি চূড়ান্ত এবং আমার "অনিয়ন্ত্রিত সমাধান" টেবিলে লক্ষ করছে
Bober02
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.