হ্যাশ টেবিলগুলির উপর বাইনারি অনুসন্ধান গাছগুলির সুবিধা


101

হ্যাশ টেবিলের উপর বাইনারি অনুসন্ধান গাছগুলির সুবিধা কী কী?

হ্যাশ টেবিলগুলি থেটা (1) সময়ে যে কোনও উপাদান সন্ধান করতে পারে এবং এটি কোনও উপাদান যুক্ত করা ঠিক তত সহজ .... তবে আমি অন্যান্য উপায়ের সুবিধার বিষয়ে নিশ্চিত নই।


হ্যাশ টেবিলগুলির জন্য () সন্নিবেশ () সরিয়ে () সরিয়ে ফেলার চলমান সময়গুলি কী? থেটা (1) থেটা (1) এবং থেটা (1) ঠিক?
অনুগত

8
প্রায় সবসময়, হ্যাঁ যদি আপনি প্রচুর সংঘর্ষের মধ্যে পড়ে থাকেন তবে সেই সময়গুলি ও (এন) পর্যন্ত বাড়তে পারে।
খ্রিস্টান মান

1
এই সময়গুলি আপনার হ্যাশিং ফাংশনের উপরও নির্ভর করে। যদি কোনও অদ্ভুত কারণে এটি ও (1) না হয়, অবশ্যই আপনার ক্রিয়াকলাপে আপনার হ্যাশ ফাংশনটি যে পরিমাণ দক্ষতার সাথে চালিত হবে তার ন্যূনতম সীমাবদ্ধ থাকবে।
খ্রিস্টান মান

আমি বলব বিএসটির সবচেয়ে বড় সুবিধা হ'ল এটি একটি সাজানো ডাটা স্ট্রাকচারে। ইতিমধ্যে এখানে তালিকাভুক্ত বিশদ ব্যবহারের মামলা রয়েছে ।
যুয়ানতাও

উত্তর:


93

মনে রাখবেন বাইনারি অনুসন্ধান গাছগুলি (রেফারেন্স-ভিত্তিক) মেমরি-দক্ষ। তারা তাদের চেয়ে বেশি মেমরি সংরক্ষণ করে না।

উদাহরণস্বরূপ, যদি একটি হ্যাশ ফাংশনটির একটি পরিসীমা থাকে R(h) = 0...100তবে আপনাকে কেবলমাত্র 20 টি উপাদান হ্যাশ করলেও আপনাকে 100 টি অ্যারের (পয়েন্টার-টু) উপাদান বরাদ্দ করতে হবে। আপনি যদি একই তথ্য সংরক্ষণের জন্য বাইনারি অনুসন্ধানের গাছ ব্যবহার করেন তবে আপনি কেবলমাত্র আপনার প্রয়োজনীয় পরিমাণ স্থান বরাদ্দ করবেন পাশাপাশি লিঙ্কগুলি সম্পর্কে কিছু মেটাডেটা।


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

4
@ সোলারায়েস: অ্যারে-ভিত্তিক বিএসটি হ্যাশ টেবিলের সাথে তুলনা করার জন্য সবচেয়ে ভাল এবং এগুলি হ্যাশ টেবিলের চেয়ে বেশি অপচয়যোগ্য নয়। পুরো টেবিলটি পুনরায় সংখ্যার তুলনায় আপনি মেমরির অনুলিপি থেকে কিছুটা বেশি বিএসটি প্রসারিত করতে পারেন।
গুভান্তে

125

একটি সুবিধা যা অন্য কেউ উল্লেখ করেনি তা হ'ল বাইনারি অনুসন্ধান ট্রি আপনাকে দক্ষতার সাথে পরিসীমা অনুসন্ধান করতে দেয়।

আমার ধারণাটি চিত্রিত করার জন্য, আমি একটি চরম মামলা করতে চাই। বলুন যে আপনি সমস্ত এলিমেন্টগুলি পেতে চান যাদের কীগুলি 0 থেকে 5000 এর মধ্যে রয়েছে actually এবং প্রকৃতপক্ষে কেবলমাত্র এই জাতীয় উপাদান রয়েছে এবং অন্যান্য 10000 উপাদান রয়েছে যার কীগুলি সীমার মধ্যে নেই। বিএসটি কার্যকরভাবে পরিসীমা অনুসন্ধান করতে পারে যেহেতু এটি কোনও সাবট্রি অনুসন্ধান করে না যার উত্তর পাওয়া অসম্ভব।

