दो एल्गोरिदम की तुलना के लिए रनटाइम के बजाय तुलना का उपयोग क्यों करें?


19

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


स्वागत हे! मुझे आशा है कि इस तरह के अधिकांश कागजात रनटाइम का उपयोग नहीं करते हैं। मुझे कुछ पता है, हालांकि, विशेष रूप से अधिक लागू समुदायों में और जब माना जाता है कि सिस्टम बहुत जटिल हैं।
राफेल

जवाबों:


14

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

मुझे पहले कुछ कारण बताएं कि रनटाइम्स का उपयोग करना एक अच्छा विचार क्यों नहीं है।


  1. यदि आप किसी भी घटक को बदलते हैं तो एक मशीन पर एक भाषा और एक संकलक का उपयोग करके मापा जाने वाला सामान्यता रनंटाइम का कोई मतलब नहीं है। यहां तक ​​कि एक ही एल्गोरिथ्म के थोड़ा अलग कार्यान्वयन अलग तरीके से प्रदर्शन कर सकते हैं क्योंकि आप मामले में कुछ संकलक opimisation को ट्रिगर करते हैं लेकिन दूसरे में नहीं।
  2. भविष्यवाणी
    तो आप कुछ आदानों के लिए कुछ रनटम्स हैं। वह जो किसी अन्य इनपुट के रनटाइम के बारे में बताता है? सामान्य तौर पर, कुछ भी नहीं।
  3. महत्व
    आमतौर पर, आप सभी इनपुट (कुछ आकार के) बेंचमार्क नहीं करेंगे , ताकि तुरंत एल्गोरिदम की तुलना करने की आपकी क्षमता को प्रतिबंधित किया जा सके: हो सकता है कि आपके परीक्षण सेट ने एक में सबसे खराब स्थिति और दूसरे एल्गोरिथम में सबसे अच्छा मामला शुरू किया हो? या शायद आपके इनपुट रनटाइम व्यवहार को प्रदर्शित करने के लिए बहुत छोटे थे ।
  4. मीटरिंग
    रनटाइम्स को अच्छी तरह से मापना तुच्छ नहीं है। क्या कोई JIT है? वहाँ विवाद हो गया है, यानी आप उस समय की गिनती कर रहे हैं जब एल्गोरिथ्म भी नहीं चला था? क्या आप विशेष रूप से समवर्ती प्रक्रियाओं और कैश में एक अन्य रन (अन्य एल्गोरिथ्म) के लिए बिल्कुल उसी मशीन की स्थिति को पुन: उत्पन्न कर सकते हैं? मेमोरी लेटेंसी से कैसे निपटा जाता है?

मुझे उम्मीद है कि ये आपको आश्वस्त करेंगे कि एल्गोरिदम की तुलना करने के लिए रनटाइम्स एक भयानक उपाय हैं, और एल्गोरिथ्म रनटाइम की जांच के लिए कुछ सामान्य, सार पद्धति की आवश्यकता है।

प्रश्न के दूसरे भाग पर। हम तुलना या समान प्राथमिक संचालन का उपयोग क्यों करते हैं?

  1. विश्लेषणात्मक ट्रैफ़िकबिलिटी
    यह मानते हुए कि आप औपचारिक विश्लेषण करना चाहते हैं, आपको इसे करने में सक्षम होना चाहिए । व्यक्तिगत बयानों की गिनती बहुत तकनीकी है, कभी-कभी कठिन भी; कुछ लोग फिर भी ऐसा करते हैं (जैसे नथ)। केवल कुछ बयानों की गिनती - जो रनटाइम पर हावी हैं - आसान है। उसी कारण से, हम अक्सर "केवल" जांच (ऊपरी सीमा पर) सबसे खराब स्थिति में करते हैं।

  2. प्रभुत्व
    चयनित ऑपरेशन रनटाइम पर हावी है। इसका मतलब यह नहीं है कि यह सबसे अधिक रनटाइम में योगदान देता है - तुलना स्पष्ट रूप से नहीं करता है, उदाहरण के लिए क्विकॉर्ट में जब शब्द-आकार के पूर्णांक को छाँटते हैं। लेकिन उन्हें सबसे अधिक बार निष्पादित किया जाता है , इसलिए उन्हें गिनकर आप गणना करते हैं कि एल्गोरिथ्म के सबसे निष्पादित भागों को कितनी बार चलाया जाता है। नतीजतन, आपका स्पर्शोन्मुख क्रम प्रमुख प्राथमिक ऑपरेशन की संख्या के लिए आनुपातिक है। यही कारण है कि हम Landau संकेतन और "रनटाइम" शब्द का उपयोग करते हुए सहज हैं, भले ही हम केवल तुलना करते हैं।

