समावेश परीक्षण के लिए पूर्णांकों के समुच्चय


10

मैं सेट H (।) और एक संबंध R (।,) पर एक हैश फ़ंक्शन की तलाश कर रहा हूं, जैसे कि यदि A को B में शामिल किया गया है तो R (H (A), H (B))। बेशक, आर (।,) को सत्यापित करना आसान होना चाहिए (निरंतर समय), और एच (ए) को रैखिक समय में गणना की जानी चाहिए।

H और R का एक उदाहरण है:

  • H(A)=xA1<<(h(x)modk) , जहां k एक पूर्णांक है और h (x) पूर्णांकों पर एक हैश फ़ंक्शन है।
  • आर (एच (ए), एच (बी)) = (एच (ए) और एच (बी)) == एच (ए)

क्या कोई अन्य अच्छे उदाहरण हैं? (good को परिभाषित करना मुश्किल है लेकिन सहज रूप से यदि R (H (A), H (B)) है तो whp A को B में शामिल किया जाता है)।

बाद में संपादित करें :

  1. मैं हैश फ़ंक्शंस के परिवार की तलाश में हूं। मेरे कई सेट हैं; प्रत्येक सेट में 3 - 8 तत्व; उनमें से 90% में 3 या 4 तत्व हैं। उदाहरण हैश फ़ंक्शन जो मैंने दिया है वह इस मामले के लिए बहुत अच्छी तरह से वितरित नहीं है।
  2. H (।) के बिट्स की संख्या (मेरे उदाहरण में, k) जो छोटी होनी चाहिए (यानी H। (।) एक पूर्णांक या लंबे समय में फिट होनी चाहिए)।
  3. R की एक अच्छी संपत्ति यह है कि यदि H (।) में k बिट्स हैं तो R (।)। (3 ^ k - 2 ^ k) / 4 ^ k युग्मों के लिए सही है, अर्थात। बहुत कम जोड़े के लिए।
  4. ब्लूम फिल्टर बड़े सेटों के लिए विशेष रूप से अच्छे हैं। मैंने इस समस्या के लिए बीएफ का उपयोग करने की कोशिश की, लेकिन इष्टतम परिणाम केवल एक फ़ंक्शन के साथ थे।

(crosspost से stackoverflow , मैं एक जवाब काफी अच्छा प्राप्त नहीं किया था)


"कोड़ा" किस पर? क्या आप मानते हैं कि आपके इनपुट एक निश्चित वितरण से आते हैं?
जुल्का सुमेला 29:10

और क्या आप वास्तव में एक एकल, निश्चित हैश फ़ंक्शन की तलाश कर रहे हैं और हैश फ़ंक्शन का परिवार नहीं है?
जुका सुकोमे

@ जुक्का: मुझे लगता है कि अगर आर (एच (ए), एच (बी)) का मतलब है, तो उच्च संभावना के साथ हम निष्कर्ष निकालते हैं कि ए बी का सबसेट है। संभावना ए और बी के यादृच्छिक विकल्पों पर ली गई है, साथ ही साथ एच और आर (यदि कोई हो) के आंतरिक सिक्के।
बजे एमएस डौस्टी

मैं हैश फ़ंक्शंस के परिवार की तलाश में हूं। मेरे सेट छोटे होते हैं (3 - 8 तत्व प्रत्येक; उनमें से 90% में 3 या 4 तत्व हैं) इसलिए मैंने जो उदाहरण दिया है, वह बहुत अच्छी तरह से वितरित नहीं है।
अलेक्जेंड्रू

R की एक अच्छी संपत्ति यह है कि यदि H (।) में n बिट्स हैं तो R (।)। (3 ^ n - 2 ^ n) / 4 ^ n जोड़े के लिए सही है, अर्थात। बहुत कम जोड़े के लिए।
अलेक्जेंड्रू

जवाबों:


10

(यह जवाब मूल रूप से टिप्पणियों में था, लेकिन मैं इसे सुरेश के सुझाव पर एक अलग उत्तर में स्थानांतरित कर रहा हूं।)

