গড় গাছের উপরে লাল কালো গাছ


116

এভিএল এবং লাল কালো গাছগুলি নোডগুলিতে লাল এবং কালো রঙ বাদে উভয় স্ব-ভারসাম্য। এভিএল গাছের পরিবর্তে লাল কালো গাছ বেছে নেওয়ার মূল কারণ কী? লাল কালো গাছের প্রয়োগ কী?



4
অন্যদিকে, মরিচা বিকাশকারীরা তাদের মানকৃত আদেশযুক্ত মানচিত্রের জন্য এই দুটির পরিবর্তে একটি বি-ট্রি ব্যবহার করতে পছন্দ করেছেন।
টম অ্যান্ডারসন

উত্তর:


129

এভিএল গাছের পরিবর্তে লাল কালো গাছ বেছে নেওয়ার মূল কারণ কী?

উভয় লাল-কালো গাছ এবং AVL গাছ সবচেয়ে বেশি ব্যবহৃত হয় সুষম বাইনারি অনুসন্ধান গাছ এবং তারা সন্নিবেশ-বড় অক্ষরজনিত সমস্যার এবং চেহারা-আপ সমর্থন নিশ্চিত মধ্যে O(logN) time। তবে, উভয়ের মধ্যে তুলনার নিম্নলিখিত বিষয়গুলি রয়েছে:

  • এভিএল গাছগুলি আরও কঠোরভাবে ভারসাম্যযুক্ত এবং অতএব দ্রুততর চেহারা দেয়। এইভাবে দেখার জন্য নিবিড় কাজের জন্য একটি এভিএল ট্রি ব্যবহার করুন।
  • নিবিড় কাজ সন্নিবেশ করার জন্য, একটি লাল-কালো গাছ ব্যবহার করুন।
  • এভিএল গাছ প্রতিটি নোডে ভারসাম্য ফ্যাক্টর সংরক্ষণ করে। এটি O(N)অতিরিক্ত স্থান নেয় । তবে, যদি আমরা জানি যে গাছটিতে কীগুলি keysোকানো হবে তা সর্বদা শূন্যের চেয়ে বড় হবে, আমরা একটি লাল-কালো গাছের রঙের তথ্য সঞ্চয় করতে কীগুলির সাইন বিটটি ব্যবহার করতে পারি। সুতরাং, এই জাতীয় ক্ষেত্রে লাল-কালো গাছ কোনও অতিরিক্ত জায়গা নেয় না।

লাল কালো গাছের প্রয়োগ কী?

লাল-কালো গাছগুলি আরও সাধারণ উদ্দেশ্য। এগুলি অ্যাড, রিমুভ এবং চেহারাতে তুলনামূলকভাবে ভাল করে তবে এভিএল গাছগুলিতে ধীর অ্যাড / রিমুভের ব্যয়ে দ্রুত চেহারা থাকে look লাল-কালো গাছ নিম্নলিখিত ব্যবহার করা হয়:

  • জাভা: java.util.TreeMap,java.util.TreeSet
  • সি ++ এসটিএল (বেশিরভাগ প্রয়োগে): মানচিত্র, মাল্টিম্যাপ, মাল্টিসেট
  • লিনাক্স কার্নেল: সম্পূর্ণ সুষ্ঠু শিডিয়ুলার, লিনাক্স / আরবিটি্রি

43
In general, the rotations for an AVL tree are harder to implement and debug than that for a Red-Black tree.সত্য না.
জিংগুও ইয়াও

9
পেডেন্টিক হতে, সি ++ স্ট্যান্ডার্ড আদেশ দেয় না std:: mapএবং বন্ধুরা কোনও নির্দিষ্ট কাঠামো ব্যবহার করে। এটি বাস্তবায়নের বাকী, যদিও libstdc ++ এবং ডিনকামওয়্যার কমপক্ষে লাল-কালো গাছ ব্যবহার করে এবং মনে হয় আপনি বাস্তবে ঠিকই আছেন।
এমবোজি

