ব্লুম ফিল্টার ব্যবহার করে কী সুবিধা?


108

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


5
আপনি উইকিপিডিয়া নিবন্ধ পড়েছেন? এটি সুবিধাগুলি বেশ ভালভাবে ব্যাখ্যা করে। en.wikipedia.org/wiki/Bloom_filter
অ্যালেক্স Budovski

@ ডেভিড যদিও এটি অসম্ভব বলে মনে হচ্ছে। একটি ধ্রুবক স্পেসে কে হ্যাশ ফাংশনগুলির একটি ধ্রুবক স্থানে একক হ্যাশ ফাংশনের চেয়ে অনেক বেশি সংঘর্ষ হয়।
মাথা ব্যথা

1
@ অ্যালেক্স আমি উইকিপিডিয়া নিবন্ধটি পড়েছি। সেখানে কী বলা হয়েছে তা আমি বুঝতে পেরেছি তবে কেন এটি মোটেও ভাল। এটি কেন কাজ করে তা স্বজ্ঞাত। কেন এটি দরকারী হয় না।
মাথা ব্যথা

এই লেখক এটির সাথে একটি মহান পেশা আছে michaelnielsen.org/ddi/why-bloom-filters-work-the-way-they-do
dranxo

2
@ ড্রানক্সো, লিঙ্কযুক্ত নিবন্ধ jasondavies.com/bloomfilter আরও ভাল।
পেসারিয়ার

উত্তর:


155

উইকিপিডিয়া থেকে :

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

আমার কাছে খুব পরিষ্কার।

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

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

সুতরাং উদাহরণ ব্যবহারের প্যাটার্ন হতে পারে:

আপনি ডিস্কে প্রচুর ডেটা পেয়েছেন - আপনি কী ত্রুটিটি আবদ্ধ করতে চান তা নির্ধারণ করুন (উদাহরণস্বরূপ 1%), যা মিটার মান নির্ধারণ করে । তারপরে অনুকূল কে নির্ধারিত হয় (নিবন্ধে দেওয়া সূত্র থেকে)। আপনি একবারে এই ডিস্ক-সীমাবদ্ধ ডেটা থেকে আপনার ফিল্টারটি পপুলেট করুন।

এখন আপনার র‌্যামে ফিল্টার রয়েছে। আপনার যখন কোনও উপাদানটি প্রক্রিয়া করার দরকার হয়, আপনি আপনার ফিল্টারটি জিজ্ঞাসা করেন যে এটি আপনার ডেটা সেটে বিদ্যমান থাকার সম্ভাবনা রয়েছে কিনা to যদি তা না হয় তবে কোনও অতিরিক্ত কাজ করা হয় না। কোনও ডিস্ক পড়েনি, ইত্যাদি (এটি হ্যাশ বা গাছ ইত্যাদি হলে আপনাকে করতে হবে)।

অন্যথায়, যদি ফিল্টারটি "হ্যাঁ, এটি সেখানে রয়েছে" বলে থাকে, তবে এটির ভুল হওয়ার সম্ভাবনা রয়েছে এমন 1% সম্ভাবনা রয়েছে, তাই আপনি এটি খুঁজে বের করার জন্য প্রয়োজনীয় কাজটি করুন। সময় 99%, আসলেই হবে সেখানে, তাই কাজ অনর্থক ছিল না।


2
যদি এটি পরিষ্কার হয় তবে দয়া করে উত্তর দিন। এটি একই আকারের সেটটিতে একক হ্যাশ ফাংশনের চেয়ে কীভাবে সম্ভবত আরও বেশি স্থান দক্ষ হতে পারে? এটি কেবল আরও সংঘর্ষ তৈরি করবে। হ্যাশ ফাংশনগুলির সমস্ততে আপনার 1 রয়েছে তা নিশ্চিত করার জন্য আপনি পৃথক হ্যাশ ফাংশনগুলিতে সন্ধানের কাছাকাছি আসবেন। আমি বুঝতে পারছি না একটি একক হ্যাশ ফাংশন ব্যবহার করে এটির সুবিধা।
মাথা ব্যথা