যখন আপনি কীভাবে একটি হ্যাশ টেবিলের মধ্যে পরিসীমা অনুসন্ধান করতে পারেন? হয় আপনার প্রতিটি বালতি স্থান পুনরাবৃত্তি করতে হবে যা ও (এন), বা আপনার 1,2,3,4 ... 5000 অবধি প্রতিটি বিদ্যমান আছে কিনা তা আপনাকে খুঁজে বার করতে হবে। (0 থেকে 5000 এর মধ্যে কীগুলি অসীম সেট? উদাহরণস্বরূপ কীগুলি দশমিক হতে পারে)


11
বিএসটিগুলি দক্ষতার সাথে পরিসীমা অনুসন্ধান করে! আমার কাছে এটি সর্বোত্তম উত্তর এটি ব্যবহারিক এবং অ্যালগরিদমিক পদ্ধতির শর্তাবলী।
এডি

4
বাহ এটি সত্যিই ব্যাখ্যা করে যে গাছগুলি কেন ডেটাবেসের সাথে যুক্ত; যখন আপনার কী ভিত্তিক ফিল্টারিং করা দরকার তখন তাদের উপকারগুলি সর্বাধিক দৃশ্যমান। হ্যাশ মানচিত্রের সাহায্যে, "1000 থেকে 3290 এর মধ্যে কী সহ সমস্ত আইটেম সন্ধান করুন"
দিমিত্রি

77

বাইনারি গাছের একটি "সুবিধা" হ'ল এটি সমস্ত উপাদানগুলিকে ক্রমানুসারে তালিকাভুক্ত করার জন্য ট্র্যাভ্রেস করা যেতে পারে। এটি হ্যাশ টেবিলের সাহায্যে অসম্ভব নয় তবে হ্যাশ স্ট্রাকচারের মধ্যে একটি নকশা করা সাধারণ ক্রিয়াকলাপ নয়।


3
যে কোনও ক্রমে ট্র্যাভারিং করা সম্ভবত কোনও হ্যাশটেবলের কোনও ধারণা রাখবে না।
হতাশ

2
@FrustratedWithFormsDesigner। বাছাই করা লিনিয়ার হ্যাশ টেবিলটি দেখুন
নিলবি

লিঙ্কটির জন্য ধন্যবাদ, এটি একটি আন্তঃনদীপ্ত ধারণা! আমি কখনও মনে করি না যে আমি এর বাস্তবায়ন দেখেছি বা ব্যবহার করেছি (জেনে বুঝেই নয়)।
হতাশ

1
নিবন্ধটির জন্য
ওয়েব্যাক

51

অন্যান্য সমস্ত ভাল মন্তব্য ছাড়াও:

সাধারণত হ্যাশ টেবিলগুলিতে বাইনারি গাছের তুলনায় কম মেমরি পড়ার জন্য আরও ভাল ক্যাশে আচরণ করা হয়। একটি হ্যাশ টেবিলের জন্য আপনি কেবলমাত্র আপনার ডেটা ধরে থাকা কোনও রেফারেন্সে অ্যাক্সেস পাওয়ার আগে কেবল একক পঠন করতে পারেন। বাইনারি ট্রি, যদি এটি একটি ভারসাম্যপূর্ণ বৈকল্পিক হয় তবে কিছু * ধ্রুবক কে এর জন্য কে * এলজি (এন) মেমরি পড়ার ক্রমে কিছু দরকার something

অন্যদিকে, কোনও শত্রু যদি আপনার হ্যাশ-ফাংশন জানেন তবে শত্রু সংঘর্ষগুলি তৈরি করতে আপনার হ্যাশ টেবিলটি কার্যকর করতে পারে, এর কার্যকারিতা ব্যাপকভাবে বাধাগ্রস্থ করে। কাজটি হ'ল হ্যাশ-ফাংশনটি এলোমেলোভাবে একটি পরিবার থেকে বেছে নেওয়া, তবে একটি বিএসটি এর অসুবিধা নেই। এছাড়াও, যখন হ্যাশ টেবিলের চাপ খুব বেশি বেড়ে যায়, আপনি প্রায়শই হ্যাশ টেবিলটি প্রসারিত এবং পুনর্বিবেচনা করেন যা একটি ব্যয়বহুল অপারেশন হতে পারে। বিএসটির এখানে সরল আচরণ রয়েছে এবং হঠাৎ করে প্রচুর ডেটা বরাদ্দ করা এবং পুনর্নির্মাণ অপারেশন করার ঝোঁক থাকে না।

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

