আমি মনে করি বি + গাছগুলি মূল সাধারণ স্মৃতিতে এমনকি সাধারণ-উদ্দেশ্যে আদেশযুক্ত ধারক ডেটা কাঠামো। এমনকি ভার্চুয়াল মেমরি কোনও সমস্যা না হলেও, ক্যাশে-বন্ধুত্ব প্রায়শই হয় এবং বি + গাছগুলি ক্রমানুসারে অ্যাক্সেসের জন্য বিশেষভাবে ভাল - একটি লিঙ্কযুক্ত তালিকার মতো একই অ্যাসিম্পোটিক পারফরম্যান্স, তবে ক্যাশে-বন্ধুত্বের সাথে একটি সাধারণ অ্যারের কাছাকাছি। এই সমস্ত এবং ও (লগ এন) অনুসন্ধান করুন, সন্নিবেশ করুন এবং মুছুন।
বি + গাছগুলির সমস্যা আছে, যেমন - নোডের মধ্যে আইটেমগুলি ঘুরে যখন আপনি সন্নিবেশ / মুছুন, আইটেমগুলিতে অকার্যকর পয়েন্টার করুন। আমার কাছে একটি ধারক লাইব্রেরি রয়েছে যা "কার্সার রক্ষণাবেক্ষণ" করে - কার্সারগুলি লিফ নোডের সাথে তাদের সংযুক্ত করে তারা বর্তমানে লিঙ্কযুক্ত তালিকায় উল্লেখ করেছে, যাতে সেগুলি স্বয়ংক্রিয়ভাবে স্থির বা অবৈধ হতে পারে। যেহেতু এক বা দু'টি কার্সারের সাথে খুব কমই দেখা যায় তাই এটি ভালভাবে কাজ করে - তবে এটি সমস্ত অতিরিক্ত একই কাজ।
আরেকটি বিষয় হ'ল বি + ট্রি মূলত কেবল এটি। আমার ধারণা আপনি নন-পাতাগুলি নোডগুলি আপনার প্রয়োজন কিনা বা না তার উপর নির্ভর করে পুনরায় তৈরি করতে পারেন তবে বাইনারি গাছের নোডের সাহায্যে আপনি আরও অনেক নমনীয়তা পান। একটি বাইনারি ট্রি একটি লিঙ্কযুক্ত তালিকায় রূপান্তরিত হতে পারে এবং নোডগুলি অনুলিপি না করে ফিরে যেতে পারে - আপনি কেবল পয়েন্টার পরিবর্তন করেন তবে মনে রাখবেন আপনি এখন এটি একটি আলাদা ডেটা কাঠামো হিসাবে বিবেচনা করছেন। অন্যান্য জিনিসের মধ্যে, এর অর্থ হল আপনি গাছগুলি মার্জ করার পক্ষে মোটামুটি সহজ ও (এন) পান - উভয় গাছকে তালিকায় রূপান্তর করুন, সেগুলি মার্জ করুন এবং তারপরে আবার কোনও গাছে রূপান্তর করুন।
তবুও অন্য জিনিস মেমরি বরাদ্দ এবং বিনামূল্যে। একটি বাইনারি ট্রিতে, এটি অ্যালগরিদম থেকে আলাদা করা যায় - ব্যবহারকারী একটি নোড তৈরি করতে পারে তবে সন্নিবেশ অ্যালগরিদম কল করতে পারেন, এবং মুছে ফেলা নোডগুলি বের করতে পারে (গাছ থেকে এগুলি বিচ্ছিন্ন করে তবে মেমরিটি মুক্ত করে না)। একটি বি-ট্রি বা বি + ট্রিতে, এটি স্পষ্টতই কাজ করে না - ডেটা মাল্টি-আইটেম নোডে বাস করবে। সন্নিবেশ পদ্ধতিগুলি লিখুন যা নোডগুলি সংশোধন না করে অপারেশন "পরিকল্পনা" করে না জানা অবধি কতগুলি নতুন নোডের প্রয়োজন হয় এবং সেগুলি বরাদ্দ করা যায় তা চ্যালেঞ্জ।
লাল কালো বনাম এভিএল? আমি নিশ্চিত না যে এটি কোনও বড় পার্থক্য করে। ডাবল-লিঙ্কযুক্ত তালিকাগুলি, সাধারণ বাইনারি গাছ, স্প্লে গাছ, লাল-কালো গাছ এবং ট্রাপগুলি সহ বিভিন্ন রূপান্তর সহ আমার নিজস্ব লাইব্রেরিতে নোডগুলি পরিচালনা করার জন্য একটি নীতি ভিত্তিক "সরঞ্জাম" শ্রেণি রয়েছে। এই পদ্ধতিগুলির কয়েকটি শুধুমাত্র তখনই প্রয়োগ করা হয়েছিল কারণ আমি এক সময় বা অন্য সময়ে বিরক্ত ছিলাম। আমি নিশ্চিত না যে আমি এমনকি ট্রেপ পদ্ধতিও পরীক্ষা করেছি। আমি এভিএলের চেয়ে লাল-কালো গাছগুলি বেছে নেওয়ার কারণ হ'ল আমি ব্যক্তিগতভাবে অ্যালগরিদমগুলি আরও ভালভাবে বুঝতে পারি - যার অর্থ এই নয় যে এগুলি সহজ সরল, এটি ইতিহাসের একটি মাত্রা যা আমি তাদের সাথে আরও পরিচিত।
একটি শেষ কথা - আমি কেবলমাত্র আমার বি + ট্রি পাত্রে পরীক্ষামূলকভাবে বিকাশ করেছি। এটি সেই পরীক্ষাগুলির মধ্যে একটি যা সত্যই কখনও শেষ হয় নি, তবে এটি এমন নয় যা আমি অন্যকে পুনরাবৃত্তি করতে উত্সাহিত করি। আপনার যা যা দরকার তা যদি একটি অর্ডারযুক্ত ধারক হয় তবে সর্বোত্তম উত্তর হ'ল আপনার বিদ্যমান লাইব্রেরিটি সরবরাহ করে এমন একটি ব্যবহার করা - যেমন সি ++ তে স্ট্যান্ড :: ম্যাপ ইত্যাদি। আমার গ্রন্থাগারটি বছরের পর বছর ধরে বিকশিত হয়েছিল, এটি স্থিতিশীল হতে বেশ কিছুটা সময় নিয়েছিল এবং আমি সম্প্রতি তুলনামূলকভাবে আবিষ্কার করেছি এটি প্রযুক্তিগতভাবে অ-বহনযোগ্য (কিছুটা অপরিজ্ঞাত আচরণ ডাব্লুআরটি অফসেটফের উপর নির্ভরশীল)।