सादगी के लिए, मैं केवल "निर्णय" समस्याओं पर विचार करके शुरू करूंगा, जिसमें हां / ना में जवाब होगा। फ़ंक्शन समस्याएं लगभग उसी तरह से काम करती हैं, हां / नहीं के बजाय, प्रत्येक इनपुट शब्द से जुड़ा एक विशिष्ट आउटपुट शब्द है।
भाषा : एक भाषा बस तार का एक सेट है। यदि आपके पास एक वर्णमाला है, जैसे कि
, तो सभी शब्दों का समूह है जिसमें केवल प्रतीकों में । उदाहरण के लिए, किसी भी लंबाई के सभी बाइनरी अनुक्रमों का सेट है। एक वर्णमाला को द्विआधारी होने की आवश्यकता नहीं है, यद्यपि। यह एकात्मक, टर्नरी आदि हो सकता है।Σ * Σ { 0 , 1 } *ΣΣ∗Σ{0,1}∗
एक वर्णमाला पर एक भाषा का कोई सबसेट है ।Σ *ΣΣ∗
समस्या : एक समस्या कुछ इनपुट के बारे में कुछ प्रश्न है जिसका हम उत्तर देना चाहते हैं। विशेष रूप से, एक निर्णय समस्या एक सवाल है जो पूछता है, "क्या हमारा दिया गया इनपुट संपत्ति को पूरा करता है ?X
एक भाषा किसी समस्या का औपचारिक बोध है। जब हम निर्णय समस्या के बारे में सैद्धांतिक रूप से तर्क करना चाहते हैं, तो हम अक्सर संबंधित भाषा की जांच करते हैं। एक समस्या , संबंधित भाषा है:X
वाई एक्स वाई एक्स }L={w∣w एक इनपुट की एन्कोडिंग है समस्या के लिए , और इनपुट का जवाब समस्या के लिए है "हाँ" yXyX}
यह निर्धारित करना कि किसी निर्णय समस्या के इनपुट का उत्तर "हां" है, यह निर्धारित करने के बराबर है कि वर्णमाला के ऊपर उस इनपुट का एन्कोडिंग संबंधित भाषा में है या नहीं।
एल्गोरिथ्म : एक एल्गोरिथ्म एक कदम-दर-चरण एक समस्या को हल करने के लिए है। ध्यान दें कि एक एल्गोरिथ्म कई मायनों और कई भाषाओं में व्यक्त किया जा सकता है, और यह कि किसी भी समस्या को हल करने वाले कई अलग-अलग एल्गोरिदम हैं।
ट्यूरिंग मशीन : ट्यूरिंग मशीन एक एल्गोरिथ्म का औपचारिक एनालॉग है। किसी दिए गए वर्णमाला पर ट्यूरिंग मशीन, प्रत्येक शब्द के लिए, या तो स्वीकार करने की स्थिति में रुकेगी या नहीं। इस प्रकार प्रत्येक ट्यूरिंग मशीन , एक संबंधित भाषा है:M
डब्ल्यू }L(M)={w∣M इनपुट पर एक स्वीकृत स्थिति में ।w}
(ट्यूरिंग मशीनों के बीच एक सूक्ष्म अंतर है जो सभी इनपुटों पर रुक जाता है और हां इनपुट्स पर रुक जाता है, जो जटिलता कक्षाओं और बीच अंतर को परिभाषित करता है ।)आर ईRRE
भाषाओं और ट्यूरिंग मशीनों के बीच संबंध इस प्रकार है
हर ट्यूरिंग मशीन बिल्कुल एक भाषा को स्वीकार करती है
एक से अधिक ट्यूरिंग मशीन हो सकती हैं जो किसी भाषा को स्वीकार करती हैं
कोई ट्यूरिंग मशीन नहीं हो सकती है जो किसी दी गई भाषा को स्वीकार करती है।
हम एल्गोरिदम और समस्याओं के बारे में लगभग एक ही बात कह सकते हैं: हर एल्गोरिथ्म एक समस्या को हल करता है, लेकिन 0 या कई हो सकते हैं, एल्गोरिदम किसी दिए गए समस्या को हल करते हैं।
समय जटिलता : एल्गोरिदम और समस्याओं के बीच भ्रम के सबसे आम स्रोतों में से एक जटिलता कक्षाओं के संबंध में है। सही आवंटन को निम्नानुसार संक्षेपित किया जा सकता है:
- एक एल्गोरिथ्म में एक समय जटिलता होती है
- एक समस्या यह है अंतर्गत आता है एक जटिलता वर्ग के लिए
एक एल्गोरिथ्म में एक निश्चित समय जटिलता हो सकती है। हम कहते हैं कि अगर एल्गोरिथ्म आकार किसी भी इनपुट के लिए चरणों में सबसे अधिक है, तो एल्गोरिथ्म में सबसे खराब स्थिति वाली ऊपरी-बँधी हुई जटिलता
।च ( n ) nf(n)f(n)n
समस्याएँ बार-बार नहीं होती हैं, क्योंकि समस्या एक विशिष्ट एल्गोरिथ्म से जुड़ी नहीं होती है जो वास्तव में चलती है। इसके बजाय, हम कहते हैं कि एक समस्या एक जटिलता वर्ग की है, अगर किसी एल्गोरिथ्म में उस समस्या को एक निश्चित समय की जटिलता से हल किया जाता है।
पी एक्स एक्स पी एक्स एक्स पीP,NP,PSPACE,EXPTIME आदि सभी जटिलता वर्ग हैं। इसका मतलब है कि उनमें समस्याएं हैं, एल्गोरिदम नहीं। एक एल्गोरिथ्म में कभी नहीं हो सकता , लेकिन वहाँ एक बहुपद समय एल्गोरिथ्म एक दिया समस्या को सुलझाने अगर , तो में है । वहाँ भी स्वीकार करने घातीय समय एल्गोरिदम का एक समूह हो सकता है , लेकिन बाद से वहाँ एक भी बहुपद समय एल्गोरिथ्म को स्वीकार करने से मौजूद है , उस में है ।PXXPXXP