অবশেষে, BSTs অনেক (খাঁটি) হ্যাশ-টেবিল তুলনায় কার্মিক ভাষায় বাস্তবায়ন সহজ হয় এবং তারা ধ্বংসাত্মক আপডেট বাস্তবায়ন হবে (প্রয়োজন বোধ করেন না অধ্যবসায় পাসকাল দ্বারা যুক্তি উপরে)।


3
BSTs are much easier to implement in (pure) functional languages compared to hash-tables- সত্যি? আমি এখন একটি কার্যকরী ভাষা শিখতে চাই!
নওফাল

1
হ্যাশ টেবিলটি কার্যকরী ভাষায় অবিচল থাকা দরকার। এটি প্রায়শই বাস্তবায়ন জটিল করে তোলে।
আমি

বিস্তারিতভাবে বলতে গেলে, যদি আপনি কার্যনির্বাহী ভাষায় রাষ্ট্রপতি ডেটা স্ট্রাকচার তৈরি করেন তবে আপনারা যা করতে চান তা হ'ল সমাবেশে আপনি একই কোডটি লিখেছেন, প্রতিটি ক্রিয়াকলাপে আপনি স্পষ্টভাবে আপনার মেমরি / রেজিস্ট্রিগুলির অ্যারেটি রূপান্তরিত করেন, বা ভান করার জন্য কোনও সার্ভারের সাথে কথা বলেন এটা করতে. আপনার রাষ্ট্র সম্পর্কে সচেতন থাকার জন্য আমি সবাই, তবে সঠিকভাবে করা হলে এটি অপরিহার্য পদ্ধতির কাছে বিস্মৃত (
দিমিত্রি

27

একটি হ্যাশ টেবিলের উপর বাইনারি গাছের প্রধান সুবিধা হ'ল বাইনারি ট্রি আপনাকে দুটি অতিরিক্ত ক্রিয়াকলাপ দেয় যা আপনি করতে পারবেন না (সহজে, দ্রুত) একটি হ্যাশ টেবিল দিয়ে

  • কিছু স্বেচ্ছাসেবক মূল্যের মান (বা উপরে / নীচে নিকটতম) এর নিকটতম (প্রয়োজনীয় সমান নয়) সন্ধান করুন

  • সাজানো ক্রমে গাছের বিষয়বস্তুগুলি দিয়ে পুনরাবৃত্তি করুন

দুটি সংযুক্ত - বাইনারি ট্রি তার সামগ্রীগুলি বাছাই করা ক্রমে রাখে, সুতরাং যে জিনিসগুলির জন্য বাছাই করা ক্রমের প্রয়োজন হয় তা করা সহজ।


বিএসটি সর্বাধিক নিকটতম ম্যাচটি আবিষ্কার করে, ঠিক যদি সঠিক মিলটি না থাকে, তাই না? আপনি যদি মূলে একটি সঠিক মিল খুঁজে পান?
বিকাশকারী

2
@ বিকাশকারী 777: তারপরে নীচের এবং নীচের পরবর্তী নিকটে হ'ল বাম সাবট্রির ডানদিকে এবং ডান সাবট্রির বামতম পাতা।
ক্রিস ডড

16

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


3
এই পয়েন্টটি বাড়িতে চালনা করতে, একটি অধঃপতিত কেস হয় যখন সংগ্রহে কেবলমাত্র 1 টির অনেকগুলি অনুলিপি থাকে। বিএসটি-তে, সন্নিবেশটি হ'ল (লগ এন), একটি হ্যাশ টেবিলের মধ্যে, সন্নিবেশটি ও (এন)
সিঙ্গেল নেজেশন ইলিমিনেশন

2
যখন একটি হ্যাশ টেবিলটিতে কেবল 1 টির অনেকগুলি অনুলিপি থাকে, সন্নিবেশ করা হয় (স্থির) ও (1), ও (এন) নয়। হ্যাশ টেবিলগুলির জন্য সমস্যাটি হ'ল যখন একই হ্যাশ সহ অনেকগুলি বিভিন্ন কী থাকে। এটি একটি ডায়নামিক হ্যাশ স্কিম এড়ানো যেতে পারে যা যখন অনেক সংঘর্ষ হয় তখন ভিন্ন হ্যাশ ফাংশনে স্যুইচ করে।
ক্রিস ডড

