हम क्यों मान सकते हैं कि एल्गोरिथ्म को थोड़ा स्ट्रिंग के रूप में दर्शाया जा सकता है?


17

मैं कम्प्यूटेशनल जटिलता और ट्यूरिंग मशीनों के बारे में एक किताब पढ़ना शुरू कर रहा हूं। यहाँ उद्धरण है:

एक एल्गोरिथ्म (यानी, एक मशीन) एक बिट स्ट्रिंग के रूप में प्रतिनिधित्व किया जा सकता है जब हम कुछ विहित एन्कोडिंग पर निर्णय लेते हैं।

यह दावा एक साधारण तथ्य के रूप में प्रदान किया गया है, लेकिन मैं इसे समझ नहीं सकता।

उदाहरण के लिए, अगर मेरे पास एक एल्गोरिथ्म है जो इनपुट के रूप में लेता है और गणना ( x + 1 ) 2 या:x(x+1)2

int function (int x){
   x = x + 1; 
   return x**2; 
}

इसे वर्णमाला का उपयोग करके स्ट्रिंग के रूप में कैसे दर्शाया जा सकता है ?{0,1}


38
पाठ को कैसे एन्कोड किया गया है, यह समझने के लिए आपको न्यूनतम न्यूनतम आवश्यक ज्ञान नहीं है। आज सीखने के लिए बहुत अच्छा दिन है! joelonsoftware.com/2003/10/08/…
एरिक

1
मुझे लगता है कि उद्धृत पाठ में अस्पष्टता के आधार पर एक अलग दृष्टिकोण से ओपी इस पर आ सकता है। मुझे लगता है कि ओपी का अर्थ है 'ट्यूरिंग मशीन के लिए इनपुट नहीं' पूरी मशीन और एल्गोरिथ्म को एक बिट स्ट्रिंग के रूप में कैसे बनाया जा सकता है। उद्धृत पाठ का तात्पर्य है कि पूरे एल्गोरिथ्म को स्वयं निष्पादित किया जा सकता है, लेकिन सी भाषा का एक छोटा सा एनकोडेड यह कहता है कि कोई मशीन वास्तव में उस स्ट्रिंग पर कैसे कार्य करेगी।
प्रहरी

3
... मुझे लगता है कि रोमा की अनुभवहीनता की कीमत पर यहां हर कोई स्रोत को गलत समझ रहा है और मजाक को बहुत दूर ले जा रहा है। इन टिप्पणियों और उत्तरों में से अधिकांश पाठ को मनमाने ढंग से प्रसारण के लिए एन्कोडिंग करने के बारे में बात कर रहे हैं, जबकि बोली ट्यूरिंग मशीन द्वारा खपत के लिए एल्गोरिथ्म को एन्कोडिंग के बारे में बात कर रही है। (वर्तमान में) स्वीकार किए गए उत्तर को दूसरे वाक्य में कम से कम छूता है।
इज़काता

2
@ इज़्काता मुझे यकीन नहीं है कि यदि आप जानते हैं कि, सार्वभौमिकता के कारण, ये दोनों कथन समान हैं।
कोनराड रुडोल्फ

15
अजीब बात यह है कि आदेश में मुझे अपने कोडित एल्गोरिथ्म इसे पढ़ने के लिए सक्षम होने के लिए के लिए है जरूरी ही बिट्स के एक दृश्य में तब्दील किया जा करने के लिए को लिखते-लिखते था। यह कभी भी अलग तरह से प्रस्तुत नहीं किया गया - आपके कीबोर्ड से लेकर मेरे मॉनिटर तक। हमारे दिमाग में इसका गैर-बाइनरी प्रतिनिधित्व था; और शारीरिक स्तर पर, जब आप synapses को देखते हैं, तब भी यह बहस का मुद्दा है।
पीटर -

जवाबों:


45

