क्या हार्डवेयर / कार्यान्वयन एल्गोरिदम के समय / स्थान की जटिलता को प्रभावित करेगा?


32

मैं सीएस स्टूडेंट भी नहीं हूं, इसलिए यह एक बेवकूफी भरा सवाल हो सकता है, लेकिन कृपया मेरे साथ सहन करें ...

पूर्व-कंप्यूटर युग में, हम केवल एक सरणी डेटा संरचना को ड्राअर के एक सरणी की तरह कुछ के साथ लागू कर सकते हैं। चूंकि किसी को इसके मूल्य से निकालने से पहले संबंधित सूचकांक के साथ दराज का पता लगाना होता है, इसलिए बाइनरी सर्च को मानते हुए व्यू लुकिंग की जटिलता O(log(n))

हालाँकि, कंप्यूटर के आविष्कार ने एक बड़ा बदलाव किया। आधुनिक कंप्यूटर अपने रैम से इतनी तेजी से पढ़ सकते हैं कि अब हम सरणी लुकिंग की समय जटिलता को मानते हैं (यहां तक ​​कि यह तकनीकी रूप से ऐसा नहीं है, क्योंकि रजिस्टर को अधिक दूरी पर स्थानांतरित करने में अधिक समय लगता है, आदि)O(1)

