P2 एल्गोरिथ्म एक अच्छा खोज है। यह quantile के कई अनुमान लगाते हैं, उन्हें समय-समय पर अद्यतन करने, और का उपयोग करके काम करता है द्विघात quantile अनुमान लगाने के लिए (रेखीय नहीं, घन नहीं) प्रक्षेप। लेखकों का दावा है कि द्विघात प्रक्षेप से बेहतर ढंग से काम करता है।
आप बिल्कुल नहीं बताते हैं कि यह दृष्टिकोण आपके "भारी-पूंछ वाले" डेटा के लिए कैसे विफल हो जाता है, लेकिन यह अनुमान लगाना आसान है: भारी-पूंछ वाले वितरण के लिए चरम मात्राओं का अनुमान तब तक अस्थिर रहेगा जब तक बड़ी मात्रा में डेटा एकत्र नहीं किया जाता है। लेकिन यह एक समस्या है (कुछ हद तक) भले ही आप सभी डेटा को स्टोर करने जा रहे हों, इसलिए चमत्कार की उम्मीद न करें!
किसी भी दर पर, सहायक मार्कर सेट क्यों नहीं किए जाते हैं - आइए उन्हें और --within पर कॉल करें जो आप निश्चित हैं कि क्वांटाइल झूठ होगा, और और बीच सभी डेटा को संग्रहीत ? जब आपका बफ़र भर जाता है तो आपको इन मार्करों को अपडेट करना होगा, हमेशा रखते हुए । ऐसा करने के लिए एक सरल एल्गोरिथ्म (a) के वर्तमान पी 2 अनुमान और (b) से कम डेटा की संख्या और से अधिक डेटा की संख्या के से । इस फैशन में, आप उच्च निश्चितता के साथ, मात्रात्मक अनुमान लगा सकते हैं और साथ ही साथ यदि आपके पास संपूर्ण डेटासेट हमेशा उपलब्ध था, लेकिन आपको केवल एक अपेक्षाकृत छोटे बफर की आवश्यकता है।एक्स 6 एक्स 0 एक्स 6 एक्स 0 ≤ एक्स 6 एक्स 0 एक्स 6x0x6x0एक्स6एक्स0≤ x6एक्स0एक्स6
विशेष रूप से, मैं डेटा मान अनुक्रम के बारे में आंशिक जानकारी बनाए रखने के लिए एक डेटा संरचना का प्रस्ताव कर रहा हूं । यहाँ, एक लिंक की गई सूची हैn x 1 , x 2 , … , x n y( के , वाई , एन )nएक्स1, एक्स2, ... , एक्सny
y =( x)( एन )[ k + १ ]≤ x( एन )[ k + २ ]≤ ⋯ ≤ एक्स( एन )[ k + m ]) का है ।
इस अंकन में को दर्शाता है जो अब तक पढ़े गए मानों में से सबसे छोटा है । एक स्थिरांक है, बफर । i th n x m yएक्स( एन )[ i ]मैंवेंn एक्समीटरy
एल्गोरिथ्म भरने से शुरू होता है पहले से सबसे बड़ा करने के लिए, डेटा का सामना करना पड़ा मूल्यों और उन्हें क्रमबद्ध क्रम में रखकर छोटी से छोटी। चलो quantile अनुमान लगाया जा करने के लिए हो सकता है; जैसे, = 0.99। पढ़ने पर तीन संभावित क्रियाएं होती हैं: m q q x n + १yमीटरक्षक्षएक्सएन + १
अगर , वेतन वृद्धि । kएक्सएन + १< एक्स( एन )[ k + १ ]कश्मीर
यदि , कुछ नहीं करें।एक्सएन + १> एक्स( एन )[k+m]
अन्यथा, को में डालें । yxn+1y
किसी भी घटना में, वृद्धि ।n
डालने प्रक्रिया कहते हैं में क्रमबद्ध क्रम में और उसके बाद में चरम मानों में से एक को समाप्त : y yxn+1yy
यदि , तो को और वेतन वृद्धि से हटा दें ;x ( n ) [ k + 1 ] y kk+m/2<nqx(n)[k+1]yk
अन्यथा, निकालें से । yx(n)[k+m]y
बशर्ते पर्याप्त रूप से बड़ा हो, यह प्रक्रिया उच्च संभाव्यता के साथ वितरण के सही मात्रा को पूरा करेगी। किसी भी स्तर पर यह करने के मामले में हमेशा की तरह अनुमान लगाया जा सकता और , जो संभवतः में झूठ होगा । (मेरा मानना है कि केवल डेटा की अधिकतम राशि ( ) के वर्गमूल की तरह स्केल करना है , लेकिन मैंने यह साबित करने के लिए कठोर विश्लेषण नहीं किया है।) किसी भी दर पर, एल्गोरिथ्म का पता लगाएगा कि क्या यह सफल हुआ है (द्वारा) की तुलना और करने के लिए )।n एक्स ( एन ) [ ⌊ क्ष n ⌋ ] एक्स ( एन ) [ ⌈ क्ष n ⌉ ] y मीटर एन कश्मीर / n ( कश्मीर + मी ) / n क्षmnx(n)[⌊qn⌋]x(n)[⌈qn⌉]ymNk/n(k+m)/nq
100,000 से अधिक मूल्यों के साथ परीक्षण करना, और (सबसे कठिन मामला) का उपयोग करके इंगित करता है कि इस एल्गोरिथ्म में का सही मान प्राप्त करने में 99.5% सफलता दर है। । मानों की एक धारा के लिए , जिसमें केवल दो मिलियन (लेकिन तीन या चार मिलियन बेहतर विकल्प होंगे) बफर की आवश्यकता होगी। बफ़र के लिए सॉर्ट की गई दोगुनी लिंक की गई सूची का उपयोग करने के लिए या ऑपरेशंस को पहचानने और हटाने के लिए = प्रयास की आवश्यकता होती है । अपेक्षाकृत महंगी प्रविष्टि को आमतौर पर केवल क्ष=.5एक्स ( एन ) [ ⌊ क्ष n ⌋ ] एन=10 12 हे(लॉग( √m=2N−−√q=.5x(n)[⌊qn⌋]N=1012हे(लॉग(एन))हे(1)हे( √O(log(N−−√))O(log(N))O(1)हे(एन+ √O(N−−√)बार। इस प्रकार इस एल्गोरिथ्म की कम्प्यूटेशनल लागतें समय में और भंडारण में हैं।ओ( √O(N+N−−√log(N) ) = हे ( एन)ओ ( एन--√)