आपके प्रश्न का सबसे भोला और सरल उत्तर यह है कि प्रदान किया गया कोड (और संकलित मशीन कोड) वास्तव में {0,1} * के वाक्यात्मक तार के रूप में दर्शाया गया है। इसके अतिरिक्त, चूंकि आप ट्यूरिंग मशीनों के बारे में बात कर रहे हैं, उनके द्वारा चलाए जाने वाले प्रोग्राम परिचालन / निर्देशों की एक रैखिक सूची है, कोई कारण नहीं है कि इन्हें बिट्स / बाइट्स के रूप में प्रस्तुत नहीं किया जा सकता है।


आप निर्देशों की एक सूची के रूप में ट्यूरिंग मशीन का प्रतिनिधित्व कैसे करते हैं? सामान्य परिभाषा कुछ इस तरह है
21

@svick नीचे दिए गए मेरे उत्तर के अनुसार, आप एक सार्वभौमिक TM का उपयोग करते हैं, जो इनपुट के रूप में TM का वर्णन लेता है (एक उपयुक्त फैशन में एन्कोडेड)
dseuss

@svick एक टेप के पार एक पॉइंटर को स्थानांतरित करने के लिए सरल निर्देशों के साथ एक प्रोग्रामिंग भाषा? मेरा मानना ​​है कि इस तरह का एक उदाहरण गूढ़ प्रोग्रामिंग भाषा ब्रेनफक हो सकता है । उदाहरण कोड
LukStorms

@ LukStorms मुझे नहीं लगता कि आप उस "ट्यूरिंग मशीन" को कभी भी कॉल कर सकते हैं।
svick

52

आपके पास पहले से ही पाठ के रूप में उस फ़ंक्शन का प्रतिनिधित्व है। ASCII एन्कोडिंग का उपयोग करके प्रत्येक वर्ण को एक-बाइट मान में कनवर्ट करें। फिर परिणाम बाइट्स की एक दृश्य, यानी, बिट्स की एक अनुक्रम, यानी, वर्णमाला के ऊपर एक स्ट्रिंग है । यह एक उदाहरण एन्कोडिंग है।{0,1}


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

@ PeterA.Schneider एनालॉग मीडिया या फेस-टू-फेस का उपयोग करने का मतलब यह नहीं है कि कोई एम्बेडेड असतत एन्कोडिंग नहीं है। एक असतत एन्कोडिंग का उपयोग करने से प्राकृतिक भाषा दूर नहीं है, है न?
जीन-बैप्टिस्ट यूनेस

32

मैं विरोध नहीं कर सकता ...

⡂⡀⣀⢀⣄⡀⣰⡉⡀⠀⡀⡀⣀⠀⢀⣀⢀⣄⡀⡂⢀⣀⡀⢀⢀⡀⠀⡰⣀⠀⣀⠀⡂⡀⣀⢀⣄⡰⡀⢠⠂
⡇⡏⠀⡇⡇⠀⢸⠀⡇⢀⡇⡏⠀⡇⣏⠀⠀⡇⠀⡇⣏⠀⣹⢸⠁⢸⠀⡇⢈⠷⡁⠀⡇⡏⠀⡇⡇⠀⡇⢼⠀
⠁⠁⠀⠁⠈⠁⠈⠀⠈⠁⠁⠁⠀⠁⠈⠉⠀⠈⠁⠁⠈⠉⠁⠈⠀⠈⠀⠱⠉⠀⠉⠀⠁⠁⠀⠁⠈⠱⠁⠘⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢤⡀⡤⠀⣀⣀⣀⠀⢤⡀⡤⠀⠀⢰⠀⠀⢹⠠⠀
⠀⠀⠀⣠⠛⣄⠀⠒⠒⠒⠀⣠⠛⣄⠀⠉⢹⠉⠁⢸⢀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀
⠀⠀⠀⣄⢄⠤⢄⢴⠤⢠⠀⢠⢠⡠⢠⡠⢄⠀⢤⡀⡤⢺⡖⠐⣷⠂⠊⢉⡆
⠀⠀⠀⡇⠸⣍⣉⠸⣀⠸⣀⢼⢸⠀⢸⠀⢸⠀⣠⠛⣄⠀⠀⠀⠀⠀⣴⣋⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