19
একটি হ্যাশ ফাংশন কোড নয়, ডেটা নয়। আপনি কী দিয়ে হ্যাশ ফাংশনটি ব্যবহার করবেন? একটা হ্যাশ টেবিল? সেক্ষেত্রে আপনার টেবিলের জন্য কীগুলি সংরক্ষণ করতে হবে যা কোনও ফুলের ছাঁকুনির বিপরীতে স্বতন্ত্র আকারের হতে পারে। সংক্ষেপে এর উল্লেখ রয়েছে।
অ্যালেক্স বুদোভস্কি

3
কে না করে কেবল একটি হ্যাশ ফাংশন সহ একটি ব্লুম ফিল্টার বিবেচনা করুন। আরও হ্যাশ ফাংশন যুক্ত করার সুবিধা কী? এটি কেবল আরও সংঘর্ষ তৈরি করবে। নাকি আমি ভুল করছি?
মাথা ব্যথা

2
উইকিপিডিয়া নিবন্ধের "স্পেস এবং টাইম সুবিধাগুলি" এবং "মিথ্যা পজিটিভগুলির সম্ভাবনা" বিভাগের শেষ অনুচ্ছেদে এর উত্তর দেওয়া হয়েছে।
অ্যালেক্স বুদোভস্কি

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

156

অ্যালেক্স এটি বেশ ভাল ব্যাখ্যা করেছেন। যারা এখনও এটি সম্পর্কে যথেষ্ট উপলব্ধি পাননি, আশা করি এই উদাহরণটি আপনাকে বুঝতে সাহায্য করবে:

বলুন আমি ক্রোম দলে গুগলের হয়ে কাজ করি এবং আমি ব্রাউজারে এমন একটি বৈশিষ্ট্য যুক্ত করতে চাই যা ব্যবহারকারীকে জানায় যে সে প্রবেশ করানো ইউআরএল দূষিত ইউআরএল হয়। সুতরাং আমার কাছে প্রায় 1 মিলিয়ন দূষিত ইউআরএল এর একটি ডেটাসেট রয়েছে, এই ফাইলটির আকার 25MB এর কাছাকাছি। যেহেতু আকারটি বেশ বড়, (নিজে ব্রাউজারের আকারের তুলনায় বড়), তাই আমি এই ডেটাটি একটি রিমোট সার্ভারে সঞ্চয় করি।

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