ভারসাম্যহীন বৃক্ষের চেয়ে দ্রষ্টব্য একটি তালিকার অধঃপতন করতে পারে এবং ও (এন) অনুসন্ধানও করতে পারে।
2'18

9

প্রথমবার তৈরি হওয়ার পরে একটি হ্যাশটেবল আরও স্থান নিতে পারে - এটিতে যে উপাদানগুলি সন্নিবেশ করা হয়নি তার জন্য এটি স্লট উপলব্ধ থাকবে (তারা কখনও সন্নিবেশ করানো হয়েছে কি না), বাইনারি অনুসন্ধানের গাছটি কেবল ততটাই বড় হবে যেমন এটি প্রয়োজন থাকা. এছাড়াও, যখন একটি হ্যাশ-টেবিলের আরও ঘর প্রয়োজন, অন্য কাঠামোতে প্রসারিত করা সময় সাপেক্ষ হতে পারে, তবে এটি বাস্তবায়নের উপর নির্ভর করে।


8

একটি বাইনারি অনুসন্ধান গাছ একটি ধ্রুবক ইন্টারফেস সহ প্রয়োগ করা যেতে পারে , যেখানে নতুন গাছ ফিরে এসেছে তবে পুরানো গাছের অস্তিত্ব অবিরত রয়েছে। সাবধানে প্রয়োগ করা হয়েছে, পুরানো এবং নতুন গাছগুলি তাদের নোডের বেশিরভাগ ভাগ করে। আপনি স্ট্যান্ডার্ড হ্যাশ টেবিল দিয়ে এটি করতে পারবেন না।


6

একটি বাইনারি গাছ অনুসন্ধান এবং intoোকানোর জন্য ধীরে ধীরে, তবে ইনফিক্স ট্র্যাভারসালটির খুব সুন্দর বৈশিষ্ট্য রয়েছে যার মূল অর্থ হ'ল আপনি একটি সাজানো ক্রমে গাছের নোড দিয়ে পুনরাবৃত্তি করতে পারেন।

একটি হ্যাশ টেবিলের এন্ট্রিগুলির মাধ্যমে আইট্রেট করা খুব বেশি অর্থবোধ করে না কারণ এগুলি সমস্ত স্মৃতিতে ছড়িয়ে আছে।


6

কোডিং সাক্ষাত্কার ক্র্যাকিং থেকে , 6th ষ্ঠ সংস্করণ

ভারসাম্য বাইনারি অনুসন্ধান ট্রি (বিএসটি) দিয়ে আমরা হ্যাশ টেবিলটি প্রয়োগ করতে পারি। এটি আমাদের একটি ও (লগ এন) দেখার সময় দেয়। এর সুবিধাটি সম্ভাব্যভাবে কম স্থান ব্যবহার করা হয়, যেহেতু আমরা আর বড় অ্যারে বরাদ্দ করি না। আমরা কীগুলি ক্রমে পুনরাবৃত্তি করতে পারি যা কখনও কখনও কার্যকর হতে পারে।


5

বিএসটিগুলি ও (লগন) সময়ে "ফাইন্ডপ্রাইডেসর" এবং "ফাইন্ডসুকসেসর" ক্রিয়াকলাপগুলি (পরবর্তী ছোট এবং পরবর্তী বৃহত্তম উপাদানগুলি সন্ধান করতে) সরবরাহ করে যা খুব কার্যকর অপারেশনও হতে পারে। হ্যাশ টেবিল সেই সময়ের দক্ষতা সরবরাহ করতে পারে না।


যদি আপনি "ফাইন্ডপ্রাইডেসর" এবং "ফাইন্ডসুকসেসর" ক্রিয়াকলাপগুলি সন্ধান করেন তবে হ্যাশ টেবিলটি প্রথম স্থানে ডেটা কাঠামোর জন্য খারাপ পছন্দ choice
একেডেসাই

1