⢱⠀
⢸⠁
⠊

(ऊपर दिए गए डॉट्स, रिक्त स्थान शून्य दर्शाते हैं)।


5
मनोरंजक (+1) लेकिन यह एन्कोडिंग की अनिवार्य रूप से मनमानी प्रकृति को रेखांकित करता है।
जॉन कोलमैन

4
इसके लिए संकलक लिखने का मज़ा लें :)
Barmar


1
@Barmar ध्वनि के लिए एक चुनौती की तरह है codegolf.stackexchange.com
IMSoP

1
@RomaKarageorgievich यहाँ ब्रेल वर्णों के प्रतिपादन का कार्य करता है। यहां एक साधारण आवरण है जो इसे कमांड-लाइन से कॉल करने की अनुमति देता है।
लेफ्टरनबाउट

13

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


6
यह केवल विंडोज और क्यूटी या आईसीयू जैसे कुछ पुस्तकालयों में 16 बाइट्स है, जो यूटीएफ -16 का उपयोग करते हैं। और सभी अक्षर सामान्य रूप से UTF-32 में भी एक भी कोड इकाई नहीं लेते हैं, इसलिए वे अधिक लंबे हो सकते हैं। इसलिए मुझे लगता है कि इस चर्चा में ASCII से रहना बेहतर है, यहां यूनिकोड लाने से काफी जटिलता पैदा होगी।
रुस्लान

8

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

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

जैसा कि अन्य उत्तरों ने उल्लेख किया है, एएससीआईआई एन्कोडिंग या अन्य एनकोडिंग का उपयोग करके अपने उदाहरण एल्गोरिथ्म का प्रतिनिधित्व करना तुच्छ है।

मुझे लगता है कि इस कारण से कि आपकी पुस्तक इस कथन को एक तथ्य के रूप में प्रस्तुत करती है , इस तथ्य से कि कई लोग केवल एक एल्गोरिथ्म की परिभाषा के आधार के रूप में चर्च-ट्यूरिंग थीसिस का उपयोग करते हैं। यदि आप ऐसी परिभाषा का उपयोग करते हैं, तो यह एक तथ्य के रूप में स्पष्ट है "5 एक संख्या है" क्योंकि आपने मूल रूप से इसे इस तरह परिभाषित किया था।


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

मैं देख रहा हूं "अगर हम मशीन विनिर्देश के घटकों और किसी भाषा में तार के सेट के बीच एक इंजेक्शन निर्दिष्ट करते हैं, तो एक स्ट्रिंग को एक स्ट्रिंग के रूप में एन्कोड किया जा सकता है।" ओपी अपने उदाहरण में ऐसा करता है, जो मशीन को " $ (x + 1) ^ 2 $ " द्वारा दर्शाया गया है और इसे अच्छी तरह से बनाई गई C (या BCPL, C ++, et al।) कार्यों की भाषा में एक स्ट्रिंग के रूप में फिर से प्रस्तुत करता है। ।
एरिक टॉवर्स

1
@ एरिकटॉवर को चर्च-ट्यूरिंग थीसिस की आवश्यकता होती है। अन्यथा कोई निश्चित नहीं हो सकता है कि सभी एल्गोरिदम के लिए एक एल्गोरिथ्म का एक मशीन विनिर्देश मौजूद है।
Cort Ammon - मोनिका

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

1
टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
डीडब्ल्यू

4

यह कथन सार्वभौमिक टीएम के अस्तित्व पर आधारित है । ये मूल रूप से प्रोग्राम करने योग्य TM हैं जो किसी भी अन्य TM को अधिकांश पॉली ओवरहेड पर अनुकरण कर सकते हैं। इसलिए, आपका कार्यक्रम केवल शून्य और लोगों के रूप में एन्कोड किए गए इनपुट का हिस्सा है।