কেস 2: আমি একটি ব্লুম ফিল্টার ব্যবহার করি। এক মিলিয়ন ইউআরএলগুলির সম্পূর্ণ তালিকা একাধিক হ্যাশ ফাংশন ব্যবহার করে ব্লুম ফিল্টারের মাধ্যমে পরিচালিত হয় এবং সম্পর্কিত অবস্থানগুলি 0 এর বিশাল অ্যারেতে 1 হিসাবে চিহ্নিত করা হয়। ধরা যাক আমরা একটি ব্লুম ফিল্টার ক্যালকুলেটর ব্যবহার করে 1% এর একটি মিথ্যা ইতিবাচক হার চাই ( http://hur.st/bloomfilter?n=1000000&p=0.01), আমরা কেবল 1.13 মেগাবাইট হিসাবে প্রয়োজনীয় ব্লুম ফিল্টারটির আকার পাই। এই ছোট আকারটি প্রত্যাশিত, অ্যারের আকারটি বিশাল হলেও আমরা কেবল 1s বা 0 গুলি সংরক্ষণ করছি এবং হ্যাশ টেবিলের মতো URL গুলি নয় his এই অ্যারেটিকে কিছুটা অ্যারে হিসাবে বিবেচনা করা যেতে পারে। এটি হ'ল যেহেতু আমাদের কেবল দুটি মান 1 এবং 0 রয়েছে তাই আমরা বাইটের পরিবর্তে পৃথক বিট সেট করতে পারি। এটি 8 বার নেওয়া স্থান হ্রাস করবে। এই 1.13 মেগাবাইট ব্লুম ফিল্টারটি এর ছোট আকারের কারণে, ওয়েব ব্রাউজারেই সংরক্ষণ করা যেতে পারে !! সুতরাং যখন কোনও ব্যবহারকারী এসে ইউআরএল প্রবেশ করে, আমরা কেবল প্রয়োজনীয় হ্যাশ ফাংশনগুলি প্রয়োগ করি (ব্রাউজারে নিজেই), এবং ব্লুম ফিল্টারের সমস্ত অবস্থান (যা ব্রাউজারে সঞ্চিত থাকে) যাচাই করি। যে কোনও একটি অবস্থানের 0 এর মান আমাদের জানায় যে এই URL টি অবশ্যই দূষিত URL গুলির তালিকায় নেই এবং ব্যবহারকারী নির্বিঘ্নে অগ্রসর হতে পারে। সুতরাং আমরা সার্ভারে কল করিনি এবং তাই সময় সাশ্রয় করে। 1 এর মান আমাদের জানায় যে ইউআরএল দূষিত ইউআরএলগুলির তালিকায় থাকতে পারে। এই ক্ষেত্রে আমরা রিমোট সার্ভারে কল করি এবং সেখানে আমরা প্রথমে কিছু হ্যাশ টেবিলের সাথে অন্য কিছু হ্যাশ ফাংশন ব্যবহার করতে পারি যেমন পুনরুদ্ধার করতে এবং URL টি আসলে উপস্থিত কিনা তা পরীক্ষা করতে। বেশিরভাগ সময় থেকে, কোনও ইউআরএল দূষিত হওয়ার সম্ভাবনা নেই, ব্রাউজারের ছোট্ট ব্লুম ফিল্টারটি চিত্রিত করে যা রিমোট সার্ভারে কল এড়িয়ে সময় সাশ্রয় করে। কেবলমাত্র কিছু ক্ষেত্রে, যদি ব্লুম ফিল্টারটি আমাদের জানায় যে URL টি দূষিত হতে পারে তবে কেবলমাত্র সেই ক্ষেত্রে আমরা সার্ভারে কল করি a এই 'মাইট' 99% সঠিক। এই ক্ষেত্রে আমরা রিমোট সার্ভারে কল করি এবং সেখানে আমরা প্রথমে কিছু হ্যাশ টেবিলের সাথে অন্য কিছু হ্যাশ ফাংশন ব্যবহার করতে পারি যেমন পুনরুদ্ধার করতে এবং URL টি আসলে উপস্থিত কিনা তা পরীক্ষা করতে। বেশিরভাগ সময় থেকে, কোনও ইউআরএল দূষিত হওয়ার সম্ভাবনা নেই, ব্রাউজারের ছোট্ট ব্লুম ফিল্টারটি চিত্রিত করে যা রিমোট সার্ভারে কল এড়িয়ে সময় সাশ্রয় করে। কেবলমাত্র কিছু ক্ষেত্রে, যদি ব্লুম ফিল্টারটি আমাদের জানায় যে URL টি দূষিত হতে পারে তবে কেবলমাত্র সেই ক্ষেত্রে আমরা সার্ভারে কল করি a এই 'মাইট' 99% সঠিক। এই ক্ষেত্রে আমরা রিমোট সার্ভারে কল করি এবং সেখানে আমরা প্রথমে কিছু হ্যাশ টেবিলের সাথে অন্য কিছু হ্যাশ ফাংশন ব্যবহার করতে পারি যেমন পুনরুদ্ধার করতে এবং URL টি আসলে উপস্থিত কিনা তা পরীক্ষা করতে। বেশিরভাগ সময় থেকে, কোনও ইউআরএল দূষিত হওয়ার সম্ভাবনা নেই, ব্রাউজারের ছোট্ট ব্লুম ফিল্টারটি চিত্রিত করে যা রিমোট সার্ভারে কল এড়িয়ে সময় সাশ্রয় করে। কেবলমাত্র কিছু ক্ষেত্রে, যদি ব্লুম ফিল্টারটি আমাদের জানায় যে URL টি দূষিত হতে পারে তবে কেবলমাত্র সেই ক্ষেত্রে আমরা সার্ভারে কল করি a এই 'মাইট' 99% সঠিক। ব্রাউজারের ছোট ব্লুম ফিল্টারটি চিত্রিত করে যা রিমোট সার্ভারে কল এড়িয়ে সময় সাশ্রয় করে। কেবলমাত্র কিছু ক্ষেত্রে, যদি ব্লুম ফিল্টারটি আমাদের জানায় যে URL টি দূষিত হতে পারে তবে কেবলমাত্র সেই ক্ষেত্রে আমরা সার্ভারে কল করি a এই 'মাইট' 99% সঠিক। ব্রাউজারের ছোট ব্লুম ফিল্টারটি চিত্রিত করে যা রিমোট সার্ভারে কল এড়িয়ে সময় সাশ্রয় করে। কেবলমাত্র কিছু ক্ষেত্রে, যদি ব্লুম ফিল্টারটি আমাদের জানায় যে URL টি দূষিত হতে পারে তবে কেবলমাত্র সেই ক্ষেত্রে আমরা সার্ভারে কল করি a এই 'মাইট' 99% সঠিক।

সুতরাং ব্রাউজারে একটি ছোট ব্লুম ফিল্টার ব্যবহার করে আমরা প্রচুর সময় সাশ্রয় করেছি যেহেতু প্রতিটি ইউআরএল প্রবেশ করানোর জন্য আমাদের সার্ভার কল করার প্রয়োজন নেই।

আমরা দেখতে পাচ্ছি যে একটি একক হ্যাশ ফাংশন সহ হ্যাশ টেবিলটি একটি ব্লুম ফিল্টারের চেয়ে সম্পূর্ণ ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। আশা করি এটি আপনার সন্দেহগুলি মুছে ফেলে :)

