कार्यात्मक भाषाओं के लिए एल्गोरिथ्म की जटिलता कैसे निर्धारित की जाती है?


38

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

तब कार्यात्मक भाषाओं के लिए एल्गोरिथ्म जटिलता का एक वैकल्पिक मॉडलिंग होना चाहिए?


3
यह वही हो सकता है जो आप खोज रहे हैं।
अरस्तु २५'१

1
आपके प्रश्न का उत्तर यहां दिया जा सकता है: cs.stackexchange.com/q/18262/755 । विशेष रूप से, दोनों भाषाओं की क्षमताओं पर कुछ उपयुक्त मान्यताओं के लिए, विशुद्ध रूप से फ़ंक्शन भाषा में समय जटिलता, अधिकांश अनुपात में समय की जटिलता से भिन्न होती है । O(logn)
डीडब्ल्यू

3
जीएचसी हास्केल परस्पर सारणी और पेड़ों और व्हाट्सएप का समर्थन करता है, जो आपको "राज्य सूत्र" ( STमठ) का उपयोग करके ओ (1) समय में ट्री नोड्स का उपयोग और संशोधित करने की अनुमति देता है ।
टान्नर स्विट

1
@ याकूब जार्विस निर्भर करता है। क्या एक सूची आपके लिए एक अमूर्त डेटाटाइप है, या आप विशेष रूप से लिंक की गई सूचियों पर विचार कर रहे हैं?
राफेल

1
एल्गोरिथम जटिलता के लिए आप किस उद्देश्य की तलाश कर रहे हैं? क्या आप ऐसी किसी चीज़ की तलाश कर रहे हैं जो गणितीय रूप से शुद्ध हो, या ऐसी कोई चीज़ जो व्यावहारिक हो? व्यावहारिक मूल्य के लिए, आपको उन चीजों पर ध्यान देना चाहिए जैसे कि आपके पास मेमोराइजेशन उपलब्ध है या नहीं, लेकिन गणितीय शुद्धतावादी दृष्टिकोण से, कार्यान्वयन की क्षमताएं मायने नहीं रखती हैं।
कॉर्ट अमोन

जवाबों:


34

यदि आप मानते हैं कि -calculus कार्यात्मक प्रोग्रामिंग भाषाओं का एक अच्छा मॉडल है, तो कोई सोच सकता है: -calculus में समय-जटिलता की एक साधारण सी धारणा है: बस कटौती कदमों की संख्या गिनें _ ।λλβ(λx.M)NM[N/x]

लेकिन क्या यह एक अच्छी जटिलता उपाय है?

इस प्रश्न का उत्तर देने के लिए, हमें स्पष्ट करना चाहिए कि पहली जगह में जटिलता माप से हमारा क्या मतलब है। एक अच्छा जवाब स्लॉट और वैन एम्ड बोस थीसिस द्वारा दिया गया है : किसी भी अच्छी जटिलता के माप में ट्यूरिंग मशीनों का उपयोग करके परिभाषित समय-जटिलता की विहित धारणा के लिए एक बहुपद संबंध होना चाहिए। दूसरे शब्दों में, वहाँ एक 'उचित' एन्कोडिंग होना चाहिए से ट्यूरिंग मशीन, इस तरह के कुछ बहुपद के लिए करने के लिए -calculus शर्तों , यह मामला है कि प्रत्येक शब्द के लिए आकार की: में मान को कम करता है -reduction चरण ठीक उसी समय जब मान में घट जाता हैtr(.)λpM|M|Mp(|M|) βtr(M)p(|tr(M)|) ट्यूरिंग मशीन के चरण।

