पृष्ठभूमि की जानकारीप्रदर्शन अचानक का एक पहलू ~ 10
मैं हाल ही में एल्गोरिदम और datastructures पर मेरी कक्षा के लिए असाइनमेंट में सौंप दिया द्वारा बढ़ जाती है। असाइनमेंट बेतरतीब ढंग से जेनरेट किए गए सरणी के maximum-subarray को खोजने के लिए समाधान लागू करना था। हमें एक ब्रूट फोर्स एल्गोरिदम, और एक रिकर्सिव डिवाइड-एंड-विजय एल्गोरिदम लागू करने के लिए कहा गया था।
हमें तब चलने वाले समय का विश्लेषण करने के लिए कहा गया था, यह देखने के लिए कि किस समस्या का आकार ब्रूट फोर्स एल्गोरिदम रिकर्सिव समाधान से तेज़ होगा। यह समस्या के आकार को बढ़ाने के लिए चलने वाले समय (सिस्टम.नानोटाइम() मापों का उपयोग करके) एल्गोरिदम दोनों को मापकर किया गया था।
हालांकि, यह निर्धारित करने से मुझे थोड़ा सा ट्रिकियर लगता है।
जिज्ञासा
अगर मैं, पुनरावर्ती एल्गोरिदम के लिए समय से चल रहा है चला जाता है, एक रन से अगले करने के लिए 10 से अधिक बार 5000 की समस्याओं आकारों के साथ एल्गोरिदम के दोनों चल रहा है, एक से, द्वारा शुरू लगभग 10 के कारक (~ 1800μS से निष्पादित करने के लिए, ~ 200μS निष्पादित करने के लिए) और यह शेष पुनरावृत्तियों के लिए बहुत तेज़ रहता है। एक उदाहरण के लिए नीचे चित्र देखें
2 और 3 स्तंभ सिर्फ सत्यापित करने के लिए किया जाता है कि दोनों एल्गोरिदम सही अधिकतम subarray
यह जावा 1.6.0_29 साथ ओएस एक्स 10.7.3 पर परीक्षण किया गया था वापसी - विंडोज 7 और जावा 1.6 (सटीक संस्करण संख्या अज्ञात) चलाने वाले पीसी पर निष्पादित होने पर परिणाम समान थे।
कार्यक्रम के लिए स्रोत कोड यहां पाया जा सकता: क्या एल्गोरिथ्म अचानक कि ज्यादा बेहतर प्रदर्शन करने के लिए जा रहा है "गरम" के बाद का कारण बनता है: https://gist.github.com/2274983
मेरा प्रश्न है?
बचाव के लिए गर्म स्थान! –
यह जेआईटी (जस्ट-इन-टाइम संकलन) कार्रवाई कर सकता है। – Anthales
क्या कोई डीबग स्विच है जो हमें लॉग इन करने में सक्षम बनाता है कि जेआईटी कंपाइलर क्या करता है? (मूल रूप से जिस कोड को ब्लॉक करने का निर्णय लेता है वह पर्याप्त है।) – biziclop