আপনি যদি বাছাই করা উপায়ে ডেটা অ্যাক্সেস করতে চান তবে হ্যাশ টেবিলের সমান্তরালে একটি বাছাই করা তালিকা বজায় রাখতে হবে। একটি ভাল উদাহরণ। নেট মধ্যে অভিধান। ( http://msdn.microsoft.com/en-us/library/3fcwy8h6.aspx দেখুন )।

এটি কেবল ধীরে ধীরে প্রবেশের পার্শ্ব-প্রতিক্রিয়া রাখে না, তবে এটি একটি বি-ট্রি-এর চেয়ে বেশি পরিমাণে মেমরি গ্রহণ করে।

আরও, যেহেতু একটি খ-গাছ সাজানো হয়েছে, ফলাফলের ব্যাপ্তিগুলি খুঁজে পাওয়া বা ইউনিয়নগুলি বা সংহতকরণ করা সহজ।


1

এটি ব্যবহারের উপরও নির্ভর করে, হ্যাশ সঠিক ম্যাচটি সনাক্ত করতে দেয়। আপনি যদি কোনও ব্যাপ্তির জন্য জিজ্ঞাসা করতে চান তবে বিএসটিই পছন্দ। ধরুন আপনার কাছে প্রচুর ডেটা e1, e2, e3 ..... en আছে।

হ্যাশ টেবিলের সাহায্যে আপনি স্থির সময়ে যে কোনও উপাদান সনাক্ত করতে পারেন।

আপনি যদি e41 এর চেয়ে বড় এবং e8 এর চেয়ে কম রেঞ্জের মানগুলি খুঁজে পেতে চান তবে BST দ্রুত তা সন্ধান করতে পারে।

মূল বিষয় হ'ল ফাংশন যা কোনও সংঘর্ষ এড়ানোর জন্য ব্যবহৃত হয়। অবশ্যই, আমরা সম্পূর্ণরূপে কোনও সংঘর্ষ এড়াতে পারি না, সেক্ষেত্রে আমরা শৃঙ্খলাকৃতি বা অন্যান্য পদ্ধতি অবলম্বন করি। এটি সবচেয়ে খারাপ ক্ষেত্রে পুনরুদ্ধার আর স্থির সময় করে না।

একবার পূর্ণ হয়ে গেলে, হ্যাশ টেবিলটিকে তার বালতির আকার বাড়াতে হবে এবং সমস্ত উপাদানগুলির মধ্যে আবার অনুলিপি করতে হবে। এটি একটি অতিরিক্ত ব্যয় যা বিএসটি-তে উপস্থাপিত হয় না।


1

হ্যাশ টেবিলগুলি সূচকের জন্য ভাল নয়। আপনি যখন কোনও ব্যাপ্তি অনুসন্ধান করছেন, তখন বিএসটিগুলি আরও ভাল। এ কারণেই বেশিরভাগ ডাটাবেস সূচকগুলি হ্যাশ টেবিলের পরিবর্তে বি + গাছ ব্যবহার করে


ডাটাবেস সূচকগুলি হ্যাশ এবং বি + গাছ উভয় প্রকারের। আপনি যখন এর চেয়ে বড় বা তার চেয়ে কম তুলনা করতে চান, তখন বি + ট্রি সূচকটি দরকারী অন্যথায় হ্যাশ সূচকটি অনুসন্ধানের জন্য কার্যকর। এছাড়াও যখন ডেটা তুলনাযোগ্য নয় এবং আপনি সূচি তৈরি করতে চান তাও ভেবে দেখুন, তখন db হ্যাশ সূচক তৈরি করবে, বি + ট্রি সূচক নয়। @ এসএসডি
সুখমিত সিং

1

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

বিএসটি আদেশের তথ্য সংরক্ষণ করে, এটি আপনাকে চারটি অতিরিক্ত গতিশীল সেট অপারেশন সরবরাহ করে যা হ্যাশ টেবিলগুলি ব্যবহার করে (দক্ষতার সাথে) সম্পাদন করা যায় না। এই অপারেশনগুলি হ'ল:

  1. সর্বাধিক
  2. নূন্যতম
  3. উত্তরাধিকারী
  4. পূর্বপুরুষ

প্রতিটি বিএসটি অপারেশনের মতো এই সমস্ত অপারেশনে ও (এইচ) এর জটিল জটিলতা রয়েছে। অতিরিক্তভাবে সমস্ত সঞ্চিত কীগুলি বিএসটি-তে সজ্জিত থাকে যাতে কেবল ক্রম অনুযায়ী গাছটিকে অনুসরণ করে কীগুলির সাজানো ক্রম পেতে আপনাকে সক্ষম করে।

সংক্ষেপে আপনি যদি চান সমস্ত অপারেশন সন্নিবেশ করান, মুছুন এবং মুছুন তবে হ্যাশ টেবিলটি পারফরম্যান্সে অপরাজেয় (বেশিরভাগ সময়) is তবে আপনি যদি উপরে তালিকাভুক্ত কোনও বা সমস্ত অপারেশন চান আপনার একটি বিএসটি ব্যবহার করা উচিত, বিশেষত একটি স্ব-ব্যালেন্সিং বিএসটি।


0

হ্যাশ টেবিলের প্রধান সুবিধা হ'ল এটি all = O (1) এ প্রায় সমস্ত অপ্স করে। এবং এটি বোঝা এবং বাস্তবায়ন করা খুব সহজ। এটি দক্ষতার সাথে অনেকগুলি "সাক্ষাত্কারের সমস্যাগুলি" সমাধান করে। সুতরাং আপনি যদি কোনও কোডিং সাক্ষাত্কার ক্র্যাক করতে চান তবে হ্যাশ টেবিলের সাথে সেরা বন্ধু তৈরি করুন ;-)


আমার মনে হয় ওপি হ্যাশিংয়ের ওপরে বিএসটি-র সুবিধা চেয়েছিল।
স্নাইপার

0

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

  1. প্রতিটি বালতি আকার দ্বিগুণ করুন - ম্যালোক (এন বালতি) / হ্যাশ ফাংশন পরিবর্তন- সময় প্রয়োজন: ম্যালোক বাস্তবায়নের উপর নির্ভর করে
  2. আগের বালতি ডেটার প্রতিটি নতুন বালতি ডেটাতে স্থানান্তর / অনুলিপি করুন। এটি একটি ও (এন) অপারেশন যেখানে এন পুরো ডেটা উপস্থাপন করে

ঠিক আছে. তবে আপনি যদি কোনও লিঙ্কলিস্ট ব্যবহার করেন তবে ঠিক এমন সমস্যা হওয়া উচিত নয়? হ্যাঁ, লিঙ্কযুক্ত তালিকায় আপনার এই সমস্যা নেই this প্রতিটি বালতি একটি লিঙ্কযুক্ত তালিকার সাথে শুরু করার কথা বিবেচনা করে, এবং যদি আপনার বালতিতে 100 টি উপাদান থাকে তবে আপনাকে লিঙ্কযুক্ত তালিকার শেষের দিকে পৌঁছানোর জন্য 100 টি উপাদানকে অতিক্রম করতে হবে তাই তালিকা.এডডি (এলিমেন্ট ই) থেকে সময় লাগবে -

  1. বালতিতে উপাদানটি হ্যাশ করুন- সমস্ত বাস্তবায়নের মতো সাধারণ
  2. উক্ত বালতি- ও (এন) অপারেশনে শেষ উপাদানটি খুঁজে পেতে সময় নিন।

লিঙ্কযুক্ত তালিকা বাস্তবায়নের সুবিধা হ'ল খোলা সম্বোধনের বাস্তবায়নের ক্ষেত্রে আপনার মেমরি বরাদ্দকরণ ক্রিয়াকলাপ এবং সমস্ত বালতিগুলির ও (এন) স্থানান্তর / অনুলিপিের দরকার নেই।

সুতরাং, ও (এন) অপারেশন হ্রাস করার উপায় হ'ল অপারেশনগুলি ও (লগ (এন)) খুঁজে পাওয়া বাইনারি অনুসন্ধানের ট্রিটিতে প্রয়োগকরণকে রূপান্তর করা এবং আপনি তার মানটির উপর ভিত্তি করে উপাদানটিকে তার অবস্থানে যুক্ত করুন। একটি বিএসটি-র যুক্ত বৈশিষ্ট্যটি এটি সাজানো আসে!


0

স্ট্রিং কীগুলির সাহায্যে বাইনারি অনুসন্ধান গাছগুলি দ্রুততর হতে পারে। বিশেষত যখন স্ট্রিংগুলি দীর্ঘ হয়।

বাইনারি অনুসন্ধান গাছগুলি কম / বৃহত্তর জন্য তুলনা ব্যবহার করে যা স্ট্রিংগুলির জন্য দ্রুত (যখন তারা সমান নয়)। সুতরাং কোনও স্ট্রিং পাওয়া না গেলে একটি বিএসটি দ্রুত উত্তর দিতে পারে। এটি পাওয়া গেলে এটির জন্য কেবল একটি সম্পূর্ণ তুলনা করা দরকার।

একটি হ্যাশ টেবিল। আপনাকে স্ট্রিংয়ের হ্যাশ গণনা করতে হবে এবং এর অর্থ হ্যাশ গণনা করার জন্য আপনাকে কমপক্ষে একবারে সমস্ত বাইট অতিক্রম করতে হবে। তারপরে আবার যখন কোনও ম্যাচিং এন্ট্রি পাওয়া যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.