27
একটি এভিএল গাছের প্রতিটি নোডে সঞ্চিত ভারসাম্য ফ্যাক্টর দুটি বিট (-1 / 0 / +1)। একটি লাল-কালো গাছ প্রতিটি নোডে এক বিট রঙের তথ্য সঞ্চয় করে। সুতরাং মোট দুটি গাছ অতিরিক্ত তথ্যের জন্য ও (এন) মেমরির প্রয়োজন।
সেপ্পো এনার্ভি

7
"অন্তর্ভুক্ত নিবিড় কাজগুলির জন্য, একটি লাল-কালো গাছ ব্যবহার করুন" " কেন? এভিএল ট্রি সন্নিবেশ সবচেয়ে খারাপ সময়ে কেবল একটি ঘূর্ণন নেয়, যখন লাল কালো গাছ দুটি নিতে পারে।
ড্যানিয়েল

4
বেন ফাফফের বিএসটি কার্য সম্পাদনের 2003 বিশ্লেষণ অনুযায়ী এটি আপডেট করা উচিত - এভিএল গাছগুলি আরও সাধারণ উদ্দেশ্য এবং আরও ভাল সম্পাদন করে। জাভা, সি ++ এবং লিনাক্স কার্নেলটির ধীর প্রয়োগের জন্য সঠিক Exতিহাসিক কারণগুলি খুঁজে বের করা আকর্ষণীয় হবে।
ডেভিড ম্যাকমনামন

16

এই নিবন্ধটি পড়ার চেষ্টা করুন

এটি পার্থক্য, সাদৃশ্য, কর্মক্ষমতা ইত্যাদি সম্পর্কে কিছু ভাল অন্তর্দৃষ্টি সরবরাহ করে

নিবন্ধের একটি উদ্ধৃতি এখানে:

আরবি-ট্রি হ'ল এভিএল গাছ, স্ব-ভারসাম্যহীন। উভয়ই ও (লগ এন) চেহারা এবং সন্নিবেশ সম্পাদন সরবরাহ করে।

পার্থক্যটি হ'ল আরবি-ট্রিগুলি inোকানো অপারেশন প্রতি ও (1) আবর্তনের গ্যারান্টি দেয়। এটিই বাস্তব বাস্তবায়নে কার্য সম্পাদন ব্যয় করে costs

সরলীকৃত, আরবি-ট্রিগুলি গতিশীল নোড স্ট্রাকচারের ওভারহেড বহন না করে ধারণামূলকভাবে 2-3 গাছ হওয়া থেকে এই সুবিধা অর্জন করে। শারীরিকভাবে আরবি-ট্রিগুলি বাইনারি গাছ হিসাবে প্রয়োগ করা হয়, লাল / কালো-পতাকাগুলি 2-3 টি আচরণ অনুকরণ করে

আমার নিজের বোঝা যতদূর যায়, পারফরম্যান্সের দিক থেকে AVL গাছ এবং আরবি গাছ খুব বেশি দূরে নয়। একটি আরবি ট্রি কেবল একটি বি-গাছের বৈকল্পিক এবং ভারসাম্য একটি এভিএল গাছের চেয়ে আলাদাভাবে প্রয়োগ করা হয়।


4
আফিক, একটি এভিএল গাছে সন্নিবেশ প্রতি ও (1) ঘূর্ণন রয়েছে। আরবি-ট্রি এবং AVL- এর জন্য একটি সন্নিবেশে 1 বা 0 টি ঘূর্ণন থাকতে পারে। যদি ঘূর্ণন ঘটে, তবে অ্যালগরিদমগুলি বন্ধ হয়ে যায়। যদি এটি না ঘটে, সাধারণত, অ্যালগরিদমগুলি নীচের থেকে গাছের গোড়ায় নোডগুলি চেক / পুনরায় রঙ করা চালিয়ে যায়। সুতরাং, কখনও কখনও ঘূর্ণন O (1) আরও ভাল হতে পারে কারণ এটি বাকী আইটেমগুলি স্ক্যান করে O (লগ (এন)) সরিয়ে দেয়। যেহেতু এভিএল গাছ, গড়পড়তাভাবে আরও ঘূর্ণায়মান হয়, এভিএল গাছটি সাধারণত আরবি-ট্রি 2 লগ (এন) এর চেয়ে ভাল ব্যালেন্স ~ 1.44 লগ (এন) থাকে।
সের্গেই শানদার

