দুটি ডাটা স্ট্রাকচার কীভাবে হ্যাশের সংঘর্ষের মোকাবেলা করে তা আপনি মিস করছেন। ব্লুম ফিল্টারগুলি প্রকৃত মান সংরক্ষণ করে না, সুতরাং প্রয়োজনীয় স্থানটি মনোনীত অ্যারের ধ্রুব আকার। পরিবর্তে যদি আপনি একটি traditionalতিহ্যবাহী হ্যাশ ব্যবহার করেন তবে এটি আপনার দেওয়া সমস্ত মান সংরক্ষণ করার চেষ্টা করে, তাই এটি সময়ের সাথে বৃদ্ধি পায়।
সরলিকৃত হ্যাশ ফাংশনটি বিবেচনা করুন (কেবলমাত্র উদাহরণের জন্য!) f(x) = x % 2
। এখন আপনি ইনপুট নিম্নলিখিত পূর্ণসংখ্যার: 2, 3, 4, 5, 6, 7
।
স্ট্যান্ডার্ড হ্যাশ: প্রদত্ত মান কুচি-কুচি করিয়া কাটা বস্তু করা হবে, এবং আমরা কারণে collisions অনেক সঙ্গে শেষ f(2) = f(4) = f(6) = 0
এবং f(3) = f(5) = f(7) = 1
। তবুও, হ্যাশ এই সমস্ত মান সংরক্ষণ করে এবং এটি আপনাকে সংরক্ষণ করতে পারে না তা জানাতে সক্ষম 8
হবে। কীভাবে তা করে? এটি সংঘর্ষের উপর নজর রাখে এবং একই হ্যাশ-মান সহ সমস্ত মান সংরক্ষণ করে, তারপরে আপনি যখন এটি অনুসন্ধান করেন তখন এটি অতিরিক্তভাবে আপনার অনুসন্ধানের সাথে তুলনা করে। সুতরাং আসুন এর জন্য মানচিত্রটি জিজ্ঞাসা করুন 8
: f(8) = 0
সুতরাং এটি এমন একটি বালতি সন্ধান করবে যেখানে আমরা ইতিমধ্যে সন্নিবেশ করিয়েছি 2, 4, 6
এবং আপনাকে যে 8
ইনপুটটির অংশ ছিল না তা জানাতে 3 টি তুলনা করা দরকার ।
ব্লুম ফিল্টার: সাধারণত, প্রতিটি ইনপুট মান k
বিভিন্ন হ্যাশ ফাংশনের বিরুদ্ধে হ্যাশ করা হয়। আবার সরলতার জন্য, ধরে নেওয়া যাক আমরা কেবলমাত্র একক হ্যাশ ফাংশনটি ব্যবহার করি f
। আমরা তখন 2 মূল্যবোধের একটি অ্যারের প্রয়োজন এবং যখন আমরা ইনপুট সম্মুখীন 2
এটা কারণে তার মানে f(2) = 0
আমরা অবস্থানে অ্যারের মান সেট 0
মান 1
। 4
এবং একই জন্য ঘটে 6
। একইভাবে, ইনপুটগুলি 3, 5, 7
প্রতিটি অ্যারের অবস্থানকে 1
মান হিসাবে সেট করে 1
। এখন আমরা জিজ্ঞাসা করি যে ইনপুটটির 8
অংশ ছিল কিনা : f(8) = 0
এবং অবস্থানের অ্যারেটি 0
রয়েছে 1
, তাই ব্লুম ফিল্টারটি মিথ্যাভাবে দাবি করবে যে 8
প্রকৃতপক্ষে ইনপুটটির অংশ ছিল।
কিছুটা আরও বাস্তবসম্মত পেতে, আসুন আমরা বিবেচনা করি যে আমরা একটি দ্বিতীয় হ্যাশ ফাংশন যুক্ত করেছি g(x) = x % 10
। এটির সাহায্যে ইনপুট মান 2
দুটি হ্যাশ মানগুলিতে f(2) = 0
নিয়ে যায় g(2) = 2
এবং দুটি অনুরূপ অ্যারে অবস্থান সেট করা হবে 1
। অবশ্যই, অ্যারে এখন কমপক্ষে আকারের হওয়া উচিত 10
। তবে আমরা যখন জিজ্ঞাসা 8
করব তখন আমরা অবস্থানের 8
কারণে অ্যারেটি পরীক্ষা করব g(8) = 8
এবং এখনও সেই অবস্থান থাকবে 0
। এ কারণেই অতিরিক্ত হ্যাশ ফাংশনগুলি আপনি যে মিথ্যা ধনাত্মকটি পেয়েছেন তা হ্রাস করে।
তুলনা: ব্লুম ফিল্টারটি k
হ্যাশ ফাংশন ব্যবহার করে যার অর্থ k
এলোমেলোভাবে অ্যারে অবস্থানগুলি অ্যাক্সেস করা হচ্ছে। তবে সেই চিত্রটি হুবহু। পরিবর্তে হ্যাশটি আপনাকে কেবল একটি নিয়মিত ধ্রুবক অ্যাক্সেসের সময় গ্যারান্টি দিচ্ছে তবে এটি আপনার হ্যাশ ফাংশন এবং ইনপুট ডেটার প্রকৃতির উপর নির্ভর করে ডি-জেনারেট করতে পারে। সুতরাং এটি সাধারণভাবে দ্রুততর হয়, ডি-জেনারেট হওয়া মামলাগুলি ব্যতীত।
যাইহোক, আপনার একবার হ্যাশের সংঘর্ষ হলে স্ট্যান্ডার্ড হ্যাশকে ক্যোয়ারী মানের তুলনায় সঞ্চিত মানগুলির সমতা পরীক্ষা করতে হবে। এই সাম্যতার চেকটি নির্বিচারে ব্যয়বহুল হতে পারে এবং কোনও পুষ্পযুক্ত ফিল্টার দিয়ে কখনই ঘটে না।
স্থানের ক্ষেত্রে, ব্লুম ফিল্টারটি ধ্রুবক, কারণ মনোনীত অ্যারের চেয়ে বেশি মেমরি ব্যবহার করার দরকার নেই। অন্যদিকে, হ্যাশটি গতিশীলভাবে বৃদ্ধি পায় এবং সংঘর্ষযুক্ত মানগুলিতে নজর রাখার কারণে এটি আরও বড় হতে পারে।
বাণিজ্য বন্ধ: এখন আপনি কী জানেন যে সস্তা এবং কোনটি নয় এবং কোন পরিস্থিতিতে, আপনার বাণিজ্য বন্ধ দেখতে পারা উচিত। ব্লুম ফিল্টারগুলি দুর্দান্ত যদি আপনি খুব তাড়াতাড়ি সনাক্ত করতে চান যে কোনও মান আগে দেখা গেছে তবে মিথ্যা ধনাত্মকতার সাথে বাঁচতে পারে। অন্যদিকে, আপনি যদি আপনার রানটাইমটির সঠিক বিচার করতে না পারার মূল্যে গ্যারান্টিযুক্ত যথার্থতা চান তবে আপনি হ্যাশ মানচিত্রটি চয়ন করতে পারেন, তবে সাধারণভাবে অধঃপতনযুক্ত মামলাগুলি গ্রহণ করতে পারেন যা গড়ের তুলনায় বেশ ধীর হতে পারে।
একইভাবে, আপনি যদি সীমাবদ্ধ মেমরির পরিবেশে থাকেন তবে আপনি তাদের মেমরির ব্যবহারের গ্যারান্টিটির জন্য ব্লুম ফিল্টারগুলি পছন্দ করতে চাইতে পারেন।