2013-05-10 5 views
16

जावास्क्रिप्ट में (कुछ हद तक लागू कहीं भी), जहां आप नहीं जानते कि आपका कोड किस लक्ष्य कार्यान्वयन पर चल रहा है, क्या यह पता लगाने का एक तरीका है कि अंतर्निहित सॉर्टिंग एल्गोरिदम (Array.sort) स्थिर है या नहीं, केवल यह जानकर the specification का पालन करता है?क्या सॉर्टिंग एल्गोरिदम स्थिर है या नहीं, यह पता लगाने के लिए कोई ब्लैक बॉक्स विधि है?

मुझे वेबकिट (1)(2) में 2 परीक्षण मिल सकते हैं, लेकिन ये परीक्षण कितने विश्वसनीय हैं? (क्या यह चेक PCP के साथ किया जा सकता है?) मैं ऐसे समाधान की तलाश में हूं जो गणितीय रूप से ध्वनि होगी।

यह एक मुश्किल समस्या है, क्योंकि एक अधिक उन्नत सॉर्टिंग एल्गोरिदम स्रोत सरणी (जैसे टिमसोर्ट) की लंबाई के आधार पर सबलगोरिदम बदल सकता है। मैं उलझन में हूं क्योंकि मैंने जो भी परीक्षण चलाया है, वह Google क्रोम के प्रकार को स्थिर होने के लिए दिखाता है, लेकिन मैंने जो दस्तावेज देखा है, उसने कहा है कि यह अस्थिर है (the source आपको बताएगा क्यों)।

(आमतौर पर, मैं this strategy का उपयोग अपने प्रकार स्थिर बनाने के लिए, यह एक छोटी लेकिन कभी कभी उल्लेखनीय प्रदर्शन प्रभाव पड़ता है) विभिन्न कार्यान्वयन में छँटाई के लिए

स्रोत कोड:
+0

आप केवल इस तरह का दृढ़ संकल्प कर सकते हैं: उदाहरण के लिए, मैं एक प्रकार एल्गोरिदम 'एस' परिभाषित कर सकता हूं जो इनपुट 'I' लेता है। आम तौर पर, 'एस' कुछ स्थिर सॉर्टलगोरिदम 'टी', * पर वास्तविक सॉर्टिंग कार्य को दूर करता है, लेकिन * जब' i' कुछ विशेष मान' I 'के बराबर होता है, तो यह इसके बजाय एक गैर-स्थिर प्रकार 'यू' का उपयोग करता है।आप कभी साबित नहीं करेंगे कि 'एस' गैर-स्थिर है जब तक आप भाग्य से बाहर नहीं होते और इनपुट के रूप में 'I'' पास नहीं करते हैं। अधिक वास्तविकता से, शायद 'एस' स्थिर प्रकार का उपयोग करता है जब तक कि 'I' बहुत लंबा न हो। फिर, यदि आप उचित रूप से लंबे इनपुट पर परीक्षण करते हैं तो आप केवल गैर-स्थिर प्रकार का निरीक्षण करेंगे। – apsillers

+2

यदि स्पेक कहता है कि यह स्थिर नहीं है, तो इसका मतलब यह नहीं है कि जब आप सरणी को सॉर्ट करते हैं तो आइटम ऑर्डर करने की अपेक्षा कर सकते हैं, लेकिन इसके बजाय आप उस पर भरोसा नहीं कर सकते; कोई वादा नहीं है। कि (वर्तमान) कार्यान्वयन स्थिर होने के लिए होता है इसका मतलब यह नहीं है कि यह हमेशा होगा, या सभी प्लेटफॉर्म क्रोम चलने के लिए। – frozenkoi

+0

मैं @MarZab से सहमत हूं कि यह एक रोकथाम समस्या है। यदि आप इसे '[कंप्यूटर-विज्ञान]' और/या '[कंप्यूटर-विज्ञान-सिद्धांत]' टैग करते हैं तो आप कुछ और ध्यान देख सकते हैं। – apsillers

उत्तर

0

जांचने के लिए एक छोटा आंतरिक परीक्षण चलाएं? आप विकिपीडिया से स्थिरता की जांच के लिए "रैंक द्वारा खेल-कार्ड, फिर सूट द्वारा" उदाहरण का उपयोग कर सकते हैं।

देखें: https://en.wikipedia.org/wiki/Sorting_algorithm#Stability

मैं नहीं जानता कि कितने कार्ड आप स्थिरता की जाँच करने की जरूरत है - शायद 5 या तो?

1

गणितीय ध्वनि, आह? इसके लिए एल्गोरिदम में हर पथ को स्थिर साबित करने की आवश्यकता होगी - और उनमें से प्रत्येक संयोजन। किसी भी संभावित डेटा के लिए।

इस तरह के निश्चित एल्गोरिदम मौजूद हैं - लेकिन संभवतः वे उस आवश्यकता को पूरा करने के लिए संभवतः बनाए गए थे। तो अगर ऐसा है, तो शायद यह कहता है कि यह कहीं है।

ऐसा कुछ साबित करने के लिए एक परीक्षण के रूप में, शायद यह एक हल करने की समस्या के समान मुद्दों के तहत आता है।

http://en.wikipedia.org/wiki/Halting_problem

+0

हलचल समस्या का आह्वान करने के लिए जरूरी नहीं है, लेकिन यह स्पष्ट होना चाहिए कि दिए गए इनपुट आकार के लिए * सभी * संभावनाओं को कवर करने के लिए सुपररेक्सोनेंशियल खोज आवश्यक है –

5

काले बॉक्स टेस्टिंग निर्धारित करने के लिए है कि एक प्रोग्राम किसी भी कसौटी को संतुष्ट करता है जब तक आप कसौटी के लिए प्रासंगिक सभी संभव आदानों परीक्षण कर सकते हैं नहीं किया जा सकता। एक ब्लैक बॉक्स बस एक लुकअप टेबल के लिए स्वतंत्र है जो आउटपुट में इनपुट को मैप करता है (वास्तविक दुनिया लुकअप टेबल बग के लिए Pentium FDIV bug देखें) ताकि आप सुनिश्चित न हों कि आपके परीक्षण उल्लंघन के किसी अन्य इनपुट की संभावना को रोकते हैं।

1

इसका जोखिम क्यों है? सबसे उचित डेटा सेट के लिए, मर्ज सॉर्ट का जावास्क्रिप्ट कार्यान्वयन पर्याप्त तेज़ होना चाहिए। एक जोड़े उठाओ और उन्हें बेंचमार्क करें और सबसे अच्छा उपयोग करें।

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

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