সম্পাদনা করুন :

আমি পাইথনে দূষিত ইউআরএল পরীক্ষার কার্য সম্পাদনের জন্য একটি ব্লুম ফিল্টার প্রয়োগ করেছি। কোডটি এখানে পাওয়া যাবে - https://github.com/tarunsharma1/Bloom-Filter কোডটি বোঝার জন্য খুব সহজ এবং Readme ফাইলটিতে একটি বিশদ বিবরণ সরবরাহ করা হয়েছে।


3
ব্যবহারের ক্ষেত্রে দৃশ্যের জন্য ধন্যবাদ।
স্কুইগস

1
আমি 0 বা 1 এর মান হ্যাশিং এবং সংযুক্ত করার অংশটি পাইনি If আমরা যদি একটি অ্যারে ব্যবহার করে থাকি এবং 0 এবং 1 এর মধ্যে সঞ্চয় করি, আমরা পরীক্ষার সময় কীভাবে একটি ইউআরএল এর হ্যাশ মান সন্ধান করব? ?
ডিভাইনড্রাগন

1
সুতরাং মূলত আমরা হ্যাশ ফাংশন নামে কিছু ব্যবহার করি যা URL এ স্ট্রিং হিসাবে গ্রহণ করে..আর একটি সংখ্যা দেয় ... আমরা এই সংখ্যাটি ব্যবহার করি এবং সংশ্লিষ্ট অ্যারে সূচক মানকে 1 তে সেট করে থাকি different তবে গুরুত্বপূর্ণটি হ'ল প্রতিবার একই ইউআরএলটি হ্যাশিং ফাংশনটির মধ্য দিয়ে যাওয়ার সময় একই নম্বরটি তৈরি করতে হয়। একটি হ্যাশিং ফাংশনটির উদাহরণ হ'ল কোনও ইউআরএল-এর সমস্ত অক্ষরের আসকি মান যুক্ত করা। ব্লুম ফিল্টারগুলিতে আমরা অনেকগুলি হ্যাশিং ফাংশন ব্যবহার করি এবং সেই সমস্ত অ্যারে সূচক মানগুলিকে 1 তে সেট করি Hope আশা করি এটি আপনার সন্দেহকে সাফ করেছে।
তরুণ

1
সি # এর মতো একটি প্রচলিত হ্যাশটেবল HashSet<String>সর্বাধিক ক্ষেত্রে দৃশ্যে এলিমেন্ট উপাদান অনুসারে 16 বাইট ব্যবহার করবে যাতে হ্যাশ টেবিল সম্পূর্ণ পূর্ণ: 4 বাইট ম্যাপটি একটি "বালতি" থেকে প্রবেশের টেবিলের প্রবেশের জন্য (একটি অ্যারে-প্যাকড একক-সংযুক্ত) তালিকা), ক্যাশেড হ্যাশকোডের জন্য 4 বাইট, "পরবর্তী" পয়েন্টারটির জন্য 4 বাইট, কীটির পয়েন্টারের 4 বাইট এবং এটি স্ট্রিং মাপ গণনা করা হয় না। সবচেয়ে খারাপ ক্ষেত্রে এটি 40 বাইট: অর্ধেক এন্ট্রিগুলি অব্যবহৃত এবং 20 বাইট প্রতি প্রবেশ একবারে String64-বিট আর্কিটেকচারের জন্য 8 বাইটে প্রসারিত হয়।
কিওয়ারটি

