गणना का कौन सा मॉडल "सर्वश्रेष्ठ" है?


41

1937 में ट्यूरिंग ने ट्यूरिंग मशीन का वर्णन किया। तब से कम्प्यूटेशन के कई मॉडल एक मॉडल को खोजने के प्रयास में घोषित किए गए हैं जो एक वास्तविक कंप्यूटर की तरह है लेकिन एल्गोरिदम को डिजाइन और विश्लेषण करने के लिए अभी भी काफी सरल है।

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

इसलिए, मैं समझना चाहता हूं कि कौन से मौजूदा मॉडल एल्गोरिदम डिजाइन करने के लिए "सर्वश्रेष्ठ" हैं और मैं गणना के मॉडल पर एक अप-टू-डेट और विस्तृत सर्वेक्षण की तलाश कर रहा हूं, जो मॉडल और वास्तविकता को उनके निकटता प्रदान करता है।


1
MathOverflow ( mathoverflow.net/questions/44558/… ) पर क्रॉस-पोस्ट किया गया है , हालाँकि यहाँ पुनर्निर्देशित किया गया है।
डेव क्लार्क

@ ततियाना, अच्छा सवाल, "सर्वश्रेष्ठ" से आपका क्या मतलब है? क्या आपका मतलब सैद्धांतिक रन-टाइम वाला मॉडल है जो "वास्तविक" रन-टाइम के करीब है?
मोहम्मद अल-तुर्कस्टनी

8
यदि आप सही समय पर "वास्तविक" मॉडल की तलाश कर रहे हैं, तो ऐसा लगता है कि यह सटीक रूप से मॉडल कैश करने के लिए महत्वपूर्ण हो सकता है। विशेष रूप से, आधुनिक कंप्यूटिंग में कैशिंग की कई परतें हैं (सीपीयू, रैम, डिस्क, आदि ...) कुछ परतों के साथ दूसरों की तुलना में धीमे में परिमाण के आदेश हैं; यह एक एल्गोरिथ्म के "वास्तविक" रनटाइम के लिए कैश मिस की संख्या से निर्धारित होने के लिए सवाल से बाहर नहीं है। वास्तविक रूप से, मैंने सुना है कि रैखिक प्रोग्रामिंग में बाधा विधियां उनकी खराब सैद्धांतिक गारंटी के बावजूद इतना अच्छा प्रदर्शन करती हैं क्योंकि वे अक्सर काफी कैश-कुशल होते हैं।
22

4
जहां तक ​​मैं बता सकता हूं, जैसा कि महम कहते हैं, रैम मॉडल में अनुमानित रनिंग टाइम की सबसे बड़ी विसंगतियां और वास्तविक रनिंग टाइम आमतौर पर डेटा रिट्रीवल के कारण उत्पन्न होते हैं ... गलत चर कैश्ड मेमोरी में होते हैं और रिट्रीवल समय धीमा हो जाता है। इस वजह से बहुत नीचे। इसे सैद्धांतिक पदानुक्रम-मेमोरी मॉडल के साथ मॉडल करने के लिए कई प्रयास किए गए हैं, और मुझे विश्वास नहीं है कि इनमें से कोई भी प्रयास बहुत सफल रहा है, क्योंकि मॉडल आसानी से काम करने के लिए बहुत जटिल होते हैं।
पीटर शोर

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

जवाबों:


30

मैंने हमेशा मानक वर्ड रैम मॉडल को आपके अर्थ में "सर्वश्रेष्ठ" माना है। हर कोई जो सी (या जावा, जैसे किसी भी ढीले समकक्ष) जैसी भाषा में प्रोग्राम करना सीखता है, कंप्यूटर के बारे में सोचने पर इस मॉडल को ध्यान में रखता है।

बेशक, कभी-कभी आपको उन शासनों के आधार पर सामान्यीकरण की आवश्यकता होती है जिसमें आप काम करते हैं। बाहरी मेमोरी मॉडल को ध्यान में रखना महत्वपूर्ण है। यह न केवल तब लागू होता है जब आप डिस्क के साथ काम करते हैं, बल्कि समझ में भी आता है (आपको देखभाल करने के लिए मजबूर करता है) कैश। बेशक, इसे बहुत गंभीरता से व्यवहार करना भी निरर्थक परिणाम पैदा कर सकता है, क्योंकि शुद्ध बाहरी मेमोरी मॉडल गणना की गणना नहीं करता है। वर्ड रैम का एक और सामान्यीकरण समानतावाद के लिए है, लेकिन इस समय हम सभी थोड़ा उलझन में हैं :)

