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