5

পারফরম্যান্সের পার্থক্যের বিষয়ে আমাদের বোঝার বছরগুলিতে উন্নতি হয়েছে এবং এখন এভিএল-এর উপরে লাল-কালো গাছ ব্যবহার করার মূল কারণটি সিএলআরএসের আওতাভুক্ত না হওয়ায় সম্ভবত কিছুটা কম সাধারণ হওয়ার কারণে এটি ভাল এভিএল বাস্তবায়নের অ্যাক্সেস না পাবে।

উভয় গাছই এখন র‌্যাঙ্ক-ভারসাম্য গাছের ফর্ম হিসাবে বিবেচিত হয় তবে লাল-কালো গাছগুলি বাস্তব বিশ্বের পরীক্ষায় প্রায় 20% দ্বারা ধারাবাহিকভাবে ধীর হয় । বা অনুক্রমিক ডেটা is োকানো হয় এমনকি 30-40% ধীর ।

সুতরাং লোকে লাল-কালো গাছের পড়াশোনা করেছেন কিন্তু এভিএল গাছ নয়, লাল-কালো গাছ বেছে নেওয়ার প্রবণতা রয়েছে। লাল-কালো গাছ প্রাথমিক ব্যবহারসমূহ উপর বিস্তারিত করছে তাদের জন্য উইকিপিডিয়া এন্ট্রি


4
হাস্যকর! আমার পড়াতে, লিবাভ্যাল আর্টিকেলটি মনে হয় যে এভিএল এবং আরবি একে অপরের সাথে মাথা নিচু করে, এবং উভয়ই সাধারণভাবে অন্যগুলির তুলনায় খুব স্পষ্টভাবে ভাল নয় (কোনটি কাজের চাপের উপর নির্ভর করে)। আমি কোথাও দাবি দেখতে পাচ্ছি না যে AVL সামগ্রিকভাবে প্রায় 20% দ্রুত।
স্টেফান

4

এখানে অন্যান্য উত্তরগুলিতে আরবি এবং এভিএল গাছগুলির উপকারিতা ও সংক্ষিপ্তসারগুলি ভালভাবে সংযুক্ত করা হয়েছে তবে আমি এই পার্থক্যটি বিশেষ আকর্ষণীয় বলে মনে করেছি:

এভিএল গাছগুলি ধ্রুবক ইমোরাইজড আপডেট ব্যয়কে সমর্থন করে না [তবে লাল-কালো গাছগুলি]

সূত্র: মেহলহর্ন অ্যান্ড স্যান্ডারস (২০০৮) (বিভাগ 7.৪)

সুতরাং, আরবি এবং এভিএল উভয় গাছই ও (লগ (এন)) সুনির্দিষ্টভাবে দেখার জন্য, সন্নিবেশ করানোর জন্য এবং মুছে ফেলার জন্য, কোনও নোড সন্নিবেশ করানোর বা মুছার পরে এভিএল / আরবি সম্পত্তি পুনরুদ্ধার করার জন্য ও (1) মোড়িত সময়ে করা যেতে পারে লাল-কালো গাছ


4
আমি বিশ্বাস করি, এভিএল ট্রি সন্নিবেশটির একই / অনুরূপ আনুষাঙ্গিক ব্যয় রয়েছে তবে আরও ভাল ভারসাম্য গাছ (1.44log (এন) বনাম 2 লগ (এন)) উত্পাদন করে। একই সময়ে, এভিএল ট্রিতে মুছে ফেলার জন্য আরও ঘূর্ণনের প্রয়োজন হতে পারে। এই প্রোগ্রামটিতে, এই WAVL মধ্যে সম্বোধন করা হয়েছে en.wikipedia.org/wiki/WAVL_tree
সের্গেই Shandar

