मुझे उम्मीद है कि मैं इस समस्या में कुछ नया योगदान दे सकता हूं। मैंने देखा कि सभी उत्तर इस तथ्य की उपेक्षा करते हैं कि दो बिंदु हैं जहां आप प्रीप्रोसेसिंग कर सकते हैं अपने कपड़े धोने के प्रदर्शन को धीमा करने के बिना ।
इसके अलावा, हमें बड़े परिवारों के लिए भी बड़ी संख्या में मोजे पहनने की जरूरत नहीं है। मोजे को दराज से बाहर निकाला जाता है और पहना जाता है, और फिर उन्हें एक जगह (शायद एक बिन) फेंक दिया जाता है जहां वे लुटेरा होने से पहले रहते हैं। हालांकि मैं बिन लाईफो-स्टैक नहीं कहूंगा, मैं कहूंगा कि यह मान लेना सुरक्षित है
- लोग बिन के एक ही क्षेत्र में अपने दोनों मोज़े टॉस करते हैं,
- बिन किसी भी बिंदु पर यादृच्छिक नहीं है, और इसलिए
- इस बिन के शीर्ष से लिए गए किसी भी उपसमुच्चय में आम तौर पर एक जोड़ी के दोनों मोज़े होते हैं।
चूंकि मुझे पता है कि सभी वाशिंग मशीन आकार में सीमित हैं (चाहे आपको कितने भी कपड़े धोना पड़े), और वास्तविक यादृच्छिकता वाशिंग मशीन में होती है, चाहे हमारे पास कितने भी मोज़े हों, हमारे पास हमेशा छोटे उपसमुच्चय होते हैं जिनमें लगभग कोई नहीं होता है एकमात्र।
हमारे दो प्रीप्रोसेसिंग चरण "कपड़े पर मोज़े डाल रहे हैं" और "कपड़े से मोज़े लेना", जो हमें करना है, ताकि मोज़े न केवल साफ हों बल्कि सूखे भी हों। वाशिंग मशीन की तरह, कपड़े की परतें बारीक होती हैं, और मुझे लगता है कि हमारे पास उस लाइन का पूरा हिस्सा है जहां हम अपने मोज़े देखते हैं।
यहाँ put_socks_on_line () के लिए एल्गोरिथ्म है:
while (socks left in basket) {
take_sock();
if (cluster of similar socks is present) {
Add sock to cluster (if possible, next to the matching pair)
} else {
Hang it somewhere on the line, this is now a new cluster of similar-looking socks.
Leave enough space around this sock to add other socks later on
}
}
अपने समय को मोज़े इधर-उधर घुमाने या सबसे अच्छे मैच की तलाश में बर्बाद न करें, यह सब O (n) में किया जाना चाहिए, जिसे हमें बिना लाइन के बस डालने की भी आवश्यकता होगी। मोज़े अभी तक जोड़े नहीं गए हैं, हमारे पास केवल लाइन पर कई समानता वाले क्लस्टर हैं। यह मददगार है कि हमारे यहाँ मोजे का एक सीमित सेट है, क्योंकि इससे हमें "अच्छे" क्लस्टर बनाने में मदद मिलती है (उदाहरण के लिए, अगर मोज़े के सेट में केवल काले मोज़े हैं, तो रंगों द्वारा क्लस्टर करना रास्ता नहीं होगा)
यहां टेक_सूक्स_फ्रॉम_लाइन () के लिए एल्गोरिथ्म दिया गया है:
while(socks left on line) {
take_next_sock();
if (matching pair visible on line or in basket) {
Take it as well, pair 'em and put 'em away
} else {
put the sock in the basket
}
मुझे यह इंगित करना चाहिए कि शेष चरणों की गति में सुधार करने के लिए, यह बुद्धिमानी है कि बेतरतीब ढंग से अगला जुर्राब न उठाएं, लेकिन क्रमिक रूप से प्रत्येक क्लस्टर से जुर्राब के बाद जुर्राब लेना चाहिए। दोनों प्रीप्रोसेसिंग कदमों को केवल मोज़े को लाइन में या टोकरी में रखने से ज्यादा समय नहीं लगता है, जो कि हमें कोई फर्क नहीं पड़ता है, इसलिए इसे कपड़े धोने के प्रदर्शन में वृद्धि करनी चाहिए।
इसके बाद, हैश विभाजन एल्गोरिथ्म को करना आसान है। आमतौर पर, लगभग 75% मोज़े पहले से ही जोड़े जाते हैं, मुझे मोजे के बहुत छोटे उपसमूह के साथ छोड़ दिया जाता है, और यह सबसेट पहले से ही (कुछ हद तक) संकुलित है (मैं प्रीप्रोसेसिंग चरणों के बाद अपनी टोकरी में बहुत एंट्रॉपी का परिचय नहीं देता हूं)। एक और बात यह है कि बचे हुए गुच्छों को एक बार में संभाला जा सकता है, इसलिए टोकरी से पूरे गुच्छे को निकालना संभव है।
यहाँ Sort_remaining_clusters () के लिए एल्गोरिथ्म है:
while(clusters present in basket) {
Take out the cluster and spread it
Process it immediately
Leave remaining socks where they are
}
उसके बाद, कुछ ही मोज़े बचे हैं। यह वह जगह है जहां मैं सिस्टम में पहले से अनपेक्षित मोज़े पेश करता हूं और किसी विशेष एल्गोरिथ्म के बिना शेष मोज़े को संसाधित करता हूं - शेष मोज़े बहुत कम हैं और नेत्रहीन बहुत तेजी से संसाधित किए जा सकते हैं।
सभी शेष मोज़ों के लिए, मैं मानता हूं कि उनके समकक्ष अभी भी अनजान हैं और उन्हें अगले पुनरावृत्ति के लिए दूर रखा गया है। यदि आप समय के साथ अनपेक्षित मोज़े की वृद्धि दर्ज करते हैं (एक "जुर्राब रिसाव"), तो आपको अपने बिन की जांच करनी चाहिए - यह यादृच्छिक हो सकता है (क्या आपके पास बिल्लियों हैं जो वहां सोते हैं?)
मुझे पता है कि ये एल्गोरिदम बहुत सारी धारणाएँ लेते हैं: एक बिन जो लिफो स्टैक के कुछ प्रकार के रूप में कार्य करता है, एक सीमित, सामान्य कपड़े धोने की मशीन, और एक सीमित, सामान्य कपड़े - लेकिन यह अभी भी बहुत बड़ी संख्या में मोजे के साथ काम करता है।
समानता के बारे में: जब तक आप दोनों मोज़ों को एक ही बिन में टॉस नहीं करते, आप आसानी से उन सभी चरणों को समानांतर कर सकते हैं।