"बुरा सेब" एल्गोरिथ्म, या प्रक्रिया साझा सैंडबॉक्स दुर्घटनाग्रस्त


9

मैं निम्नलिखित समस्या को संभालने के लिए एक एल्गोरिथ्म की तलाश कर रहा हूं, जिसे मैं (अभी के लिए) "खराब सेब" एल्गोरिथ्म कह रहा हूं।

समस्या

  • मुझे एम सैंडबॉक्स में चलने वाली एन प्रक्रियाएं मिली हैं, जहां एन >> एम।
  • प्रत्येक प्रक्रिया को अपना सैंडबॉक्स देना अव्यावहारिक है।
  • उन प्रक्रियाओं में से कम से कम एक बुरी तरह से व्यवहार किया गया है, और पूरे सैंडबॉक्स को नीचे ला रहा है, इस प्रकार एक ही सैंडबॉक्स में अन्य सभी प्रक्रियाओं को मार रहा है।

यदि यह एक बुरी तरह से व्यवहार की जाने वाली प्रक्रिया थी, तो मैं एक साधारण सेंध लगाने के लिए एक सैंडबॉक्स में आधी प्रक्रिया और दूसरे सैंडबॉक्स में आधे हिस्से का उपयोग कर सकता था, जब तक कि मुझे बदमाश नहीं मिला।

प्रश्न

यदि एक से अधिक प्रक्रिया बुरी तरह से व्यवहार की जाती है - इस संभावना सहित कि वे सभी बुरी तरह से व्यवहार कर रहे हैं - क्या यह भोली एल्गोरिथ्म "काम" करता है? क्या यह कुछ समझदार सीमा के भीतर काम करने की गारंटी है?

सरलीकरण

तर्क के लिए, मान लेते हैं कि एक बुरी प्रक्रिया अपने सैंडबॉक्स को तुरंत नीचे लाती है, और एक अच्छी प्रक्रिया कभी नहीं करती है।


कैसे गारंटी है कि बुरी तरह से व्यवहार प्रक्रिया है जाएगा सैंडबॉक्स नीचे लाने? मेरा मतलब है - क्या हम निश्चित समय मान सकते हैं जब हमें पता है कि दिए गए सैंडबॉक्स केवल "क्लीन" प्रक्रियाओं के लिए चल रहे हैं क्योंकि यह क्रैश नहीं हुआ था?
एसएफ।

दुर्भाग्य से नहीं: तथ्य यह है कि एक सैंडबॉक्स 5 मिनट के लिए क्रैश नहीं करता है इसका मतलब यह नहीं है कि सभी प्रक्रियाएं अच्छी तरह से व्यवहार की जाती हैं, लेकिन यह हमें उस तथ्य का अधिक विश्वास दिलाता है।
रोजर लिप्सकॉम्ब

... लेकिन इस प्रश्न के प्रयोजनों के लिए, हम एक परिमित समय की अनुमति देकर अनुमानित कर सकते हैं, मुझे लगता है।
रोजर लिप्सकॉम्ब

आपको उस चीज़ को एटमाइज़ करना होगा जिसे आप "पारित" और "विफल" प्रक्रिया मानते हैं। यदि यह विफल होने के बिना 5 मिनट चलता है, तो यह अभी भी तकनीकी रूप से एक खराब सेब हो सकता है, लेकिन रुकने की समस्या की तरह, जब आप रेत में कुछ कठोर रेखाओं के बिना गुजरते हैं तो आप कभी भी 100% निश्चित नहीं होंगे।
नील

लगता है कि आप सही रास्ते पर हैं। यदि कई प्रक्रियाएं और कई बुरे सेब हैं, तो आपको एम, या असमान समूहों के एक बड़े मूल्य का उपयोग करना पड़ सकता है ताकि आप ज्ञात अच्छे सेबों को अलग कर सकें, फिर ज्ञात-अच्छे को एक सैंडबॉक्स में रखें और अज्ञात प्रक्रियाओं को विभाजित करते रहें आपके अन्य सैंडबॉक्स जब तक आपने व्यक्तियों की पहचान नहीं की है। आपके पास जितने अधिक सैंडबॉक्स होंगे, यह उतना ही तेज़ होगा। जैसा @Neil ने बताया, यह एन एल्गोरिथ्म के लॉग बेस M का एक बड़ा O है, इसलिए M को बढ़ाने से आपके परीक्षण में कटौती होगी।
ग्लेनपेटर्सन

जवाबों:


2

यदि आपको एक खराब सेब मिल रहा था, तो आप एल्गोरिथ्म लागू कर सकते हैं:

  1. N को M समूहों में विभाजित करें
  2. प्रत्येक समूह पर परीक्षण करें।
  3. यदि समूह का आकार 1 से अधिक है, तो बुरे समूह में आइटम की संख्या के साथ N की जगह, चरण 1 पर लौटें।