एक अन्य उदाहरण पायथन डिक्शनरी है। हालांकि, एक को एक लिखित-लिखित अतिभारित जादू पद्धति (या हास्यास्पद रूप से बुरी किस्मत, यानी बहुत से हैश टक्कर वाले साथ का एक शब्दकोष जटिलता मिल सकती है , यह आमतौर पर माना जाता है । इस मामले में, समय जटिलता पायथन शब्दकोशों के हैश टेबल कार्यान्वयन और हैश कार्यों के कुंजी कार्यान्वयन पर निर्भर करती है।O ( 1 )O(n)__hash__O(1)

क्या इसका अर्थ यह है कि हार्डवेयर / कार्यान्वयन एल्गोरिदम के समय की जटिलता को प्रभावित कर सकता है? (जबकि दोनों उदाहरण एल्गोरिदम के बजाय डेटा संरचनाओं के बारे में हैं, बाद वाले पूर्व में निर्मित हैं, और मैंने डेटा संरचनाओं की समय जटिलता के बारे में कभी नहीं सुना है, इसलिए मैं यहां "एल्गोरिदम" शब्द का उपयोग कर रहा हूं)

मेरे लिए, एल्गोरिथम अमूर्त और वैचारिक हैं, जिनके समय / स्थान की जटिलता जैसे गुणों को प्रभावित नहीं किया जाना चाहिए चाहे वे एक विशिष्ट तरीके से लागू किए गए हों, लेकिन क्या वे हैं?


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
गिल्स एसओ- बुराई को रोकें '

जवाबों:


42

ज़रूर। निश्चित रूप से। अपनी बेचैनी को समेटने का तरीका यहाँ बताया गया है।

जब हम एल्गोरिदम के चल रहे समय का विश्लेषण करते हैं, तो हम इसे कम्प्यूटेशन के एक विशेष मॉडल के संबंध में करते हैं । गणना का मॉडल चीजों को निर्दिष्ट करता है जैसे कि प्रत्येक मूल ऑपरेशन को करने में लगने वाला समय (एक सरणी लुक समय या ( 1 ) समय?)। एल्गोरिथ्म का चल रहा समय गणना के मॉडल पर निर्भर हो सकता है।O(logn)O(1)

एक बार जब आप गणना का एक मॉडल चुन लेते हैं, तो एल्गोरिथ्म का विश्लेषण एक विशुद्ध रूप से अमूर्त, वैचारिक, गणितीय अभ्यास है जो अब हार्डवेयर पर निर्भर नहीं करता है।

हालांकि, व्यवहार में हम आमतौर पर गणना का एक मॉडल चुनना चाहते हैं जो हमारे हार्डवेयर की वास्तविकता को दर्शाता है - कम से कम एक उचित डिग्री पर। इसलिए, यदि हार्डवेयर बदलता है, तो हम गणना के एक अलग मॉडल के तहत अपने एल्गोरिदम का विश्लेषण करने का निर्णय ले सकते हैं जो नए हार्डवेयर के लिए अधिक उपयुक्त है। यही कारण है कि हार्डवेयर रनिंग टाइम को प्रभावित कर सकता है।

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


जैसा कि आपने कहा, हम गणना के मॉडल के रूप में यादृच्छिक अभिगम मॉडल का उपयोग करते हैं लेकिन जब हम कुछ गणनाओं के लिए GPU का उपयोग करते हैं तो कुछ एल्गोरिदम में समय की जटिलता बदल जाती है क्योंकि यह SIMD निर्देशों का उपयोग करता है।
दीप जोशी

6
यह भी ध्यान दें कि O () संकेतन एक ऊपरी सीमा है। यहां तक ​​कि अगर आप एक सीमित आकार में एक दराज ढूंढने वाले दराज सादृश्य का उपयोग करते हैं (वास्तविक स्मृति आकार में सीमित है) तो भवन में ओ (1) समय लगता है। भले ही आपको सबसे दूर दराज तक पहुंचने में 20 मिनट लगते हैं (सभी कैश मिस हो जाते हैं और आपको स्वैप से डेटा भी लोड करना पड़ता है) जो अभी भी ओ (1) का समय है क्योंकि मेमोरी एक्सेस करने के लिए 20 मिनट आपके छिपे हुए निरंतर होंगे।
गोसविन वॉन ब्रेडरलो

2
O(1)O(n)

1
@CortAmmon: एक बड़े सरणी पर, रैखिक खोज का उपयोग करते हुए हैश मैप का उपयोग करने की तुलना में तेज हो सकता है यदि सभी लेकिन जिन तत्वों पर खोज की जा रही है उनमें से कुछ प्रारंभ के बहुत करीब हैं। उदाहरण के लिए, यदि 50% तत्व पहले तत्व से मेल खाते हैं, तो 25% दूसरे से मेल खाते हैं, 12.5% ​​तीसरे से मेल खाते हैं, सिवाय इसके कि एक ऑडबॉल तत्व किसी ऐसी चीज से मेल खाएगा जो सरणी में कहीं भी हो, तुलना की अपेक्षित संख्या प्रदर्शन M आकार की सूची N पर 2M + N होगा।
सुपरकैट

5
@DeepJoshi SIMD निर्देश एल्गोरिदम की जटिलता को नहीं बदलते हैं। वे केवल गुणात्मक स्थिरांक को बदलते हैं।
गाइल्स का SO- बुराई से रोकना '

5

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

हे(लॉगn)हे(1)

तो, हाँ, हार्डवेयर (यानी, कम्प्यूटेशन का मॉडल) एल्गोरिदम के चलने के समय को प्रभावित करता है, जैसा कि डीडब्ल्यू बताते हैं , लेकिन ऐसा नहीं है कि आपके ऐरे एक्सेस उदाहरण पर आधारित लगता है।


2
निष्पक्ष होने के लिए, आपने "मेमोरी कंट्रोलर ने पता तारों पर वोल्टेज को सत्रह के बाइनरी प्रतिनिधित्व को सेट करता है" और "डेटा वापस आता है" के बीच सभी टुकड़ों को छोड़ दिया। उन टुकड़ों में से एक लगभग निश्चित रूप से ओपी द्वारा वर्णित प्रकार का एक द्विआधारी खोज पेड़ है; लेकिन यह फिर भी निरंतर समय में निष्पादित होता है क्योंकि लॉग एन लगभग 64 है, सभी एन के लिए
क्क्सप्लसोन

@Quuxplusone बाइनरी सर्च का क्या हिस्सा मेमोरी का उपयोग करता है? पता लाइनें सीधे मेमोरी सेल का चयन करती हैं।
डेविड रिचेर्बी

हम अपनी विशेषज्ञता के क्षेत्र के बाहर बहुत दूर काम कर रहे हैं, लेकिन मैं जो कुछ भी करने की कोशिश कर रहा था, वह यह है कि डिमॉकर्स के एक पेड़ के संदर्भ में एक पता डिकोडर लागू किया जाएगा । (यह मानते हुए कि हम सीधे भौतिक स्मृति को मार रहे हैं, कैशिंग के साथ आने वाली किसी भी अतिरिक्त जटिलता को अनदेखा कर रहे हैं ।) फिर से, यह सब अतिरिक्त जटिलता केवल यानी, नगण्य जोड़ देती है - लेकिन वास्तव में बिट ओपी के बारे में पूछ रहा था! O(lg size-of-memory)
क्क्सप्लसोन

2

नहीं, हार्डवेयर एल्गोरिदम की जटिलता को प्रभावित नहीं करता है।

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

सही दराज (सरणी तत्व तक पहुंच के रूप में) ढूँढना "इंडेक्स द्वारा सीधे ओपन एनथ तत्व" का उपयोग करता है, न कि "खोज रैखिक रूप से" या "बाइनरी सर्च करें" एल्गोरिथ्म। एल्गोरिदम को बदला नहीं गया है, लेकिन पसंद।

दूसरी ओर, जटिलता का विश्लेषण, या बल्कि इसकी सार्थकता, हार्डवेयर से बहुत प्रभावित होती है।

कई एल्गोरिदम जो उनके जटिलता विश्लेषण द्वारा तारांकित होते हैं, खराब कलाकार होते हैं या व्यवहार में भी बेकार होते हैं क्योंकि निरर्थक स्थिर कारक बिल्कुल नगण्य नहीं है, लेकिन हावी है

या, क्योंकि धारणाएँ जो एक बार सच थीं (या ज्यादातर सच) अब पकड़ नहीं हैं। जैसे, उदाहरण के लिए, हर ऑपरेशन ज्यादातर एक ही होता है (केवल छोटे निरंतर अंतर जो मायने नहीं रखते हैं), या इससे कोई फर्क नहीं पड़ता है कि आप किस क्रम में कौन-सी मेमोरी एक्सेस करते हैं। जटिलता के विश्लेषण से, आप यह निष्कर्ष निकाल सकते हैं कि कुछ एल्गोरिथ्म बहुत बेहतर है क्योंकि इसे केवल और इतने सारे संचालन की आवश्यकता है। व्यवहार में, आप पा सकते हैं कि प्रत्येक ऑपरेशन एक गारंटीकृत कैश मिस (या इससे भी बदतर, पृष्ठ दोष) का कारण बनता है, जो एक ऐसे k का परिचय देता है जो इतना विशाल है कि यह अब महत्वहीन नहीं है, लेकिन सब कुछ पर हावी है।
यदि एल्गोरिथ्म ए किसी दिए गए आकार के डेटासेट को संसाधित करने के लिए 500 ऑपरेशन लेता है और एल्गोरिदम बी केवल 5 लेता है, लेकिन बी 5 दोषों का कारण बनता है जो प्रत्येक बीस मिलियन चक्रों को जलाते हैं, तो क्या एनाल्सिस या सामान्य ज्ञान आपको बता सकता है, इसके बावजूद ए बेहतर है।

इससे कुछ साल पहले जैसे कुक्कू हैशिंग में अजीब आश्चर्य हुआ। जो काफी हद तक बेहतर था क्योंकि [लाभों की लंबी सूची]। प्रचार ठंडा होने के बाद, यह पता चला कि यह काफी हद तक हीन था क्योंकि इसने हर एक्सेस पर दो कैश मिस (बड़े डेटा सेट के लिए दोष) की गारंटी दी थी

डेटा के सबसेट की पहचान और प्रसंस्करण के लिए भी ऐसा ही हुआ है। आजकल, सही समाधान आजकल है: "बस यह सब करते हैं" , यानी यह पता लगाने के बजाय कि आपको क्या करने की आवश्यकता है और ऐसा करें, संपूर्ण डेटासेट को रैखिक रूप से संसाधित करें, भले ही आपको केवल इसके आधे हिस्से की आवश्यकता हो। क्योंकि, यह विश्वास है या नहीं, यह तेजी से कोई शाखा गलतफहमी के कारण, कोई कैश नहीं चूकता है, कोई पृष्ठ दोष नहीं है।
3MB फ़ाइल के पहले 8kB और अंतिम 3kB को पढ़ने की आवश्यकता है? ठीक है, पूरी फ़ाइल पढ़ें, और जो आप नहीं चाहते हैं उसे फेंक दें, क्योंकि बीच में मांगने से पूरी बात पढ़ने की तुलना में दस गुना धीमी हो जाएगी।

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

तो, यह प्रति से अधिक एल्गोरिदम नहीं है जो प्रभावित होते हैं, लेकिन उनकी उपयोगिता, और पसंद।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.