बहुत छोटे सेट के साथ अपने आवेदन के लिए आप शायद ब्लूम हैश फंक्शन की संख्या चाहते हैं काफी झूठे सकारात्मक की संख्या को कम करने के लिए बड़ा हो सकता है। अभिकलन समय बचाने के लिए मैं एक ब्लूम फ़िल्टर के निम्नलिखित भिन्नता का सुझाव देता हूं। मान लें कि आप तीन परंपरागत हैश फंक्शन है , , कि प्रत्येक उत्पादन तत्वों के लिए -बिट तार। प्रत्येक तत्व को बिटवाइस और इन तीन हैश फ़ंक्शंस के लिए हैश करें। परिणामी तत्व हैश लगभग1 घंटा 2 घंटे 3 मीटर 2 - 3 = 1 / 8 टी kh1h2h3m23=1/8thलोगों को। प्रत्येक सेट को बिटवाइस या उसके घटक तत्वों के हैश को सेट करें। क्योंकि आपके सेट में 3-8 तत्व होते हैं, जिसके परिणामस्वरूप हैश एक-आधे के पड़ोस में होगा, जो संभवत: यह है कि आप झूठी सकारात्मक दर को नीचे रखना चाहते हैं।

उपरोक्त योजना के बीच का अंतर पारंपरिक ब्लूम फ़िल्टर क्लासिक बीच अंतर के अनुरूप है Erdos यादृच्छिक ग्राफ मॉडल और यादृच्छिक अनियमित रेखांकन। उपर्युक्त योजना में ब्लूम हैश की प्रभावी संख्या , माध्य के आसपास थोड़ी भिन्न है, लेकिन बहुत बड़ी है, इसलिए इस अंतर को कोई फर्क नहीं पड़ना चाहिए। डी के एम / 8 मीटर / 8Gn,pdkm/8m/8


यह विशेष रूप से बड़े मीटर (32 या 64) के लिए अच्छा है जैसा आपने सुझाव दिया था।
अलेक्जेंड्रू

4

मैं आपके प्रस्ताव के समान संबंध वाले हैश के रूप में ब्लूम फ़िल्टर का उपयोग करने का प्रयास करूंगा। आपके अनुप्रयोग के लिए सबसे अच्छा फ़िल्टर आकार और हैश फ़ंक्शन की संख्या बहुत कठिन नहीं होनी चाहिए; प्रेरणा के लिए विकिपीडिया के ब्लूम फ़िल्टर लेख देखें । आप कितनी बुरी तरह झूठे सकारात्मक से बचना चाहते हैं इसके आधार पर और पर्याप्त हो सकते हैं।k m = 64 k = 4mkm=64k=4


बहुत छोटे सेट के साथ अपने आवेदन के लिए आप शायद काफी बड़ा चाहते हैं । यह पारंपरिक दृष्टिकोण के साथ काफी धीमा हो सकता है। मैं इसके बजाय निम्नलिखित सुझाव देता हूं। k
वॉरेन शूडी

(पिछली टिप्पणी की निरंतरता) यह अनिवार्य रूप से ब्लूम फिल्टर का एक बदलाव है। मान लें कि आपके पास तीन-हैश फ़ंक्शंस , , उन तत्वों के लिए हैं जो -bit स्ट्रिंग्स का उत्पादन करते हैं। एक तत्व को बिटवाइस और इन तीनों में मिलाएं। परिणामी हैश में लगभग 1 / 8th 1s होगा। बिट सेट या उसके घटक तत्वों की हैश को सेट करें। क्योंकि आपके सेट में 3-8 तत्व हैं, जिसके परिणामस्वरूप हैश में एक-आधे लोगों की अच्छी स्थिति होगी, जो संभवतः झूठी सकारात्मक दर को नीचे रखने में मदद करेगा। एच 2 एच 3 एमh1h2h3m
वॉरेन शूडी

इस भिन्नता का लाभ केवल यह है कि यह शब्द संचालन में निहित समानता का बेहतर उपयोग करता है जो अधिकांश कंप्यूटरों में होता है।
वारेन शूडी

वारेन, आपको इसे उत्तर के रूप में पोस्ट करना चाहिए। यह कुछ वोटों के हकदार हैं
सुरेश वेंकट

2
@Warren, @ सुरेश: मुझे लगता है कि इन दो निकट संबंधी उत्तरों को संयोजित करने के लिए यह अधिक समझ में आता है, और फिर टिप्पणियों को हटा दें। इसका पालन करना आसान होगा, विशेष रूप से क्योंकि एक उत्तर दूसरे में परिभाषित मापदंडों को संदर्भित करता है।
जुक्का सूमेला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.