আপনাকে স্ট্রিংটি হ্যাশ সেটে সংরক্ষণ করতে হবে না। আপনি এর হ্যাশটিকে মান হিসাবে সংরক্ষণ করতে পারবেন, হ্যাশসেটটিকে অনেক ছোট করে তুলুন। তারপরে আপনি হ্যাশ আকারের সাথে খেলতে পারবেন - এটি যত বড় হবে তত ছোট মিথ্যা পজিটিভ রেট হবে।
ব্যবহারকারী 1028741

24

আমি একটি ব্লুম ফিল্টার কী, এটি কী করতে পারে এবং কী করতে পারে না তার ব্যাখ্যা দিয়ে শুরু করব, আমাদের এটির কেন দরকার, এটি কীভাবে কাজ করে তা একটি স্বজ্ঞাত বিবরণ দেখান এবং তারপরে যখন তারা কার্যকর হতে পারে তখন কিছু উদাহরণ দেই।

সুতরাং একটি মান পুষ্প ফিল্টার একটি হল সম্ভাব্য ডাটা স্ট্রাকচার যে পারেন * :


  • একটি সেটে উপাদান যুক্ত করুন
  • কোনও উপাদান সেটিংয়ে আছে কিনা তা বলার মাধ্যমে definitely not in the setবা পরীক্ষা করে দেখুনpossibly in the set

এই possibly in the setঠিক কেন এটা সম্ভাব্য বলা হয়। স্মার্ট শব্দ ব্যবহার করে এর অর্থ হ'ল মিথ্যা ইতিবাচক সম্ভাবনা রয়েছে (এমন ঘটনা ঘটতে পারে যেখানে এটি মিথ্যাভাবে উপাদানটিকে ইতিবাচক মনে করে) তবে মিথ্যা নেতিবাচক অসম্ভব।

তবে এটি * করতে পারে না :

  • সেট থেকে একটি আইটেম সরান
  • আপনাকে বর্তমানে আপনার সেটে থাকা সমস্ত উপাদানগুলির একটি তালিকা দিন

* এই ক্যান / সেটটি বেসিক ব্লুম ফিল্টারের জন্য for কারণ এটি একটি দরকারী ডেটা কাঠামো যা অনেক আগে তৈরি হয়েছিল, লোকেরা কীভাবে অন্যান্য দরকারী বৈশিষ্ট্যগুলি দিয়ে এটি বাড়িয়ে তুলতে পারে তা খুঁজে পেয়েছিল found


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

এর অর্থ হ'ল আমরা সেখানে কতগুলি উপাদান সঞ্চয় করি তা বিবেচ্য নয়, স্থানটি একই হবে। হ্যাঁ 10^6উপাদানগুলির সাথে একটি ব্লুম ফিল্টার (অকেজো ব্লুম ফিল্টার) 10^20উপাদানগুলির সাথে একটি ব্লুম ফিল্টার এবং উপাদানগুলির সাথে ব্লুম ফিল্টার হিসাবে একই স্থান গ্রহণ করবে 0। তাহলে কত জায়গা লাগবে? এটি সিদ্ধান্ত নেওয়া আপনার উপর নির্ভর করে (তবে এর একটি বাণিজ্য রয়েছে: possible in the setউত্তরগুলির সাথে আপনার যত বেশি অনিশ্চয়তা রয়েছে তত বেশি অনিশ্চিত হয়ে পড়ে ।

আর একটি দুর্দান্ত জিনিস হ'ল এটি স্থান ধ্রুবক। আপনি যখন কোনও সেটে ডেটা সংরক্ষণ করেন, আপনাকে আসলে এই ডেটাটি সংরক্ষণ করতে হবে। সুতরাং আপনি যদি সঞ্চয় করেন তবে আপনার this long string in the setকমপক্ষে 27 বাইট স্পেস ব্যবহার করতে হবে। তবে 1% ত্রুটি এবং কে ** এর সর্বোত্তম মানের জন্য আপনার কোনও উপাদান প্রতি 9.6 বিট (<2 বাইট) প্রয়োজন হবে (এটি সংক্ষিপ্ত আন্ত বা পাঠ্যের বিশাল প্রাচীর)।

আরেকটি সম্পত্তি হ'ল সমস্ত ক্রিয়াকলাপ ধ্রুবক সময় নিচ্ছে, যা সেটগুলির ক্ষেত্রে নিয়মিত ধ্রুবক সময়ের মতো একেবারে সমান নয় (মনে রাখবেন যে সেটে যদি সংঘর্ষ হয় তবে এটি O(n)সময়ের সাথে খারাপ হতে পারে)।

