12

मैं सिर्फ कंप्यूटर विज्ञान का एक शुरुआत कर रहा हूं। मैंने समय चलने के बारे में कुछ सीखा लेकिन मुझे यकीन नहीं है कि जो मैंने समझा वह सही है। तो कृपया मेरी मदद करो।पूर्णांक कारक एक गैर-बहुपद समय क्यों है?

तो पूर्णांक कारककरण वर्तमान में बहुपद समय की समस्या नहीं है लेकिन प्रारंभिक परीक्षण है। मान लें कि चेक करने की संख्या एन है। यदि हम यह तय करने के लिए एक प्रोग्राम चलाते हैं कि 1 से sqrt (n) से प्रत्येक नंबर एन को विभाजित कर सकता है, और यदि उत्तर हाँ है, तो संख्या को स्टोर करें। मुझे लगता है कि यह कार्यक्रम बहुपद समय है, है ना?

एक संभावित तरीका है कि मैं गलत हूं, एक कारक कार्यक्रम को पहले प्राइम की खोज के बजाय सभी प्राइम ढूंढना चाहिए। तो शायद यही कारण है।

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

+0

आपने जो कहा था वह जांच रहा है कि संख्या प्रमुख है या नहीं। – Emil

+1

क्योंकि संख्याएं बड़ी हैं! – nullpotent

+0

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

उत्तर

14

"बहुपद फैक्टरिंग जैसे जटिलता के आकस्मिक विवरण एल्गोरिदम "इनपुट के आकार के संबंध में आम तौर पर जटिलता को संदर्भित करता है, इनपुट की व्याख्या नहीं। तो जब लोग कहते हैं कि "कोई ज्ञात बहुपद फैक्टरिंग एल्गोरिदम" नहीं है, तो उनका मतलब है कि एन - प्राकृतिक प्राकृतिक संख्याएं जो एन के संबंध में समय बहुपद में चलती हैं, के लिए कोई ज्ञात एल्गोरिदम नहीं है। संख्या के संबंध में बहुपद नहीं है, जो 2^एन तक हो सकता है।

+0

इनपुट का आकार, इनपुट की व्याख्या नहीं है? और हम इनपुट की व्याख्या के बजाय इनपुट के आकार का प्रतिनिधित्व करने के लिए बिट्स का उपयोग क्यों करते हैं? – Gerald

1

यदि हम यह तय करने के लिए एक प्रोग्राम चलाते हैं कि 1 से वर्ग (एन) से प्रत्येक नंबर एन को विभाजित कर सकता है, और यदि उत्तर हाँ है, तो नंबर को स्टोर करें।

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

मुझे लगता है कि घातीय रनटाइम की परिभाषा है: n एक बिट लंबा बनाएं, एल्गोरिदम दो गुना लंबा लेता है।

लेकिन ध्यान दें कि यह अवलोकन केवल आपके द्वारा प्रस्तावित एल्गोरिदम पर लागू होता है। यह अभी भी अज्ञात है अगर पूर्णांक कारकीकरण बहुपद है या नहीं। क्रिप्टोग्राफर्स यकीन करते हैं कि यह नहीं है, लेकिन वैकल्पिक एल्गोरिदम भी हैं जो प्राइम फैक्टरलाइजेशन (जैसे अंडाकार वक्र क्रिप्टोग्राफी) पर निर्भर नहीं हैं, केवल 0 ...

5

कारक बनाने की कठिनाई उन सुंदर गणितीय समस्याओं में से एक है जो समझने में आसान है और आपको तुरंत मानव ज्ञान के किनारे ले जाती है। इस विषय पर सारांश (आज के) ज्ञान को सारांशित करने के लिए: हम नहीं जानते कि यह क्यों मुश्किल है, किसी भी प्रमाण के साथ नहीं, और सर्वोत्तम तरीकों से हम बहुपद समय से अधिक में चल रहे हैं (लेकिन घातीय समय में भी काफी कम)। नतीजा यह है कि primality testing पी में भी हाल ही में है; लिंक किए गए विकिपीडिया पेज देखें।

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

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

संबंधित मुद्दे