मैं विभिन्न सबस्ट्रिंग खोज (एला स्ट्रस्ट्र) एल्गोरिदम और कार्यान्वयन का मूल्यांकन करने की कोशिश कर रहा हूं और कुछ अच्छी तरह से तैयार की गई सुई और घास के तारों की तलाश कर रहा हूं जो सबसे खराब केस प्रदर्शन और संभावित कोने-केस कीड़े को पकड़ेंगे। मुझे लगता है कि मैं उन्हें खुद से बाहर कर सकता हूं लेकिन मुझे लगता है कि किसी के पास कहीं भी बैठे परीक्षण मामलों का अच्छा संग्रह होना चाहिए ...बेंचमार्किंग और तनाव परीक्षण के लिए खोज परीक्षण एल्गोरिदम के लिए अच्छे परीक्षण मामले क्या हैं?
उत्तर
सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन आपको पुस्तक में एल्गोरिदम मिल सकते हैं - एल्गोरिदम स्ट्रिंग्स, पेड़ और अनुक्रमों पर: कंप्यूटर विज्ञान और कम्प्यूटेशनल जीवविज्ञान - दिलचस्प (उप-स्ट्रिंग खोज पर कई उपन्यास एल्गोरिदम हैं)। इसके अतिरिक्त, यह विशेष और जटिल मामलों का भी एक अच्छा स्रोत है।
धन्यवाद, लेकिन यह वास्तव में परीक्षण/बेंचमार्किंग विचार है जिसे मैं ढूंढ रहा हूं। मेरे यहां एल्गोरिदम पर एक सभ्य संदर्भ है: http://www-igm.univ-mlv.fr/~lecroq/string/index.html दो रास्ता और एसएमओए एकमात्र "तेज़" प्रतीत होता है (बड़े-ओ में) कोड के लिए उपयुक्त एल्गोरिदम जो विफलता के मामलों की अनुमति नहीं है, क्योंकि बाकी अंतरिक्ष में nonconstant हैं और तनावग्रस्त स्मृति स्थितियों के तहत विफल हो सकता है। हालांकि निष्पक्ष कार्यान्वयन भी बहुत दिलचस्प है और ऐसा लगता है कि यह बहुत बड़ी सुई आकारों के लिए अनुकूल हो सकता है। यह कोशिश की गई है कि छोटे से मध्यम तारों के लिए ग्लिब के दो मार्ग जितना तेज़ है। –
लिंक के लिए धन्यवाद! यह सटीक स्ट्रिंग मिलान एल्गोरिदम का वास्तविक अच्छा संकलन है। – tathagata
कुछ विचार और अपने आप को एक आंशिक जवाब:
जानवर बल एल्गोरिथ्म के लिए सबसे खराब मामला:
(a^n b)^m
में
a^(n+1) b
उदा
(yxyxyxxyxyxyxy)^n
में कुछ yxyxyxxyxyxyxx
की तरह: aabaabaabaabaabaabaab
SMOA के लिए सबसे खराब स्थिति में aaab
। आगे परिशोधन की जरूरत है। मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि प्रत्येक प्रगति आंशिक मिलान की केवल आधा लंबाई है, और अधिकतम प्रत्यय गणना के लिए बैकट्रैकिंग की अधिकतम मात्रा की आवश्यकता होती है। मुझे पूरा यकीन है कि मैं सही रास्ते पर हूं क्योंकि इस प्रकार का मामला एकमात्र तरीका है जिसे मैंने एसएमओए के कार्यान्वयन के लिए अभी तक पाया है (जो असम्बद्ध रूप से 6n+5
है) ग्लिब के दो-तरफ से धीमी गति से चल रहा है (जो असम्बद्ध रूप से है 2n-m
लेकिन मामूली दर्दनाक प्रीप्रोकैसिंग ओवरहेड है)। आधारित कुछ भी रोलिंग-हैश के लिए
सबसे खराब मामला:
जो बाइट्स की अनुक्रम सुई के हैश के साथ हैश टकराव का कारण बनता है। किसी भी उचित रूप से तेज़ हैश और दी गई सुई के लिए, यह एक घास का निर्माण करना आसान होना चाहिए जिसका हैश हर बिंदु पर सुई के हैश के साथ टकराता है। हालांकि, लंबे समय तक आंशिक मैचों को बनाना मुश्किल लगता है, जो कि सबसे खराब केस व्यवहार पाने का एकमात्र तरीका है। स्वाभाविक रूप से सबसे बुरे मामले के व्यवहार के लिए सुई में कुछ आवधिकता होनी चाहिए, और अंतिम पात्रों को समायोजित करके हैश को अनुकरण करने का एक तरीका होना चाहिए।
दो मार्ग के लिएसबसे खराब मामला:
nontrivial एमएस अपघटन के साथ बहुत ही कम सुई होने के लिए लगता है - जहां भूसे के ढेर में सुई के अधिकार से डेढ़ घटक में गलत परिणामों की बार-बार होता है - - dacdacdacdacdacdacdac
की तरह कुछ की तरह bac
कुछ । एकमात्र तरीका यह एल्गोरिदम धीमा हो सकता है (ग्लिब लेखकों द्वारा इसे खराब करने के अलावा ...) बाहरी लूप को कई बार फिर से बनाकर और बार-बार उस ओवरहेड (और सेटअप ओवरहेड महत्वपूर्ण बनाते हैं) बनाते हैं।
अन्य एल्गोरिदम:
मैं वास्तव में केवल एल्गोरिदम कि अंतरिक्ष में O(1)
कर रहे हैं और कम preprocessing भूमि के ऊपर है में दिलचस्पी रखता हूँ, इसलिए मैं उनके खराब मामलों में इतना देखा नहीं किया है। कम से कम बॉयर-मूर (O(n)
बनाने के लिए संशोधनों के बिना) में एक मामूली सबसे खराब मामला है जहां यह O(nm)
बन जाता है।
एक प्रक्रिया है कि दिलचस्प आंकड़े दे सकता है, हालांकि मैं अभी परीक्षण करने के लिए समय नहीं है: स्ट्रिंग लंबाई से अधिक
यादृच्छिक करें, तो है कि लंबाई की स्ट्रिंग सामग्री पर randomize, तो एक की भरपाई/लंबाई से अधिक randomize substring (संभवतः स्ट्रिंग में कुछ नहीं), तो सबस्ट्रिंग (संभवतः बिल्कुल नहीं) पर यादृच्छिक रूप से clobber, दोहराना। एक से एक चरित्र जोड़कर
रिक्त स्ट्रिंग के साथ शुरू, सेट में वर्तमान में एक स्ट्रिंग के संवर्धन द्वारा दिए गए सभी स्ट्रिंग्स उत्पन्न:
आप कंटेनर तार उत्पन्न कर सकते हैं (। resp, परीक्षण मान हों) रिकर्सिवली द्वारा बाएं या दाएं (दोनों) के लिए वर्णमाला।
कंटेनर तार बनाने के लिए वर्णमाला आपके द्वारा चुने गए हैं।
आप निहित तारों के लिए 2 अक्षर का परीक्षण करते हैं। एक वह है जो कंटेनर तार बनाता है, दूसरा इसका पूरक है।
- 1. एएसपी.नेट तनाव परीक्षण
- 2. भार परीक्षण/तनाव परीक्षण वेब सेवाएं
- 3. परीक्षण और परीक्षण संचालित विकास के लिए अच्छे ऑनलाइन परिचय क्या हैं?
- 4. तनाव परीक्षण एएसपी.Net आवेदन
- 5. लोड बनाम तनाव परीक्षण
- 6. जावास्क्रिप्ट सिंटैक्स परीक्षण के मामले
- 7. एक तनाव परीक्षण फ्रेमवर्क डिजाइनिंग
- 8. पायथन: किसी के लिए परीक्षण, बूलियन मान के लिए परीक्षण
- 9. तनाव परीक्षण विकास सर्वर/उत्पादन सर्वर
- 10. यूनिट परीक्षण और स्वीकृति परीक्षण पर्याप्त हैं?
- 11. क्या योजनाबद्धता परीक्षण के लिए कोई ऑनलाइन एल्गोरिदम है?
- 12. यूनिट परीक्षण अनुमान एल्गोरिदम
- 13. अजाक्स लोड परीक्षण के लिए उपकरण
- 14. पायथन में वेबसाइट तनाव परीक्षण - Django
- 15. तनाव एक एंड्रॉइड ऐप का परीक्षण
- 16. सी/सी ++ के लिए कार्यात्मक/सिस्टम परीक्षण के लिए परीक्षण ढांचा?
- 17. पायथन के परीक्षण मामले के unittest और गतिशील निर्माण
- 18. कार्यात्मक प्लोन परीक्षण मामलों के लिए सेलेनियम परीक्षण रिकॉर्डिंग
- 19. जेएमटर परीक्षण के लिए DRY
- 20. जावास्क्रिप्ट के लिए हेडलेस परीक्षण?
- 21. 1000 समवर्ती उपयोगकर्ताओं के लिए लोड परीक्षण
- 22. टीडीडी: क्या यह एकीकरण परीक्षण करने के लिए व्यवहार्य है, लेकिन कोई यूनिट परीक्षण नहीं है?
- 23. यूनिट परीक्षण के लिए नया, महान परीक्षण कैसे लिखें?
- 24. यूनिट परीक्षण निजी विधियों के लिए लागू
- 25. इकाई परीक्षण और एकीकरण परीक्षण क्या हैं, और मुझे किस प्रकार के परीक्षण के बारे में पता होना चाहिए?
- 26. डेटाबेस के लिए यूनिट परीक्षण ढांचे
- 27. "फ़ज़ परीक्षण" और "बंदर परीक्षण"
- 28. अपवादों के लिए इकाई परीक्षण कैसे करें?
- 29. कैसे इकाई परीक्षण लिखने के लिए कि संगामिति अपरिवर्तनशीलताओं परीक्षण
- 30. परीक्षण + सिंथेटिक बेंचमार्क के लिए सी ++ यूनिट परीक्षण
आपका अंतिम लक्ष्य यहां क्या है? बस एल्गोरिदम के बारे में जानने के लिए? या आपके पास असामान्य सुइयों/घास के साथ एक आवेदन है? – Cascabel
अल्प अवधि में, केवल एल्गोरिदम के बारे में जानने के लिए। लंबी अवधि में, मेरे पास सी-लाइब्रेरी कार्यान्वयन बहुत कम आकार की ओर उन्मुख है जो ऊपर-औसत प्रदर्शन के साथ उन्मुख दृष्टिकोण का उपयोग कर रहा है, और मैं इसे ओ (एन) समय/ओ में से किसी एक के साथ बदलने पर विचार करना चाहता हूं (1) अंतरिक्ष एल्गोरिदम। एसएमओए वादा करता है लेकिन मैं देखना चाहता हूं कि तुलना में 6 एन +5 ऊपरी बाउंड में निरंतर 6 अभ्यास में समस्याग्रस्त है (मेरे शुरुआती परीक्षणों से यह दूरस्थ रूप से सैने डेटा पर बहुत कम दिखाता है, और ग्लिबल के प्रदर्शन में तुलनीय सभी विशेष- छोटी/लंबी सुइयों के लिए आवरण)। –