2008-10-03 17 views
6

मेरे पास एक ऐसा एप्लिकेशन है जो विनिर्माण प्रक्रिया के लिए गुणवत्ता के परिणाम लेता है और खराब के पारेटो चार्ट दिखाने के लिए ग्राफ और दोनों उत्पादन थ्रूपुट दिखाने के लिए ग्राफ बनाता है।किसी ऑर्डर किए गए सूची से यादृच्छिक क्रमबद्ध सूची बनाना

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

मेरे पास एक विचार है कि मैं नंबर अच्छी, जे संख्या खराब 1, के नंबर खराब 2, आदि के साथ एक सूची भरना है और फिर किसी भी तरह डेटाबेस में सम्मिलन से पहले यादृच्छिक रूप से सूची को सॉर्ट करें।

तो, मेरा प्रश्न, क्या मूल्यों की एक क्रमबद्ध सूची लेने और यादृच्छिक रूप से क्रमबद्ध सूची बनाने के लिए एक मानक एल्गोरिदम है?

उत्तर

12

आप, उपयोग करने के लिए एक shuffle algorithm. एक उचित फेरबदल एल्गोरिथ्म और नहीं एक घर में पके हुए एक का उपयोग सुनिश्चित करें, क्योंकि यह डेटा के लिए सूक्ष्म पैटर्न के कुछ फार्म का परिचय हो सकता है चाहता हूँ। देखें this post by Jeff Atwood about the problem with using "random enough" shuffles.

+0

दोह! शफल एल्गोरिदम के बारे में सोचना चाहिए था। धन्यवाद। –

0

हमारे मेजबान कार्ड की उथल के बारे में एक बहुत अच्छा लेख है, मेरा मानना ​​है कि कुछ अच्छे विचार
http://www.codinghorror.com/blog/archives/001008.html

+0

कि एक भयानक लेख था जैसे उपलब्ध नहीं है, यह सही बाहर शुरू कर दिया, फिशर-येट्स/नुथ फेरबदल, तो बहुत गलत हो बेतरतीब ढंग के स्रोत के रूप guid का उपयोग कर आदेश की कोशिश कर रहा से भी जाना जाता अनियमितता। अपना समय बर्बाद न करें और केवल फिशर-येट्स पर विकिपीडिया लेख पढ़ें या लाइब्रेरी का उपयोग करें जो सही ढंग से शफल लागू करता है। – mjard

-1

अपनाया जा सकता है जिस तरह से मैं यह करने के लिए इस्तेमाल किया एक पाश है कि कई बार है कि होगा भाग गया है करने के लिए था 0 और सूची की लंबाई के बीच दो यादृच्छिक संख्याएं उत्पन्न करें, फिर उन दो तत्वों को स्वैप करें।

+0

यह क्यों मतदान किया गया था ... मुझे बताएं कि मैं क्या गलत कर रहा हूं। –

+0

ऐसा करने का सही तरीका फिशर-येट्स/न्यूथ शफल होगा। विकिपीडिया पर इसे देखें। – mjard

0

आपको "यादृच्छिकता" के लिए आवश्यक चीज़ों पर निर्भर करता है। सबसे आसान तरीका शायद सभी तत्वों के माध्यम से हैश सेट में है और परिणामस्वरूप पुनरावृत्त है। आपके द्वारा प्राप्त आदेश निर्धारक होगा, लेकिन अधिकांश उद्देश्यों और उद्देश्यों के लिए यादृच्छिक माना जा सकता है। वैकल्पिक रूप से, आप सूची के [0 .. लम्बाई] के बीच यादृच्छिक संख्या उत्पन्न कर सकते हैं, तत्वों को चुन सकते हैं और उन्हें एक नई सूची में दबा सकते हैं। यह मानते हुए कि सूची हटाने निरंतर समय है, परिणाम ओ (एन) दक्षता के साथ उत्पन्न एक यादृच्छिक सूची होगी।

0
Random rnd = new Random(); 
List<int> orderedList = new List<int>(); 
List<int> randomList = new List<int>(); 
while (orderedList.Count != 0) 
{ 
    int index = rnd.Next(0, orderedList.Count); 
    randomList.Add(orderedList[index]); 
    orderedList.RemoveAt(index); 
} 
0

एक साधारण उत्तर एक सरणी या वेक्टर, लूप को इसके माध्यम से एक बार रखना है, और प्रत्येक स्थिति का दौरा करने के लिए, शेष सूची से यादृच्छिक रूप से एक तत्व चुनें और इसे वर्तमान तत्व के साथ स्वैप करें।
इसके लिए आपको एक उचित यादृच्छिक संख्या जनरेटर की आवश्यकता है।

+0

ध्यान दें कि यह एक विषम आकार की सूची के लिए मूल क्रम के केवल विषम क्रमिक क्रम उत्पन्न करता है, और यहां तक ​​कि एक आकार की सूची के लिए केवल क्रमिकता भी उत्पन्न करता है। आप आमतौर पर परवाह नहीं करते हैं, लेकिन यदि आप परवाह करते हैं तो आपको बहुत परवाह है। "स्वयं के साथ स्वैप" की अनुमति देकर इसे ठीक करें। नतीजा अभी भी पूर्वाग्रहित है, लेकिन यह अनुमानित है। –

+0

ठीक है, हाँ मैं देखता हूं। तो सूची के बाकी हिस्सों से यादृच्छिक रूप से चुनें, या स्वयं और एक स्वैप करें। – quamrana

संबंधित मुद्दे