ध्यान दें कि एक से अधिक ऑपरेशन को गिनना उपयोगी हो सकता है। उदाहरण के लिए, कुछ क्विकॉर्ट वेरिएंट अधिक तुलना करते हैं, लेकिन दूसरों की तुलना में कम स्वैप करते हैं (औसतन)।

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


1
ध्यान रखें कि औपचारिक विश्लेषण की अपनी सीमाएं भी हैं। उदाहरण के लिए, गैर-समान इनपुट वितरण के लिए औसत मामला अक्सर अप्रभावी होता है।
राफेल

10

ऐसा इसलिए है क्योंकि एल्गोरिदम को चलाने का कुल समय हार्डवेयर पर निर्भरता है जिसमें यह अन्य कारकों के साथ चलता है। दो एल्गोरिदम की तुलना करना विश्वसनीय नहीं है अगर एक पेंटियम 4 पर चल रहा है और दूसरा चल रहा है, तो आइए बताते हैं कि कोर आई 7। इतना ही नहीं, लेकिन मान लें कि आप दोनों एक ही कंप्यूटर पर चलते हैं। क्या कहना है कि वे दोनों प्रोसेसर समय की एक ही राशि है? यदि एल्गोरिदम में से किसी एक की प्रक्रिया की तुलना में कुछ अन्य प्रक्रिया की उच्च प्राथमिकता है तो क्या होगा?

इसे पा लेने के लिए, हम इस समग्र समय को पूरा करने से दूर कर देते हैं, और इसके बजाय एल्गोरिथ्म को कितनी अच्छी तरह से परिभाषित करते हैं, इसके आधार पर तुलना करते हैं। आपने शोध पत्रों में O (1) या O (n ^ 2) जैसे नोटेशन को देखा होगा। यदि आपको रुचि है तो बिग ओ नोटेशन को देखने के लिए थोड़ा और पढ़ने की आवश्यकता हो सकती है ।


1
साथ ही वास्तविक रनिंग का समय एल्गोरिदम को चलाने के लिए उपयोग किए जाने वाले वास्तविक इनपुट के आकार और सामग्री पर निर्भर करता है!
त्सुयोशी इतो

7