** কে ব্লুম ফিল্টারে ব্যবহৃত হ্যাশ ফাংশনের একটি মান


ব্লুম ফিল্টারগুলি কীভাবে কাজ করে তা আমি বর্ণনা করব না (উইকিপিডিয়া নিবন্ধটি সবকিছু ব্যাখ্যা করার জন্য খুব ভাল কাজ করে)। এখানে আমি সংক্ষিপ্তভাবে বেসিকগুলি বলব।

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

এমনকি এই বিবরণটি কেন আমরা নিশ্চিত হতে পারি না তা বুঝতে যথেষ্ট (আপনি সমস্ত বিট অন্যান্য বিভিন্ন মান থেকে সেট করতে পারেন)। এটি কীভাবে কাজ করে তার একটি দুর্দান্ত দৃশ্যায়ন এখানে ।

এখানে চিত্র বর্ণনা লিখুন


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

এখানে আরও কংক্রিট বর্ণনার তালিকা রয়েছে:

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

13

ব্লুম ফিল্টারগুলি বায়োইনফরমেটিক্সে বেশ কার্যকর। নিয়মিত হ্যাশ ব্যবহারের তুলনায় এগুলি আরও স্থান দক্ষ হতে পারে, বিশেষত যখন আপনি যে স্ট্রিংগুলির সাথে কাজ করছেন তার আকার খুব ছোট বর্ণমালা অর্থাৎ {এ, জি, টি, সি with সহ কয়েক মিলিয়ন অক্ষর হতে পারে} এগুলি সাধারণত কোনও জেনোমে কোনও নির্দিষ্ট কে-মের উপস্থিত বা অনুপস্থিত কিনা তা নির্ধারণ করতে ব্যবহার করা হয়। এখানে প্রাসঙ্গিক কিছু জন্য ব্যবহৃত একটি উদাহরণ আছে

সম্পাদনা করুন:

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

এটি মানব জিনোমের সাথে তুলনা করুন, যেখানে উপাদানের আকার বৃদ্ধি হ্যাশ টেবিলের আকার উল্লেখযোগ্যভাবে বৃদ্ধি করে (টেবিলের আকার 4 * 4 কে )। এটি ধরে নিচ্ছে যে আপনি 2 বিট / বর্ণ ব্যবহার করে উপাদানগুলি এনকোড করেছেন।


1
দুঃখিত, সম্ভবত আমি ভুল বোঝাবুঝি করছি তবে নিয়মিত হ্যাশের তুলনায় তারা কীভাবে আরও বেশি জায়গা দক্ষ হতে পারে? একটি স্ট্রিংয়ের হ্যাশ দৈর্ঘ্য আউটপুট সংশোধন করা হয়েছে, এবং আপনি কেবল 0 বা 1. যে মান সেট এই কি বউল ফিল্টার করতে হবে, কিন্তু পুষ্প ফিল্টার উপর এটা করতে হবে একাধিক হ্যাশ ফাংশন। আমি কোথায় ভুল বুঝছি?
মাথা ব্যথা

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

1
কেন একটি ব্লুম ফিল্টার তৈরি না করে কেবল একটি হ্যাশ ফাংশন দিয়ে? হতে পারে "তুলনামূলকভাবে বড়" হ্যাশ ফাংশন। তবে অনেকের পরিবর্তে একটি
জিওরজিম

7

যদি কোনও ব্লুম ফিল্টার ফেরত দেয় যে কোনও আইটেম সেটটির সদস্য, তবে মিথ্যা ধনাত্মক হওয়ার জন্য একটি নির্দিষ্ট সম্ভাবনা রয়েছে। সেটে সদস্যতা নির্দেশ করতে যদি কেবল একটি একক হ্যাশ ফাংশন ব্যবহার করা হয়, তবে একাধিক হ্যাশ ফাংশন ব্যবহার করার চেয়ে কোনও মিথ্যা পজিটিভের সম্ভাবনা বেশি।


উত্তরের মাংস সম্পর্কে কিছু গুরুতর বিবরণ প্রয়োজন: " একাধিক হ্যাশ ফাংশন ব্যবহার করার চেয়ে মিথ্যা
পজিটিভের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.