आह, मेरे दिमाग ने सिर्फ गियर में लात मारी है, मेरे पास अब एक समझदार सुझाव है। शायद बहुत देर हो गई अगर यह एक साक्षात्कार था, लेकिन कभी मन नहीं:
मशीन 1 को "नियंत्रण मशीन" कहा जाएगा, और तर्क के लिए या तो यह सभी डेटा के साथ शुरू होता है, और इसे बराबर पार्सल में अन्य 99 मशीनों को भेजता है, या फिर डेटा मशीनों के बीच समान रूप से वितरित होने लगता है, और यह अपने डेटा का 1/99 दूसरों को भेजता है। विभाजन के बराबर होने की जरूरत नहीं है, बस करीब है।
एक-दूसरे मशीन अपने डेटा को सॉर्ट करती है, और ऐसा इस तरह से करती है जो पहले कम मूल्यों को खोजने का पक्षधर है। तो उदाहरण के लिए एक क्विकॉर्ट, हमेशा विभाजन के निचले हिस्से को पहले छाँटता है [*]। यह अपने डेटा को बढ़ते हुए क्रम में नियंत्रण मशीन पर वापस लिखता है जैसे ही वह कर सकता है (अतुल्यकालिक आईओ का उपयोग करना ताकि छंटाई जारी रहे, और शायद नागल ऑन: थोड़ा प्रयोग करें)।
नियंत्रण मशीन डेटा के 99-मर्ज पर पहुँचती है, जैसे ही वह आती है, लेकिन मर्ज किए गए डेटा को छोड़ देती है, बस उसके द्वारा देखे गए मानों की संख्या को ध्यान में रखते हुए। यह औसतन 1/2 बिलियन और 1/2 बिलियन प्लस ओनेथ वैल्यू के माध्य के रूप में गणना करता है।
यह "झुंड में सबसे धीमी" समस्या से ग्रस्त है। एल्गोरिथ्म तब तक पूरा नहीं हो सकता जब तक कि माध्यिका से कम हर मूल्य एक छँटाई मशीन द्वारा नहीं भेजा गया हो। वहाँ एक उचित मौका है कि इस तरह के एक मूल्य डेटा के पार्सल के भीतर काफी अधिक होगा। इसलिए एक बार डेटा का प्रारंभिक विभाजन पूरा हो जाने के बाद, अनुमानित रनिंग टाइम 1/99 वें डेटा को सॉर्ट करने और नियंत्रण कंप्यूटर पर वापस भेजने का समय का संयोजन है, और नियंत्रण का समय 1/2 डेटा पढ़ने के लिए है। । "संयोजन" उन समयों के अधिकतम और योग के बीच है, जो संभवतः अधिकतम के करीब है।
मेरी वृत्ति यह है कि एक नेटवर्क पर डेटा भेजने के लिए इसे छांटने की तुलना में तेज़ होना चाहिए (केवल मंझले का चयन करने दें) यह एक बहुत ही तेज़ फास्ट नेटवर्क होना चाहिए। हो सकता है कि एक बेहतर संभावना हो, यदि नेटवर्क को तात्कालिक माना जा सकता है, उदाहरण के लिए यदि आपके पास डेटा युक्त रैम तक समान पहुंच के साथ 100 कोर हैं।
चूंकि नेटवर्क I / O के बाउंड होने की संभावना है, ऐसे कुछ ट्रिक्स हो सकते हैं जिन्हें आप कम से कम कंट्रोल मशीन पर वापस आने वाले डेटा के लिए कर सकते हैं। उदाहरण के लिए, "1,2,3, .. 100" भेजने के बजाय, शायद एक छँटाई मशीन एक संदेश भेज सकती है जिसका अर्थ है "101 से कम 100 मान"। नियंत्रण मशीन तब एक संशोधित मर्ज कर सकती है, जिसमें यह उन सभी में से सबसे ऊपर के मानों को कम से कम पाता है, फिर सभी छँटाई मशीनों को बताता है कि यह क्या था, ताकि वे (a) नियंत्रण मशीन को बता सकें कि कैसे उस मान के नीचे "गणना" करने के लिए कई मान हैं, और (बी) उस बिंदु से अपना क्रमबद्ध डेटा भेजना फिर से शुरू करते हैं।
अधिक सामान्यतः, शायद एक चतुर चुनौती-प्रतिक्रिया अनुमान लगाने का खेल है जिसे नियंत्रण मशीन 99 छँटाई मशीनों के साथ खेल सकती है।
इसमें मशीनों के बीच राउंड-ट्रिप शामिल हैं, हालांकि, मेरा सरल संस्करण पहले से बचा जाता है। मुझे वास्तव में नहीं पता है कि उनके सापेक्ष प्रदर्शन को अंधा कैसे करना है, और चूंकि ट्रेड-ऑफ जटिल हैं, इसलिए मुझे लगता है कि वहाँ कुछ भी बेहतर समाधान हैं जो मैं अपने बारे में सोचूंगा, यह कभी भी एक वास्तविक समस्या है।
[*] उपलब्ध स्टैक परमिटिंग - यदि ओ (एन) अतिरिक्त स्थान नहीं है, तो आपकी पसंद का हिस्सा पहले करने के लिए विवश है। लेकिन अगर आपके पास पर्याप्त अतिरिक्त स्थान है, तो आप अपनी पिक ले सकते हैं, और यदि आपके पास पर्याप्त स्थान नहीं है, तो आप कम से कम उपयोग कर सकते हैं जो आपको कुछ कोनों को काटने के लिए है, पहले कुछ विभाजन के लिए छोटा हिस्सा करके।