1
@Discretelizard, मैं आपका अनुसरण नहीं करता। कोई भी एल्गोरिथ्म एक सार्वभौमिक टीएम के इनपुट के रूप में अभिव्यक्त होता है। भाषाएं संगणनीय या असुविधाजनक हो सकती हैं; मैं एल्गोरिदम के लिए कम्प्यूटेशन की किसी भी मानक धारणा से परिचित नहीं हूं, इसलिए मुझे यकीन नहीं है कि आप क्या कर रहे हैं। एक अपरिहार्य एल्गोरिथ्म का क्या मतलब होगा? शायद आप एल्गोरिदम के बारे में सोच रहे हैं जो जरूरी नहीं कि समाप्त हो? लेकिन एक सार्वभौमिक टीएम अभी भी ऐसे एल्गोरिदम चला सकता है।
डीडब्ल्यू

@Discretelizard मैं या तो आप का पालन नहीं करते। ट्यूरिंग मशीन पर रनवेबल होना अनिवार्य रूप से एक एल्गोरिथ्म की परिभाषा है। मुझे लगता है कि आप के लिए एक "एल्गोरिथ्म" के बारे में बात कर सकते हैं, कहते हैं, एक ट्यूरिंग मशीन ओरेकल के साथ एक समस्या है, लेकिन आम तौर पर, "एल्गोरिथ्म" का अर्थ है "आप ट्यूरिंग मशीन पर कर सकते हैं।"
डेविड रिचेर्बी

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

4

ठीक है, आइए एल्गोरिदम के बारे में बात करते हैं जो किसी भी तरह के एन्कोडिंग के लिए एक बिट बिट-स्ट्रिंग के रूप में प्रतिनिधित्व नहीं किया जा सकता है।

मुझे आप के लिए इस तरह के एक एल्गोरिथ्म टाइप करें ... आह, लेकिन अगर मैं ऐसा करता हूं, तो मैं अपने टाइप किए गए पाठ के एन्कोडिंग के साथ उस एल्गोरिथ्म का प्रतिनिधित्व कर सकता हूं।

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

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

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


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


rAr

1
आरआर


@Discretelizard आप प्रतीकों के लिए बाहर चला जाएगा आरजल्दी से।
राफेल

@ राफेल हां, और? यह कोई आश्चर्य नहीं होना चाहिए कि एल्गोरिदम की बेशुमार संख्या को लिखना संभव नहीं है। और फिर, आप दावा करते हैं कि आप कुछ एल्गोरिदम को "व्यक्त" करते हैं जिन्हें लिखा नहीं जा सकता। मुझे समझ नहीं आ रहा है कि आप "एक्सप्रेस" से क्या मतलब है, लेकिन यह कम से कम अभिप्रेरित करने के लिए लगता है। जैसा कि मेरा दावा इस धारणा से शुरू होता है कि एक एल्गोरिथ्म का प्रतिनिधित्व नहीं किया जा रहा है, मैं यह देखने में विफल रहता हूं कि यह मेरा दावा कैसे विरोधाभासी है।
असतत छिपकली

2

इसे देखने का एक अन्य तरीका सूचना सिद्धांत के माध्यम से है। सार्थक / उपयोगी जानकारी / प्रश्नों के सभी एन्कोडिंग को बाइनरी 'सीक्वेंस' में बनाया जा सकता है।

अधिकांश क्षेत्र प्रश्न पर जाता है, "जानकारी के सार्थक टुकड़े को संवाद करने के लिए कम से कम औसत प्रश्न पूछने का तरीका क्या है?" व्यवहार में, यह वही है जो "कम से कम हां / ना के सवाल पूछने के लिए इष्टतम दृष्टिकोण क्या है यह समझने के लिए कि क्या कहा गया था या कहा गया था?"

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