আমি আশা করি আমি এই সমস্যায় নতুন কিছু অবদান রাখতে পারি। আমি লক্ষ করেছি যে উত্তরগুলির সমস্তটি আপনার সামগ্রিক লন্ড্রি পারফরম্যান্সকে ধীরে ধীরে না বাড়িয়ে দুটি প্রক্ষেপণ যেখানে আপনি প্রিপ্রোসেসিং করতে পারেন তা অবহেলা করে ।
এছাড়াও, আমাদের বৃহত সংখ্যক মোজা, এমনকি বড় পরিবারগুলিরও ধরে রাখার দরকার নেই। মোজাগুলি ড্রয়ারের বাইরে নিয়ে যায় এবং এটি পরা হয় এবং তারপরে তারা এমন জায়গায় ছুঁড়ে ফেলা হয় (সম্ভবত একটি বিন) যেখানে তারা লন্ডার হওয়ার আগে থাকে stay যদিও আমি বিনকে একটি লাইফ-স্ট্যাক বলব না, আমি বলব এটি ধরে নেওয়া নিরাপদ
- লোকেরা তাদের উভয় মোজা বিনের একই অঞ্চলে মোটামুটি টস করে,
- বিন কোন পর্যায়ে এলোমেলোভাবে করা হয় না, এবং তাই
- এই বিনের শীর্ষ থেকে নেওয়া কোনও উপসেটে সাধারণত একটি জোড়া উভয় মোজা থাকে।
যেহেতু আমি যে সমস্ত ওয়াশিং মেশিন সম্পর্কে জানি সেগুলি আকারে সীমিত (আপনার কতগুলি মোজা ধোয়া উচিত তা নির্বিশেষে) এবং সত্যিকারের র্যান্ডমাইজিংটি ওয়াশিং মেশিনে ঘটে, আমাদের যত মোজা থাকুক না কেন, আমাদের সর্বদা ছোট সাবসেট থাকে যা প্রায় নেই singletons।
আমাদের দুটি প্রিপ্রোসেসিং স্টেজগুলি হ'ল "কাপড়ের মোড়ে মোজা লাগানো" এবং "কাপড়ের মোজা থেকে মোজা নেওয়া", যা আমাদের করতে হবে, যাতে মোজাগুলি কেবল পরিষ্কার নয় তবে শুকনোও রয়েছে। ওয়াশিং মেশিনগুলির মতো, কাপড়ের পাতাগুলি সীমাবদ্ধ, এবং আমি ধরে নিই যে আমাদের লাইনের মোজা যেখানে দেখি সেখানে আমাদের পুরো অংশ থাকে।
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% মোজা ইতিমধ্যে জুড়ে দেওয়া হয়েছে, আমাকে মোজার একটি খুব ছোট উপসেট রেখে দিয়েছে, এবং এই উপসেটটি ইতিমধ্যে (কিছুটা) ক্লাস্টারড (প্রিপ্রোসেসিং পদক্ষেপের পরে আমি আমার ঝুড়ির মধ্যে খুব বেশি এনট্রপি প্রবর্তন করি না)। আরেকটি বিষয় হ'ল বাকী ক্লাস্টারগুলি একবারে পরিচালনা করার জন্য যথেষ্ট ছোট হতে থাকে, সুতরাং ঝুড়ি থেকে পুরো ক্লাস্টারটি নেওয়া সম্ভব।
এই ধরণের অ্যালগরিদম এখানে সাজানো_সেইমাইনিং_ক্লাস্টার ():
while(clusters present in basket) {
Take out the cluster and spread it
Process it immediately
Leave remaining socks where they are
}
এর পরে, কেবল কয়েকটি মোজা বাকি আছে। এটি আমি সিস্টেমে পূর্বে অপ্রাপ্ত মোজাগুলি প্রবর্তন করি এবং কোনও বিশেষ অ্যালগরিদম ছাড়াই অবশিষ্ট মোজাগুলি প্রক্রিয়া করি - বাকী মোজা খুব কম এবং দৃশ্যত খুব দ্রুত প্রসেস করা যায়।
সমস্ত অবশিষ্ট মোজাগুলির জন্য, আমি ধরে নিচ্ছি যে তাদের সমকক্ষগুলি এখনও ধৌত হয়েছে এবং পরবর্তী পুনরাবৃত্তির জন্য এগুলি ফেলে রাখে। যদি আপনি সময়ের সাথে অবিযুক্ত মোজাগুলির বৃদ্ধির জন্য রেজিস্ট্রেশন করেন ("" সোক লিক "), আপনার আপনার বাক্সটি পরীক্ষা করা উচিত - এটি এলোমেলো হয়ে যেতে পারে (সেখানে বিড়ালগুলি কী আছে?)
আমি জানি যে এই অ্যালগরিদমগুলি প্রচুর অনুমান নিয়ে থাকে: একটি বিন যা কিছু ধরণের LIFO স্ট্যাক, একটি সীমাবদ্ধ, সাধারণ ওয়াশিং মেশিন এবং একটি সীমাবদ্ধ, সাধারণ জামাকাপড় হিসাবে কাজ করে - তবে এটি এখনও প্রচুর সংখ্যক মোজা নিয়ে কাজ করে।
সমান্তরালতা সম্পর্কে: যতক্ষণ আপনি উভয় মোজা একই পাতায় টস করেন, আপনি সহজেই এই সমস্ত পদক্ষেপের সমান্তরাল করতে পারেন।