পুরানো দিনগুলিতে, ডেটা স্ট্রাকচার ক্লাসে আমরা শিখেছি কীভাবে এভিএল গাছগুলি কাজ করে । আমার এই ক্লাসগুলির একটিতে আমার এটি হত, তবে প্রশিক্ষক বলেছিলেন "আপনি আসলে এটি কখনই ব্যবহার করবেন না" এবং এর পরিবর্তে আমাদের ২-৩ টি গাছ এবং বি * গাছ শিখিয়েছিলেন। সেই দিনগুলি ছিল যখন স্মৃতি শক্ত ছিল এবং প্রক্রিয়াগুলি এককভাবে থ্রেড করা হত। আপনি যখন কোনও একক লিঙ্কযুক্ত তালিকাগুলি ঠিক তেমন কাজ করবে তখন আপনি কোনও প্রবক্তা ব্যবহার করেন নি।
স্কিপ লিস্টটি আজ আরও বেশি সাধারণ এবং আরও উপলভ্য মেমরি এবং একমত হওয়ার সাথে একমত হয়ে উঠেছে (কোনও এভিএল গাছের সাথে সমস্ত কিছুর তুলনায় কোনও স্কিপ তালিকায় লেখক হিসাবে অভিনয় করার সময় আপনাকে খুব বেশি লক করতে হবে না)।
সত্যই, এটি এখন আমার প্রিয় ডেটা কাঠামো যা এটির নীচে কীভাবে কাজ করে এবং কোথায় এটি সুবিধাজনক বা অসুবিধাগুলি ব্যবহার করবে সে সম্পর্কে আমি সহজেই যুক্তি করতে পারি।
আপনাকে স্ক্র্যাচ থেকে একটি লেখার দরকার নেই (যদি না আপনি এটি একটি সাক্ষাত্কারের প্রশ্ন হিসাবে না পেয়ে থাকেন - তবে তারপরে আপনি কেবল একটি এভিএল ট্রি বাস্তবায়নের সম্ভাবনা পাবেন)।
আপনি জাভাতে কোনও বা অন্য কোনও মানচিত্রের প্রয়োগের চেয়ে কেন নির্বাচন করতে চান তা বোঝার দরকার রয়েছে areConcurrentSkipListMap
HashMap
TreeMap
এটি কীভাবে কাজ করে তা বুঝতে, আপনার বাইনারি গাছ কীভাবে কাজ করে তা বুঝতে হবে। অপেক্ষা করুন, আমাকে এটি সংশোধন করা যাক। আপনার ভারসাম্য বাইনারি গাছ কীভাবে কাজ করে তা বুঝতে হবে । বাইনারি গাছের ভারসাম্য না রেখে আপনি এর সন্ধানের সাথে কোনও আসল সুবিধা পাবেন না।
আসুন আমরা এই গাছটি পেয়েছি:
এবং আমরা এটিতে একটি '8' োকান। এখন আমরা পেয়েছি:
এবং এটি ভারসাম্যপূর্ণ নয়। সুতরাং, আমরা গিয়ে কিছু প্রয়োগের মাধ্যমে এটি ভারসাম্য করার যাদু করি ...
এবং আপনি আবার ভারসাম্যযুক্ত গাছ পেয়েছেন। তবে সেটা ছিল অনেক ম্যাজিক আমি হাতটি দুলালাম।
একটি এড়িয়ে যাওয়ার তালিকা নিতে দেয়।
এটি একটি আদর্শ হয়ে ওঠে। কয়েক জন হ'ল তবে এটি সুষম বাইনারি গাছের প্রকৃতিটি দেখায় যা স্কিপলিস্ট আদর্শের কাছাকাছি।
এখন, আমরা সেখানে একটি 6 sertোকাতে চাই। এটি এটি কোনও লিঙ্কযুক্ত তালিকার মতো সন্নিবেশ করছে। যাইহোক, আমরা শীর্ষে শুরু এবং নীচে যেতে। শীর্ষস্থানীয় পয়েন্ট 5। 6> 5 হয়? হ্যাঁ. ঠিক আছে, এখন শীর্ষে পয়েন্টগুলি বন্ধ করুন, সুতরাং আমরা স্ট্যাকটি নীচে চলে যাই (আমরা 5 এর উপরে আছি)। পরেরটি 7. 6> 7 হয়? নাঃ। সুতরাং আমরা একটি স্তর নীচে যান এবং আমরা বেস স্তর হয় তাই আমরা 5 টি ডান 6 সন্নিবেশ করান।
আমরা একটি মুদ্রা ফ্লিপ করি - মাথাগুলি আমরা তৈরি করি, লেজগুলি আমরা থাকি। মুদ্রার উলটা পিঠ। আর কিছু করার দরকার নেই।
এখন 8 প্রবেশ করান। 8> 5? হাঁ। 8> 7? হাঁ। এবং এখন আমরা তীরগুলি অনুসরণ করে এবং চারপাশের স্ট্যাকটি অনুসরণ করার পরে আবার নীচে স্তরে আছি এবং আমরা 8> 11 পরীক্ষা করছি? নাঃ। সুতরাং আমরা 8 টি 7 এর ডানদিকে sertোকান।
আমরা একটি মুদ্রা ফ্লিপ করি - মাথাগুলি আমরা তৈরি করি, লেজগুলি আমরা থাকি। মুদ্রার উলটা পিঠ। আর কিছু করার দরকার নেই।
ভারসাম্যযুক্ত গাছে, গাছটি এখন ভারসাম্যহীন না হওয়ার বিষয়ে আমরা সবাই কাজ করে যাব। তবে এটি গাছ নয় - এটি এড়িয়ে যাওয়ার তালিকা। আমরা আনুমানিক ভারসাম্যযুক্ত গাছ।
এবার একটি 10 প্রবেশ করানো যাক আমি সমস্ত তুলনা এড়াতে চাই।
আমরা একটি মুদ্রা ফ্লিপ করি - মাথাগুলি আমরা তৈরি করি, লেজগুলি আমরা থাকি। সাবধান! এবং এটি আবার ফ্লিপ, হেডস আবার! এটি আবার ফ্লিপ করুন, ঠিক আছে, একটি লেজ আছে। বেস লিঙ্কযুক্ত তালিকার উপরে দুটি স্তর।
এখানে সুবিধাটি হ'ল এখন যদি আমরা একটি 12 sertোকাতে যাচ্ছি তবে আমরা অন্যান্য সমস্ত তুলনা না করে 5 থেকে 10 এড়িয়ে যেতে পারি । এড়িয়ে যাওয়া তালিকা সহ আমরা সেগুলি এড়িয়ে যেতে পারি। এবং আমাদের ভারসাম্যযুক্ত গাছ সম্পর্কে চিন্তা করার দরকার নেই - স্ট্যাকিংয়ের সম্ভাব্য প্রকৃতি আমাদের জন্য তা করে।
কেন এটি এত দরকারী? কারণ 10 সন্নিবেশ করার সময় আমি পুরো কাঠামোর চেয়ে 5 এবং 7 এবং 8 পয়েন্টারে রেকর্ডটি লক করে তা করতে পারি। এবং আমি যখন এটি করছি, পাঠকরা এখনও একটি অসামঞ্জস্যপূর্ণ অবস্থা ছাড়াই এড়িয়ে যেতে পারেন তালিকার তালিকায়। একযোগে ব্যবহারের জন্য, এর দ্রুত লক না করা। নীচের স্তরের উপর পুনরাবৃত্তি করার জন্য, এটি গাছের চেয়ে দ্রুত (বৃক্ষ নেভিগেশনের জন্য বিএফএস এবং ডিএফএস অ্যালগরিদমগুলির আনন্দ - আপনাকে সেগুলি সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই)।
আপনি এটি সম্মুখীন হবে? আপনি সম্ভবত এটি জায়গাগুলিতে ব্যবহারে দেখতে পাবেন। এবং তারপর কেন জানো লেখক বেছে নেওয়া হয়েছে করব যে বরং একটি তুলনায় বাস্তবায়ন TreeMap
বা HashMap
কাঠামো জন্য।
এর বেশিরভাগ আমার ব্লগ পোস্ট থেকে নেওয়া হয়েছে: এড়িয়ে যান তালিকা