আমি এটি কীভাবে কসাই দিতে পারি তা দেখার জন্য এটি একটি শট দেওয়ার চেষ্টা করি। :-)
সুতরাং, শুরু করার জন্য, আপনাকে একটি নিয়মিত ব্লুম ফিল্টার তৈরি করতে সক্ষম হওয়া দরকার যা মিথ্যা ধনাত্মক হওয়ার সর্বাধিক সম্ভাবনা সহ সীমাবদ্ধ সংখ্যক উপাদানকে মঞ্জুরি দেয়। স্কেলযোগ্য বাস্তবায়ন তৈরি করার চেষ্টা করার আগে আপনার বেসিক ফিল্টারটিতে এই বৈশিষ্ট্যগুলির সংযোজন প্রয়োজন।
সম্ভাবনাটি কী তা নিয়ন্ত্রণ এবং অপ্টিমাইজ করার চেষ্টা করার আগে প্রদত্ত ব্লুম ফিল্টার আকারের সম্ভাবনাটি কী তা নির্ধারণ করতে পারি।
প্রথমে আমরা বিটফিল্ডটি বিভক্ত করি আমাদের কাছে কতগুলি হ্যাশ ফাংশন রয়েছে (বিটগুলির মোট সংখ্যা / হ্যাশ ফাংশনগুলির সংখ্যা = স্লাইস) বি বি কে টুকরোগুলি পেতে যা প্রতিটি হ্যাশ ফাংশনকে উপস্থাপন করে তাই প্রতিটি উপাদান সর্বদা কে বি বিট দ্বারা বর্ণিত হয়।
আপনি যদি স্লাইসের সংখ্যা বা বিলে বিট সংখ্যা প্রতি স্লাইস বৃদ্ধি করেন তবে মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা হ্রাস পাবে।
এটি আরও অনুসরণ করে যে উপাদানগুলি যুক্ত হওয়ার সাথে সাথে আরও বিট 1 সেট করা হয়, তাই মিথ্যা ধনাত্মকতা বৃদ্ধি পায়। আমরা এটিকে প্রতিটি ফালি "পূরণ অনুপাত" হিসাবে উল্লেখ করি।
যখন ফিল্টারটি প্রচুর পরিমাণে ডেটা ধারণ করে, আমরা ধরে নিতে পারি যে এই ফিল্টারটির জন্য মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা হ'ল টুকরো সংখ্যায় বাড়ানো পূরণ অনুপাত (যদি আমরা অনুপাত ব্যবহারের পরিবর্তে বিটগুলি গণনা করতে পারি তবে এটি সরল করে তোলে পুনরাবৃত্তি সমস্যা সহ একটি অনুচ্ছেদ)।
সুতরাং, ব্লুম ফিল্টারটিতে মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা কীভাবে বেছে নেওয়া যায় তা আমরা কীভাবে আবিষ্কার করব? আমরা স্লাইসের সংখ্যাটি সংশোধন করতে পারি (যা পূরণের অনুপাতকে প্রভাবিত করবে)।
আমাদের কতগুলি স্লাইস থাকা উচিত তা নির্ধারণের জন্য, আমরা একটি স্লাইসের অনুকূল ফিল ভেরির অনুপাতটি দিয়ে শুরু করি। যেহেতু ভরাট অনুপাতটি একটি স্লাইসে বিটের সংখ্যা দ্বারা নির্ধারিত হয় যা 1 বিটের সংখ্যার তুলনায় 1 যা বিট 0, সুতরাং আমরা নির্ধারণ করতে পারি যে প্রতিটি বিট (100% - (এক টুকরোতে 1 / বিট) এর সম্ভাব্যতার সাথে আনসেট থাকবে না )। যেহেতু আমরা একাধিক আইটেম sertedোকাতে যাচ্ছি, আমাদের খ্যাতি সমস্যা সহ আরও একটি অনুমান রয়েছে এবং আমরা প্রত্যাশিত পূরণের অনুপাতের মধ্যে জিনিসগুলি প্রসারিত করি যা (100% - ((100% - (এক টুকরো 1 / বিট))) ^ "উপাদানগুলি "োকানো"))। ঠিক আছে, দেখা যাচ্ছে যে এটি অন্য সমীকরণের সাথে খুব মিল। কাগজে, তারা পূরণের অনুপাতটিকে অন্য সমীকরণের সাথে সম্পর্কিত করে তাই এটি টেলর সিরিজের (1-e ^ (- n / m)) সাথে দুর্দান্তভাবে ফিট করে। এর সাথে কিছুটা ফিউজিংয়ের পরে, এটি দেখা যাচ্ছে যে সর্বোত্তম পূরণের অনুপাত সর্বদা প্রায় 50% থাকে,
সুতরাং, যেহেতু কোনও ফিল্টারের সম্ভাবনা হ'ল ভরাট অনুপাতটি স্লাইসের সংখ্যায় উত্থিত হয়, তাই আমরা 50% পূরণ করতে পারি এবং পি = (50%) ^ কে বা কে = লগ 2 (1 / পি) পেতে পারি। এরপরে আমরা কোনও স্কেলযোগ্য ব্লুম ফিল্টারের ফিল্টারগুলির তালিকাতে প্রদত্ত ফিল্টারের জন্য আমাদের তৈরি হওয়া ফালিগুলির সংখ্যা গণনা করতে এই ফাংশনটি ব্যবহার করতে পারি।
def slices_count(false_positive_probability):
return math.ceil(math.log(1 / false_positive_probability, 2))
সম্পাদনা: এটি লেখার পরে, আমি টিউওসিপি ভল্ট 1, পিপি 442-445-তে বর্ধিত সিস্টেম ভিত্তিক গতিশীল মেমরির বরাদ্দ পড়তে পড়তে "পঞ্চাশ শতাংশ নিয়ম" এর একটি উল্লেখ পেয়েছিলাম (1) -e ^ (- N / মি))। নুথ একটি কাগজকে "পঞ্চাশ শতাংশ নিয়ম পুনর্বিবেচনা করেছেন" ধারণাটির কিছুটা পটভূমিতে উল্লেখ করেছেন ( পিডিএফ এখানে উপলব্ধ )।