O(n)O(nlgn)nn

एल्गोरिदम और "वास्तविकता" पर एक अंतिम टिप्पणी: हमेशा ध्यान रखें कि आप क्या हासिल करने की कोशिश कर रहे हैं। जब हम एल्गोरिदम में काम करते हैं, तो हम वहां सबसे कठिन समस्याओं को हल करने की कोशिश कर रहे हैं (जैसे कि 50 चर पर सैट, या एक बिलियन सॉर्टिंग)। यदि आप 200 संख्याओं को क्रमबद्ध करने या 20 चर पर SAT को हल करने की कोशिश कर रहे हैं, तो आपको किसी फैंसी एल्गोरिथ्म की आवश्यकता नहीं है। यही कारण है कि वास्तविकता में अधिकांश एल्गोरिदम एक तरह से तुच्छ हैं। यह एल्गोरिथम अनुसंधान के बारे में कुछ भी बुरा नहीं कहता है - हम सिर्फ वास्तविक समस्याओं के उस असामान्य 1/1000 हिस्से में रुचि रखते हैं जो कठिन होते हैं ...


आपके उत्तर के लिए धन्यवाद। मैं समझना चाहता हूं कि कौन से सामान्यीकरण शब्द रैम में जोड़ने लायक हैं। क्या हम एक मॉडल का वर्णन कर सकते हैं, जिसमें बिट-वेक्टर ऑपरेशन, समानता, कैश जैसे सभी चाल शामिल होंगे, और अभी भी सरल होंगे?
तातियाना Starikovskaya

10

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

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

यह सब कहने के बाद, यदि आप जानना चाहते हैं कि क्या आपका एल्गोरिथ्म तेजी से चलने की संभावना है, या तो सबसे अधिक संभावना होगी :-)


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

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

8

मॉडल सिर्फ मॉडल होते हैं। मैं इसे बहुत दूर नहीं धकेलूंगा; वे आपके एल्गोरिदम के कुछ पहलुओं के बारे में कुछ बताते हैं, लेकिन पूरी सच्चाई नहीं।

मेरा सुझाव है कि आप बस अपने विश्लेषण में मानक शब्द रैम मॉडल का उपयोग करें और एल्गोरिथ्म को लागू करें और देखें कि यह व्यवहार में कितना अच्छा है।

(वास्तव में बस अपने एल्गोरिथ्म को कभी बिना चलाए लागू करना आपको इसके बारे में पहले से ही बहुत कुछ बताता है ... एक बात के लिए, यह तब लागू करने योग्य है।)


3
खैर, मुझे दो आपत्तियां हैं। सबसे पहले, इतने सारे सिद्धांतवादी एल्गोरिदम को लागू नहीं करते हैं और फिर भी हम किसी तरह उनकी तुलना करते हैं। दूसरी बात, मैं यह समझना चाहता हूं कि हम एक ऐसे कंप्यूटर की कौन-सी विशेषताएं जोड़ सकते हैं, जो उसकी सादगी को नहीं खोती हैं।
तातियाना Starikovskaya

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

5

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

आधुनिक मल्टी-कोर कंप्यूटरों के लिए, 2008 में आर्ग, गुडरिक, नेल्सन और सिचिनवा द्वारा पेश किए गए समानांतर संस्करण एक सटीक मॉडल हो सकते हैं।


5

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

प्रो : कारण और पागलपन के बीच ठीक लाइन चलने की सनसनी के अलावा कोई नहीं;

कान्स : टन ...

:-D (केवल एक मजाक, मैं मूल रूप से पिछले उत्तरों से सहमत हूं ...)


1

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

सार से उद्धृत करने के लिए:

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

हम तर्क देते हैं कि कुछ वैज्ञानिक और इंजीनियरिंग संगणनाओं को गति देने के लिए प्रतिवर्ती 3 डी मेष का एक सिलिकॉन कार्यान्वयन आज मूल्यवान हो सकता है, और प्रस्ताव है कि मॉडल को समस्याओं की एक विस्तृत श्रृंखला के समानांतर एल्गोरिदम के सिद्धांत में भविष्य के अध्ययन का ध्यान केंद्रित करना चाहिए।

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