2009-02-05 18 views
6

मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जो छद्म रूप से स्वत: उत्पन्न करेगा (बीज मूल्य के आधार पर, मैं एक ही परीक्षण को एक से अधिक बार फिर से चला सकता हूं) फाइलों से युक्त एक बढ़ती निर्देशिका संरचना।छद्म यादृच्छिक निर्देशिका पेड़ पीढ़ी?

मैं अगर आप में से किसी quasirandom को कुछ इसी तरह "स्थान-पूर्ति" दृश्यों (जैसे van der Corput sequences या Halton sequences) है कि यहां काम कर सकते हैं के बारे में जानते थे सोच रहा था (इस परीक्षण एक स्रोत नियंत्रण डेटाबेस स्थापना पर जोर देना है)।

संपादित करें: या एक फ्रैक्टल एल्गोरिदम। यह एक फ्रैक्टल एल्गोरिदम की तरह संदिग्ध लगता है।


संपादित 2: कोई बात नहीं, मुझे लगता है मैं स्पष्ट समाधान पता लगा लगता है, एक खाली पेड़ के साथ शुरू, और बस निर्धारणात्मक (जनरेट की गई संख्या और की स्थिति पर आधारित करने के लिए एक कूट-यादृच्छिक जनरेटर के अनुक्रमिक आउटपुट का उपयोग पेड़ अब तक उत्पन्न हुआ है) एन कार्यों में से एक, उदाहरण के लिए एक नई उपनिर्देशिका बनाएं, एक नई फ़ाइल जोड़ें, फ़ाइल का नाम बदलें, फ़ाइल हटाएं, आदि

मैं इसे फ़ोल्डर संरचना में अनुक्रमिक रूप से डंप करने की बजाय इसे इस तरह से करना चाहता हूं, क्योंकि हम किसी स्थिति में चल रहे हैं जहां हमें बड़ी संख्या में फाइलों के साथ कुछ समस्याएं आ रही हैं, और यह सुनिश्चित नहीं है कि वास्तव में क्या कारण है। (वृक्ष गहराई, # नामों, # हटाए गए, आदि)

यह केवल 1 निश्चित पेड़ नहीं है जिसे मुझे उत्पन्न करने की आवश्यकता है, उपयोग की रणनीति है: पेड़ की संरचना को थोड़ा बढ़ाएं, कुछ प्रदर्शन आंकड़ों का मूल्यांकन करें, बढ़ोतरी करें वृक्ष संरचना थोड़ा और, कुछ प्रदर्शन आंकड़ों का मूल्यांकन, आदि

+0

यदि आपको कोई उत्तर मिलता है, तो सुनिश्चित करें कि केवल अच्छे की शक्ति के लिए इसका उपयोग करें। हल करने के लिए एक मजेदार समस्या की तरह लगता है। –

+0

"क्या आप अपनी शक्तियों का उपयोग अच्छे, या भयानक के लिए करते हैं?" –

उत्तर

1

जैसा कि आप अपने दूसरे संपादन में उल्लेख करते हैं, मैं शायद पीआरएनजी को "निर्देशिका में परिवर्तन", "निर्देशिका बनाने" का निर्णय लेने के साथ पूरी तरह से एक फ़ाइल पेड़ ट्रैवर्सल के रूप में लागू कर दूंगा। , "एक स्तर ऊपर ले जाएं", "फ़ाइल बनाएं", "फ़ाइल हटाएं" और यह निर्धारित करने के लिए एक और मान है कि कौन सी फ़ाइल को हटाना है, किस निर्देशिका को बदलना है और फ़ाइलों और निर्देशिकाओं के लिए नाम उत्पन्न करना है।

मैं आप मैंने लिखा वर्कफ़्लो सर्वर को तनाव-परीक्षण करने के लिए एक समान विधि को रेड-टेस्ट किया (हालांकि मुझे ट्रैक आइटमों का ट्रैक रखने की आवश्यकता नहीं थी, केवल इसे चलाने के लिए यादृच्छिक रूप से चुनने की आवश्यकता थी)।

+0

यह काफी है जो मैंने करने का फैसला किया। दूसरे शब्दों में इसे एक सीमित राज्य मशीन बनाएं (लगभग एक सेलुलर automaton) –

2

यदि यह केवल परीक्षण के लिए है, तो कुछ सरल, बेवकूफ पीढ़ी एल्गोरिदम के साथ क्या गलत है? जैसे, उपनिर्देशिकाओं की एक यादृच्छिक (1-10) राशि उत्पन्न करें, उनके लिए नाम उत्पन्न करें, फिर प्रत्येक निर्देशिका के लिए उपनिर्देशिकाएं उत्पन्न करें और कुछ मात्रा में फ़ाइलें उत्पन्न करें।

यह आसानी से अनुकूलन योग्य है और आप rand के लिए बीज को नियंत्रित कर सकते हैं। Funkier जरूरतों के लिए, फ़ाइलों/निर्देशिकाओं की मात्रा का वितरण गैर रेखीय हो सकता है, लेकिन कुछ जो आपकी आवश्यकताओं के अनुरूप है।

कुछ ऐसा लगता है जिसे आधे घंटे में मार दिया जा सकता है और साथ किया जा सकता है। मैं कुछ गणितीय या जटिल की आवश्यकता को देखने में विफल रहता हूं। जब तक यह सिर्फ मजेदार नहीं है, बेशक :-)

1

यह विभिन्न समस्याओं का एक सेट है जो इसे एक मजेदार पहेली बनाता है।

सबसे पहले हमारे पास छद्म यादृच्छिक संख्या जनरेटर है। बहुत सी चीजें उपलब्ध हैं। मैं केवल एक समारोह की अपेक्षा करता हूं जो 0..n-1 श्रेणी में एक संख्या बनाता है।

फिर हमारे पास एक नोड पर उपनोडों की संख्या निर्धारित करने के लिए एक एल्गोरिदम है। यह एक रैखिक कार्य का उपयोग करने के लिए मोहक है लेकिन यह वास्तविकता के लिए एक उचित प्रतिनिधित्व नहीं है। तो आप निम्नलिखित समारोह बना सकते हैं:

randomsize() { 
    int n = Random(0,10); 
    if (n<10) return n; 

    return Random(0,9) + 10 * random; 
} 

इस समारोह कम संख्या पैदा करता है। अधिकांश 0.9 की सीमा में होंगे लेकिन शीर्ष लगभग अंतहीन है। आप बड़ा नंबर हैं चाहते हैं तो आप भी एक बड़ा सीमा

randomsize() { 
    int n = Random(0,100); 
    if (n<10) return n; 

    return Random(0,9) + 10 * random; 
} 

पिछले समस्या एक पेड़ बनाने का तरीका है इस्तेमाल कर सकते हैं। यह इतना आसान है। लेकिन आपको यह ध्यान में रखना चाहिए कि एल्गोरिथ को समाप्त करना है।उत्पन्न नेस्टिंग स्तर

  • के आधार पर संख्या कुल subnodes के प्रतिशत के रूप पत्तियों की संख्या का निर्धारण

    • उपयोग एक अधिकतम गहराई
    • घटती: तो आप निम्न में से एक करने की ज़रूरत है। यह प्रतिशत उच्च स्तर पर बढ़ाना चाहिए (पहले स्तर पर 10-50, 20-60 सेकंड पर .. 50-100 पांचवें, 60-100 छठे पर, 90-100 से 9 0-100 तक,

    संभोग आप अपने आवश्यक पेड़ को बनाने के लिए पैरामीटर को ट्विक कर सकते हैं।