चूंकि अन्य उत्तर बताते हैं कि हम प्राथमिक कार्यों की संख्या के संदर्भ में रनटाइम का विश्लेषण क्यों करते हैं, मुझे दो कारणों की पेशकश करते हैं कि तुलना कई के सही मीट्रिक क्यों है (सभी नहीं) एल्गोरिदम को छांटना:

  • कई सॉर्टिंग एल्गोरिदम के लिए तुलना की संख्या चल रहे समय पर हावी होती है, यानी कम से कम उतनी तुलना की जाती है जितनी किसी अन्य तत्व के संचालन के रूप में की जाती है
  • तुलना करना महंगा ऑपरेशन है; लाइब्रेरी में एक क्रमबद्ध दिनचर्या कैसे कार्यान्वित की जाती है, इस बारे में सोचें: सॉर्ट फ़ंक्शन तत्वों की एक सरणी और दो तत्वों की तुलना करने वाले फ़ंक्शन के लिए एक सूचक है; सामान्य कॉलिंग में और फ़ंक्शन के निष्पादन की प्रतीक्षा करने के लिए "आंतरिक" संचालन की तुलना में अधिक महंगा है; चूंकि यह फ़ंक्शन उपयोगकर्ता द्वारा प्रदान किया गया है, इसलिए इसे अनुकूलित करना कठिन है
  • (यह कुछ के लिए एक अच्छा कारण हो सकता है या नहीं भी हो सकता है) हम तुलना की संख्या के बारे में कुछ दिलचस्प कह सकते हैं जो अनुक्रम को क्रमबद्ध करने के लिए पर्याप्त और आवश्यक हैं; हम जानते हैं कि यह सबसे खराब स्थिति में और विभिन्न वितरणों के लिए औसतन कैसे किया जाता है, यहां तक ​​कि एक एल्गोरिथ्म को कैसे डिजाइन किया जाए, जो इष्टतम में परिवर्तित होता है क्योंकि यह एक अज्ञात वितरण ( स्व-सुधार एल्गोरिथ्म ) से आईआईडी नमूने में आइटम पर चलाया जाता है ; हम जानते हैं कि यह कैसे किया जाता है जब कुछ तुलना मुफ्त में दी जाती है ( आंशिक जानकारी के साथ छंटनी )

1) "कम से कम कई तुलनाएं किसी अन्य प्राथमिक ऑपरेशन के रूप में की जाती हैं" - केवल एक स्थिर कारक तक। 2) "तुलना करना महंगा ऑपरेशन है" - जो एक सामान्य सेटिंग को मानता है। पूर्णांक छँटाई के लिए (जिसका आमतौर पर विश्लेषण किया जाता है), स्वैप आमतौर पर अधिक महंगे होते हैं।
राफेल

ज़रूर। सेशन में एल्गोरिदम के विश्लेषण के बारे में उलझन में लग रहा था, लगातार कारकों को लाना नहीं चाहता था। मुझे उम्मीद है कि मैं एक सामान्य सेटिंग के बारे में बात कर रहा हूं, यह वर्णन से स्पष्ट है - एक मानक पुस्तकालय में क्रमबद्ध दिनचर्या पूर्णांक छँटाई नहीं है
साशो निकोलेव

इसके अलावा जो कागजात देखे जाते हैं वे निश्चित रूप से विशिष्ट पूर्णांक छंटाई वाले एल्गोरिदम के बारे में नहीं होते हैं, कोई भी तुलनाओं की संख्या नहीं बताता है
सैशो निकोलेव

@ राफेल छोटे पूर्णांक को छांटना व्यवहार में एक सामान्य मुद्दा नहीं है। मैं सबसे अधिक छंटनी करूँगा जो दुनिया में चल रहा है ( कुछ लंबाई या अन्य की ) तार पर । यहां तक ​​कि पूर्णांक छँटाई के लिए, मुझे यकीन नहीं है कि अगर यह सही है कि स्वैप अधिक महंगे हैं - आधुनिक उच्च अंत प्रोसेसर पर ब्रांचिंग एक अपेक्षाकृत महंगा ऑपरेशन है, तो यह देखते हुए कि छंटाई होने पर शाखा भविष्यवाणी ज्यादातर बेकार होगी।
गिल्स एसओ- बुराई को रोकना '

@ गिल्स अपने आप में, किसी भी प्लेटफ़ॉर्म की तुलना में स्वैप पूर्णांक की तुलना में अधिक महंगे हैं जो मुझे पता है। "माध्यमिक" लागत जैसे कि शाखा गलतफहमी निश्चित रूप से एक कारक है, जिसका प्रभाव निरंतर अनुसंधान के अधीन है। (व्यवहार में उपयोग के बारे में, मैं एक योग्य वक्तव्य नहीं दे सकता। हालांकि, मैं देखता हूं कि मानक पुस्तकालय अनुरक्षक छँटाई वाले एल्गोरिदम में सुधार करते रहते हैं, जो वे आदिम डेटाटाइप्स के लिए उपयोग करते हैं, इसलिए मुझे लगता है कि वे बहुत अधिक (एब) उपयोग करते हैं।)
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.