इसी तरह, यदि आपको एक "अच्छा" सेब मिल रहा था, तो एक ही एल्गोरिथ्म लागू होता है, लेकिन अच्छा समूह खोजने के बजाय।

इस एल्गोरिथ्म में O (log_M (N)) प्रदर्शन दर है लेकिन यह इस तथ्य पर निर्भर करता है कि केवल एक खराब सेब है।

यदि आपको नहीं पता कि कितने अच्छे / बुरे सेब हैं, तो आप निम्नलिखित एल्गोरिथ्म का उपयोग कर सकते हैं:

For each M processes in N
  Test M processes

यह सबसे खराब स्थिति है, लेकिन यह O(N/M)समय में चलता है (या O(N)इस बात पर निर्भर करता है कि आप एकल पास को एकल परीक्षण मानते हैं या समानांतर में किए गए परीक्षणों के संग्रह के रूप में)। माना सब बातें, यह नहीं किसी भी तरह से एक बुरा दृष्टिकोण।

ऐसे एल्गोरिदम हो सकते हैं जो इससे बेहतर प्रदर्शन करते हैं, लेकिन इसके लिए आवश्यक है कि आपको पता हो कि बैच में कितने बुरे सेब / अच्छे सेब हैं। इस कारक को न जानते हुए, जबकि मैं इसे साबित नहीं कर सकता, मैं शर्त लगाने को तैयार हूं कि आप ऊपर सूचीबद्ध बाद के एल्गोरिथ्म से बेहतर नहीं कर सकते।

उम्मीद है की वो मदद करदे!

संपादित करें : व्यावहारिक दृष्टिकोण से, मैं समझता हूं कि इनमें से कुछ ऑपरेशन आसानी से नहीं किए जाते हैं। यह सच है, हालांकि, दुर्भाग्यपूर्ण वास्तविकता यह है कि आप खराब सेब को कड़ाई से निर्धारित नहीं कर सकते हैं कि कौन से प्रक्रियाएं सैंडबॉक्स पर चल रही थीं जो कम से कम सक्रिय या निष्क्रिय प्रक्रियाओं के बिना उस पल में चल रही थीं। यदि प्रश्न एल्गोरिथ्म से संबंधित है, तो मुझे लगता है कि मैंने इसका उत्तर दिया है। यदि प्रश्न इस तरह की स्थिति से निपटने के तरीके से संबंधित है, तो शायद यह सवाल सुपरसियर एसई के लिए बेहतर अनुकूल होगा।


1
दुर्भाग्य से, मैं प्रक्रियाओं का "परीक्षण" नहीं कर सकता; मुझे पता है कि सैंडबॉक्स में से एक दुर्घटनाग्रस्त हो गया, और यह एक या एक से अधिक प्रक्रियाओं के कारण हुआ।
रोजर लिप्सकॉम्ब

1
समस्या यह है कि, सेट को बाइसेक्ट करने के बाद, दोनों विभाजनों में खराब सेब हो सकते हैं। जो मुझे लगता है कि मुझे एक साधारण विभाजन से अधिक की आवश्यकता है ...
रोजर लिप्सकॉम्ब

@RogerLipscombe आप एक वास्तविक दुनिया परिदृश्य के लिए एक एल्गोरिथ्म लागू करने की कोशिश कर रहे हैं। बेशक, आप एक समय में प्रक्रियाओं का परीक्षण करने में सक्षम नहीं होंगे, और विभिन्न मशीनों पर इन प्रक्रियाओं का परीक्षण करना मुश्किल साबित हो सकता है, हालांकि, यदि आप इसके निचले भाग में जाना चाहते हैं, तो आप जा रहे हैं। एक रास्ता या एक रास्ता खोजना होगा। यदि आप ऐसे चरों को सम्मिलित करते हैं जिन्हें हल नहीं किया जा सकता है, तो आप बस एक एल्गोरिथ्म को खोजने में सक्षम नहीं होंगे जो खराब सेब (ओं) को सही ढंग से इंगित कर सकता है।
नील

ठीक है, तो "परीक्षण" से, आपका मतलब केवल यह है कि "उन्हें लंबे समय तक चलने के लिए आश्वस्त होने के लिए छोड़ दें" ...?
रोजर लिप्सकॉम्ब

@RogerLipscombe मुझे ऐसा लगता है। अधिक समय लग सकता है, लेकिन आप वह हैं जो यह पता लगाना है कि कब तक इंतजार करना है। यह जानते हुए कि और इस एल्गोरिथ्म का अनुसरण करते हुए, आप तकनीकी रूप से किसी भी और सभी खराब सेब का पता लगा सकते हैं। हालाँकि, क्रैश के लिए विंडोज़ इवेंट लॉग को देखने के लिए बस तेज़ हो सकता है।
नील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.