0

প্রোগ্রামাররা সাধারণত গতিশীলভাবে মেমরি বরাদ্দ করতে পছন্দ করে না। গড় গাছের সমস্যাটি হ'ল "এন" উপাদানগুলির জন্য আপনার গাছের উচ্চতা সংরক্ষণের জন্য কমপক্ষে লগ 2 (লগ 2 (এন)) ... (উচ্চতা-> লগ 2 (এন)) বিট প্রয়োজন! সুতরাং যখন আপনি প্রচুর ডেটা পরিচালনা করছেন আপনি প্রতিটি নোডে উচ্চতা সংরক্ষণের জন্য কত বিট বরাদ্দ করবেন তা নিশ্চিত হতে পারবেন না।

উদাহরণস্বরূপ যদি আপনি উচ্চতা সঞ্চয় করার জন্য 4 বাইট ব্যবহার করেন (32 বিট)। সর্বাধিক উচ্চতা হতে পারে: 2 hence 32 এবং সেই কারণে আপনি গাছের মধ্যে থাকা উপাদানগুলির সর্বাধিক সংখ্যা 2 ^ (2 ^ 32) - (খুব বড় বলে মনে হয় তবে ডেটার যুগে কোনও কিছুই খুব বেশি বড় বলে আমার ধারণা নেই)। আর তাই আপনি যদি এই সীমাটি ছুঁড়ে ফেলে থাকেন তবে আপনাকে উচ্চতা সংরক্ষণের জন্য গতিশীলভাবে আরও স্থান বরাদ্দ করতে হবে।

এটি আমার বিশ্ববিদ্যালয়ের একজন অধ্যাপকের প্রস্তাবিত উত্তর যা আমার কাছে যুক্তিসঙ্গত বলে মনে হয়েছিল! আশা করি আমি বুদ্ধি করব।

সম্পাদনাগুলি: রেড ব্ল্যাক ট্রিগুলির তুলনায় এভিএল গাছগুলি বেশি ভারসাম্যযুক্ত তবে এগুলি সন্নিবেশ এবং মোছার সময় আরও ঘূর্ণন ঘটাতে পারে। সুতরাং যদি আপনার অ্যাপ্লিকেশনটিতে অনেক ঘন ঘন সন্নিবেশ এবং মুছে ফেলা জড়িত থাকে, তবে লাল কালো গাছগুলি পছন্দ করা উচিত। এবং যদি সন্নিবেশ এবং মুছে ফেলা কম ঘন ঘন হয় এবং অনুসন্ধান আরও ঘন ঘন অপারেশন হয় তবে রেড ব্ল্যাক ট্রিের তুলনায় এভিএল গাছটি পছন্দ করা উচিত। - উত্স GEEKSFORGEEKS.ORG


4
আমি বলব এটি আকর্ষণীয় তবে অবৈধ। যদিও এটি সত্য যে সবচেয়ে কমপ্যাক্ট ক্ষেত্রে উচ্চতার জন্য বরাদ্দ দেওয়ার জন্য সর্বাধিক দক্ষ সংখ্যক বিট নির্বাচন করা একটি কঠিন কাজ হবে, অনুশীলনে কোনও বাম-ওভার স্পেস যা বাইটের চেয়ে কম হবে তা অবশ্যই অব্যবহৃত হবে, এবং যে কোনও কিছুই অবশিষ্ট থাকবে একটি 4 বা 8 বাইট স্পেস প্রায় অব্যবহৃত হবে। অল্প পরিমাণ জায়গার পুনরুদ্ধারের সুবিধার জন্য মেমরিটিকে আনইলাইনড বরাদ্দ করা হয় না greatly বাচ্চাদের নির্দেশক এবং মান 24 বাইট দখল করে; আরও 8 টির কোনও ব্যবহারিক ব্যয় হওয়ার সম্ভাবনা কম।
ম্যাম্বসকেটস

