ট্র্যাক
/
Pharo
Pharo
/
অনুশীলনী
/
বাইনারি সার্চ ট্রি
বাইনারি সার্চ ট্রি

বাইনারি সার্চ ট্রি

মধ্যম

নির্দেশনা

বাইনারি ট্রি-তে সংখ্যা ইনসার্ট করুন ও খুঁজুন।

সর্ট করা ডেটা উপস্থাপন করতে হলে অ্যারে ভালো কোনো ডেটা স্ট্রাকচার নয়।

ধরা যাক আমাদের কাছে [1, 3, 4, 5] অ্যারেটি আছে, আর আমরা এতে 2 যোগ করলাম, ফলে সেটি হয়ে গেল [1, 3, 4, 5, 2]। এখন আমাদের আবার পুরো অ্যারেটি সর্ট করতে হবে! এখানে আমরা একটি উন্নতি করতে পারি: বুঝতে পারি যে নতুন আইটেমটির জন্য আমাদের কেবল [1, nil, 3, 4, 5] জায়গা বানাতে হবে, তারপর যে জায়গাটুকু বানালাম সেখানে আইটেমটি বসিয়ে দিলেই হয়। কিন্তু এতেও আমাদের অনেক এলিমেন্টকে এক ঘর নিচে সরাতে হয়।

তবে বাইনারি সার্চ ট্রি সর্ট করা ডেটার ওপর অনেক বেশি দক্ষতার সাথে কাজ করতে পারে।

একটি বাইনারি সার্চ ট্রি পরস্পর সংযুক্ত একগুচ্ছ নোড নিয়ে গঠিত। প্রতিটি নোডে একটি ডেটা (যেমন সংখ্যা 3), left নামের একটি ভ্যারিয়েবল এবং right নামের একটি ভ্যারিয়েবল থাকে। left ও right ভ্যারিয়েবল nil বা অন্য নোডের দিকে ইশারা করে। যেহেতু ওই অন্য নোডগুলোর নিচেও আবার অন্য নোড থাকে, তাই আমরা বলি left ও right ভ্যারিয়েবল সাবট্রির দিকে ইশারা করছে। বাম সাবট্রির সব ডেটা বর্তমান নোডের ডেটার চেয়ে ছোট বা সমান, আর ডান সাবট্রির সব ডেটা বর্তমান নোডের ডেটার চেয়ে বড়।

উদাহরণস্বরূপ, যদি আমাদের 4 ডেটা-যুক্ত একটি নোড থাকত, আর আমরা 2 ডেটা যোগ করতাম, তাহলে আমাদের ট্রিটি দেখতে হতো এমন:

রুট নোড 4 এবং একটি মাত্র চাইল্ড নোড 2 সম্বলিত একটি গ্রাফ।

      4
     /
    2

এরপর যদি আমরা 6 যোগ করতাম, তাহলে দেখতে হতো এমন:

রুট নোড 4 এবং দুটি চাইল্ড নোড 2 ও 6 সম্বলিত একটি গ্রাফ।

      4
     / \
    2   6

এরপর যদি আমরা 3 যোগ করতাম, তাহলে দেখতে হতো এমন

রুট নোড 4, দুটি চাইল্ড নোড 2 ও 6 এবং একটি গ্র্যান্ডচাইল্ড নোড 3 সম্বলিত একটি গ্রাফ।

       4
     /   \
    2     6
     \
      3

আর এরপর যদি আমরা 1, 5 আর 7 যোগ করতাম, তাহলে দেখতে হতো এমন

রুট নোড 4, দুটি চাইল্ড নোড 2 ও 6 এবং চারটি গ্র্যান্ডচাইল্ড নোড 1, 3, 5 ও 7 সম্বলিত একটি গ্রাফ।

          4
        /   \
       /     \
      2       6
     / \     / \
    1   3   5   7

কৃতজ্ঞতা

ছবিগুলো habere-et-dispertire তৈরি করেছেন PGF/TikZ ব্যবহার করে, যা Till Tantau-র তৈরি।

নোট

আপনি একই ক্লাসের এমন অবজেক্ট ব্যবহার করতে চাইতে পারেন, যেগুলো ট্রি ও সাবট্রি (নোড) প্রকাশ করে। নোড যোগ করা ও সাজানোর জন্য রিকার্সন মেথড ব্যবহার করার চেষ্টা করুন।


সূত্র

Josh Cheek
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Pharo Exercism

বাইনারি সার্চ ট্রি শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Pharo ট্র্যাকের 50টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।