मैं एक एल्गोरिथ्म पर काम कर रहा हूं जिसमें कम से कम 2 सेटों के चौराहों द्वारा उत्पन्न सेट के आकार की गणना करने की आवश्यकता है। अधिक विशेष रूप से:
जिन सेट्स को इंटरसेक्ट किया गया है, वे एसक्यूएल क्वेश्चन द्वारा तैयार किए जाते हैं, और चीजों को फास्ट रखने के प्रयास में, मुझे समय से पहले प्रत्येक क्वेरी की एक काउंट मिलता है, फिर सेट को सबसे कम काउंट ( ) के साथ लेते हैं और उन आईडी का उपयोग सीमा के रूप में करते हैं। बाकी बड़े प्रश्न, इसलिए प्रतिच्छेदन प्रभावी रूप से बन जाता है:
यहां तक कि यह रणनीति मुझे चलाने के लिए कुछ बहुत बड़े प्रश्नों के साथ छोड़ देती है, बाद सेकभी-कभी बड़े हो सकते हैं। उस से निपटने के लिए मेरा विचार का एक यादृच्छिक नमूना ले रहा है और इसे एक उचित अनुमान पर वापस एक्सट्रपलेशन करने से पहले बाकी सेट्स के साथ इंटरसेक्ट कर रहा है । मेरा सवाल है: नमूने के बारे में जाने का सबसे अच्छा तरीका क्या है और फिर मूल्य पर वापस जाने के लिए एक्सट्रपलेशन करना है, अगर पूरी तरह से सही नहीं है, तो एक पूर्वानुमान योग्य त्रुटि सीमा है?
यहाँ मैंने जो अभी तक कोशिश की है (छद्म कोड में, की तरह):
sample_threshold := 10000
factor := 1
if (len(A0) > sample_treshold) {
factor = sample_threshold / len(A0)
}
// Take a random sample of size 10000 from A0
// Intersect all the other sets with the A0 sample, then with each other
working_set := A0
for i, a := range A {
a = intersect(A0, a)
working_set = intersect(working_set, a)
}
z := len(working_set) * (1 / factor)
यह कोड काम करता है, लेकिन लगातार z
उच्चतर अनुमान लगाते हुए कम नमूने के आकार के साथ लगातार overestimate लगता है । इसके अतिरिक्त, मुझे यकीन नहीं है कि यह दो से अधिक सेट के साथ स्केल कैसे होगा।
मुझे उम्मीद है कि यह प्रश्न समझ में आता है, मुझे बताएं कि क्या मैं आगे कुछ भी स्पष्ट कर सकता हूं। इसके अलावा, यदि यह प्रश्न विषय से दूर है या कहीं और है, तो कृपया मुझे बताएं और मुझे इसे स्थानांतरित करने में खुशी होगी।
प्रति बिल की टिप्पणी , मैं नमूने का आकार बनाम त्रुटि को दिखाने के लिए कुछ त्वरित परीक्षण के भाग गया। प्रत्येक नमूना आकार की बाल्टी को 20 बार चलाया गया था, और जैसा कि आप देख सकते हैं कि एक बहुत स्पष्ट प्रवृत्ति है:
ORDER BY RAND()
, जो सही नहीं है, लेकिन इस कार्य के लिए उपयुक्त होना चाहिए।