4
you need need atleast log2(log2(n))...(height->log2(n)) bits to store the height of [an AVL] treeএটি প্রয়োগের জন্য আমার কোনও এভিএল-ট্রিতে কোনও নোডের উচ্চতা প্রয়োজন নেই। আপনি প্রতিটি নোডের জন্য এক বিট অতিরিক্ত তথ্য ( আমি দ্য গ্রেটেষ্ট (সর্বোচ্চ উপ-গাছের সহোদর))); এভি এবং এল দ্বারা উপস্থাপিত হিসাবে দুটি অতিরিক্ত বিট (শিশু বাম এবং ডানদিকের চেয়েও বেশি) থাকা আরও বেশি সুবিধাজনক পাশাপাশি
গ্রেইবার্ড

4
2 ^ (2 ^ 32) উপাদানগুলি হ'ল ... যেমন আপনি সমগ্র মহাবিশ্বের প্রতিটি অণু এবং সেই সমস্ত অণুগুলির প্রতিটি জোড়া এবং প্রতিটি সম্ভাব্য ট্রিপল সংরক্ষণ করতে পারেন এবং এখনও এমনকি এমনকি দূরবর্তী কাছাকাছি আসতেও শুরু করেন না like একশ কুইন্টিলিয়ন দিয়ে বিভক্ত সেই সংখ্যার কিউবেড মূলের ক্ষুদ্র শতাংশের ক্ষুদ্র অংশের মধ্যে।
সেমিকোলন

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

4
2 ^ (2 ^ 32) অবজেক্টগুলি হাস্যকরভাবে, উন্মাদভাবে, আমরা এখনই কল্পনা করতে পারি এমন কোনও কম্পিউটারের চেয়ে একেবারে বেশি ever আমরা 2 ^ 40 এর মতো কিছুতে আছি। আপনি আবার গণিত পরীক্ষা করুন।
স্টিফান রেইচ

-1

এভিএল গাছের পুনরায় ভারসাম্য নিচের সম্পত্তিটি পূরণ করতে হবে। (উইকি রেফারেন্স - এভিএল ট্রি )

একটি এভিএল গাছে, যে কোনও নোডের দুটি সন্তানের সাবট্রির উচ্চতা সবচেয়ে বেশি এক দ্বারা পৃথক হয়; যদি কোনও সময়ে তারা একের বেশি হয়ে থাকে তবে এই সম্পত্তি পুনরুদ্ধার করতে পুনরায় ভারসাম্য সম্পন্ন করা হবে।

সুতরাং এটি বোঝায় যে এভিএল গাছের সামগ্রিক উচ্চতা পাগল হতে পারে না অর্থাৎ ভিভিএলগুলি এভিএল গাছগুলির সাথে আরও ভাল হতে চলেছে। এবং যেহেতু উচ্চতা পাগল না হওয়ার জন্য অতিরিক্ত ক্রিয়াকলাপগুলি (আবর্তন) করা উচিত, তাই বৃক্ষ পরিবর্তনের কাজটি কিছুটা ব্যয়বহুল হতে পারে।


এটি অন্যান্য অনেক জায়গাতেই উল্লেখ করা হয়েছে, তবে এই উত্তরটি খুব ভাল না হওয়ার কারণটি হ'ল AVL গাছ এবং আরবি গাছগুলি কার্যকরভাবে অত্যন্ত অনুরূপ প্রতিবন্ধকতা বজায় রাখে - আরবি গাছগুলি প্রয়োজনীয় উচ্চতার চেয়ে ২.০ গুণ বেশি হবে না, এবং এভিএল গাছগুলির জন্য যে উপাদানটি হবে প্রায় 1.44। ফলস্বরূপ এভিএল গাছগুলি কিছুটা ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘুরিয়ে দেয় এটা ব্যয়বহুল নয়।
মম্বলেসকেটস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.