পূর্ববর্তী উত্তরগুলি কেবলমাত্র গাছের বিকল্পগুলিকে সম্বোধন করে এবং লাল কালো সম্ভবত historicalতিহাসিক কারণে থাকে।
কেন একটি হ্যাশ টেবিল না?
কোনও প্রকারের <
গাছের চাবি হিসাবে কেবল অপারেটর (তুলনা) ব্যবহার করা প্রয়োজন। তবে, হ্যাশ টেবিলগুলির জন্য প্রতিটি কী ধরণের একটি hash
কার্যকারিতা সংজ্ঞায়িত করা প্রয়োজন। জেনেরিক প্রোগ্রামিংয়ের জন্য প্রকারের প্রয়োজনীয়তাগুলিকে সর্বনিম্ন রাখা খুব গুরুত্বপূর্ণ, তাই আপনি এটিকে বিভিন্ন ধরণের এবং অ্যালগরিদম দিয়ে ব্যবহার করতে পারেন।
একটি ভাল হ্যাশ টেবিল ডিজাইনের জন্য এটি ব্যবহার করা হবে এমন প্রসঙ্গের অন্তরঙ্গ জ্ঞান প্রয়োজন। এটি কি খোলা ঠিকানা, বা লিঙ্কযুক্ত চেইন ব্যবহার করা উচিত? আকার পরিবর্তন করার আগে এর কোন স্তরের লোড গ্রহণ করা উচিত? এটির জন্য কোনও ব্যয়বহুল হ্যাশ ব্যবহার করা উচিত যা সংঘর্ষগুলি এড়ায়, বা একটি রুক্ষ এবং দ্রুত?
যেহেতু আপনার অ্যাপ্লিকেশনটির জন্য সেরা পছন্দটি এসটিএল অনুমান করতে পারে না, তাই ডিফল্টটিকে আরও নমনীয় হওয়া দরকার। গাছগুলি "কেবলমাত্র কাজ করে" এবং সুন্দরভাবে স্কেল করে।
(সি ++ 11 অ্যাড হ্যাশ টেবিল করেনি unordered_map
। আপনি থেকে দেখতে পারেন ডকুমেন্টেশন এই অপশনের অনেক কনফিগার করতে নীতি সেট প্রয়োজন।)
অন্যান্য গাছ সম্পর্কে কি?
লাল কালো গাছগুলি দ্রুত সন্ধান করে এবং বিএসটিগুলির বিপরীতে স্ব-ভারসাম্য বজায় রাখে। অন্য ব্যবহারকারী স্ব-ব্যালেন্সিং এভিএল গাছের তুলনায় এর সুবিধাগুলি নির্দেশ করেছেন।
আলেকজান্ডার স্টেপানোভ (এসটিএল এর স্রষ্টা) বলেছিলেন যে তিনি যদি std::map
আবার লিখে থাকেন তবে তিনি লাল-কালো গাছের পরিবর্তে একটি বি * ট্রি ব্যবহার করবেন, কারণ এটি আধুনিক স্মৃতি ক্যাশের জন্য আরও বন্ধুত্বপূর্ণ।
তারপরে সবচেয়ে বড় একটি পরিবর্তন হ'ল ক্যাশে বৃদ্ধি। ক্যাশে মিস করা খুব ব্যয়বহুল, সুতরাং রেফারেন্সের স্থানীয়তা এখন অনেক বেশি গুরুত্বপূর্ণ। নোড-ভিত্তিক ডেটা স্ট্রাকচারগুলি, যার রেফারেন্সের লোকাল কম। আমি যদি আজ এসটিএল ডিজাইন করতাম তবে আমার কাছে ধারকগুলির আলাদা সেট থাকত। উদাহরণস্বরূপ, কোনও মিশ্রণকারী ধারক কার্যকর করার জন্য একটি লাল-কালো গাছের চেয়ে ইন-মেমরি বি * -ট্রি একটি অনেক ভাল পছন্দ better - আলেকজান্ডার স্টেপানভ
মানচিত্রের সবসময় গাছ ব্যবহার করা উচিত?
আর একটি সম্ভাব্য মানচিত্রের প্রয়োগটি হবে বাছাই করা ভেক্টর (সন্নিবেশ সাজানোর) এবং বাইনারি অনুসন্ধান। এটি এমন পাত্রে ভাল কাজ করবে যা প্রায়শই সংশোধিত হয় না তবে প্রায়শই জিজ্ঞাসা করা হয়। আমি প্রায়শই সি তে এটি করি qsort
এবং bsearch
অন্তর্নির্মিত।
আমার কি এমনকি মানচিত্র ব্যবহার করা দরকার?
ক্যাশে বিবেচনার মানে এটা খুব কমই ব্যবহার ইন্দ্রিয় তোলে std::list
বা std::deque
ওভার std:vector
এমনকি আমরা স্কুলে শেখানো হয় সেই পরিস্থিতিতে (যেমন তালিকার মধ্য থেকে একটি উপাদান মুছে ফেলার হিসাবে) জন্য। একই যুক্তি প্রয়োগ করা, লুপের জন্য রৈখিক অনুসন্ধানের জন্য একটি তালিকা ব্যবহার করা কয়েকটি তালিকার জন্য একটি মানচিত্র তৈরির চেয়ে প্রায়শই বেশি দক্ষ এবং ক্লিনার।
অবশ্যই একটি পাঠযোগ্য পাত্রে নির্বাচন করা কার্য সম্পাদনের চেয়ে সাধারণত গুরুত্বপূর্ণ।