एक लंबे समय के लिए, यह स्पष्ट नहीं था कि क्या इसे λ-पथरी में प्राप्त किया जा सकता है। मुख्य समस्याएं निम्नलिखित हैं।

  • ऐसे शब्द हैं जो सामान्य रूपों (चरणों की एक बहुपद संख्या) में उत्पन्न होते हैं जो घातीय आकार के होते हैं। यहां तक ​​कि सामान्य रूपों को लिखते समय घातीय समय लगता है।
  • चुनी गई कटौती की रणनीति एक महत्वपूर्ण भूमिका निभाती है। उदाहरण के लिए, ऐसे शब्दों का एक परिवार मौजूद है, जो समानांतर steps-चरणों की एक बहुपद संख्या में घटता है ( इष्टतम λ- कमी के अर्थ में ), लेकिन जिनकी जटिलता गैर-प्राथमिक है (मतलब बदतर तब घातीय)।

बी। अकैटोली और यू। डल लागो द्वारा " बीटा रिडक्शन इनवेरिएंट, एक्चुअली " पेपर एक 'उचित' एन्कोडिंग दिखा कर समस्या को स्पष्ट करता है जो बहुपदीय समय के कार्यों की जटिलता वर्ग पी को सुरक्षित रखता है, जो सबसे बाहरी कॉल-बाय-नेम कटौती को मानता है। । प्रमुख अंतर्दृष्टि यह है कि घातीय झटका केवल 'निर्बाध' कारणों से हो सकता है जिसे उचित बंटवारे से हराया जा सकता है। दूसरे शब्दों में, क्लास P एक ही है कि क्या आप इसे ट्यूरिंग मशीन स्टेप्स या (सबसे बाहरी-बाहरी) -निर्धारण की गणना करते हैं ।β

मुझे यकीन नहीं है कि अन्य मूल्यांकन रणनीतियों के लिए स्थिति क्या है। मुझे पता नहीं है कि अंतरिक्ष जटिलता के लिए एक समान कार्यक्रम किया गया है।


23

एल्गोरिथम जटिलता को निचले स्तर के विवरण से स्वतंत्र होने के लिए डिज़ाइन किया गया है।

नहीं वास्तव में नहीं। हम हमेशा कुछ मशीन मॉडल में प्राथमिक संचालन की गणना करते हैं:

  • ट्यूरिंग मशीनों के लिए कदम।
  • रैम पर बुनियादी संचालन।

आप शायद पूरे / / -business के बारे में सोच रहे थे । हालांकि यह सच है कि आप Landau asymptotics के साथ कुछ कार्यान्वयन विवरणों को हटा सकते हैं, आपको मशीन मॉडल के प्रभाव से छुटकारा नहीं मिलता है। एल्गोरिथ्म में बहुत अलग समय चल रहा है, TM और RAM कहते हैं - भले ही आप केवल -classes पर विचार करें !ΩΘOΘ

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


माना। साइड नोट: लोग हैं अक्सर क्या आपरेशन "निरंतर" कर रहे हैं के बारे में गलतियों का एक बहुत हैं। जैसे a + b मान रहा है O(1)जब यह वास्तव में हैO(log ab)
पॉल ड्रेपर

3
@PaDDraper यह एक अलग धारणा है, जरूरी नहीं कि गलती हो। हम जो चाहते हैं उसे मॉडल कर सकते हैं - सवाल यह है कि क्या यह दिलचस्प सवालों का जवाब देता है। यह भी देखें यहाँ
राफेल

"मशीन मॉडल से छुटकारा पाएं" जैसे एक बहुत भयानक लगता है
पॉल ड्रपर

@PaDraper निर्भर करता है कि आप "मशीन" शब्द से किस तरह की भावनाओं को जोड़ते हैं। इस चर्चा को भी देखें । FWIW, यूनिट-कॉस्ट रैम मॉडल - यकीनन एल्गोरिथम विश्लेषण में मानक मॉडल! - है उपयोगी है, अन्यथा यह अब दशकों के लिए इस्तेमाल किया गया है नहीं होगा। सॉर्टिंग, सर्च ट्रेस आदि के सभी परिचित सीमाएं उस मॉडल पर आधारित हैं। यह समझ में आता है क्योंकि यह वास्तविक कंप्यूटरों को मॉडल करता है जब तक कि संख्या रजिस्टरों में फिट होती है।
राफेल

1

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


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