2011-04-07 11 views
8

के लिए सत्यापन की आवश्यकता है मैंने किसी दिए गए नंबर के कारकों को खोजने के लिए एक एल्गोरिदम विकसित किया है। इस प्रकार यह यह जानने में भी मदद करता है कि दिया गया नंबर एक प्रमुख संख्या है या नहीं। मुझे लगता है कि यह कारकों या प्रमुख संख्याओं को खोजने के लिए सबसे तेज़ एल्गोरिदम है।मेरे पास रैखिक समय में कारकों या प्राइम खोजने के लिए एक नया एल्गोरिदम है - इस

यह एल्गोरिदम पाता है कि 5 * एन (जहां एन इनपुट संख्या है) के समय सीमा में एक देना संख्या प्रमुख है। तो मुझे उम्मीद है कि मैं इसे एक रैखिक समय एल्गोरिदम कह सकता हूं।

मैं कैसे सत्यापित कर सकता हूं कि यह सबसे तेज़ एल्गोरिदम उपलब्ध है या नहीं? क्या कोई इस मामले में मदद कर सकता है? (तेजी से GNFS और दूसरों जाना जाता है)

एल्गोरिथ्म

Input: A Number (whose factors is to be found) 
Output: The two factor of the Number. If the one of the factor found is 1 then it can be concluded that the 
Number is prime. 

Integer N, mL, mR, r; 
Integer temp1; // used for temporary data storage 
mR = mL = square root of (N); 
/*Check if perfect square*/ 
temp1 = mL * mR; 
if temp1 equals N then 
{ 
    r = 0; //answer is found 
    End; 
} 
mR = N/mL; (have the value of mL less than mR) 
r = N%mL; 
while r not equals 0 do 
{ 
    mL = mL-1; 
    r = r+ mR; 

    temp1 = r/mL; 
    mR = mR + temp1; 
    r = r%mL; 
} 
End; //mR and mL has answer 

नीचे दिया गया है प्रदान करें अपनी टिप्पणी .. न मुझे किसी भी अधिक जानकारी के लिए संपर्क करने में संकोच।

धन्यवाद, हरीश http://randomoneness.blogspot.com/2011/09/algorithm-to-find-factors-or-primes-in.html

+3

यदि 2 से अधिक कारक हैं तो क्या होगा? आपके अच्छे प्रश्न और अच्छे परीक्षण के लिए – BlackBear

+0

+1। मुझे विश्वास नहीं है कि आपका प्रश्न 68 बार देखा गया है, कि एक जवाब को +6 अपवॉट मिले और ** ** कोई भी ** आपको वोट नहीं दिया। तो टूटा हुआ है। सादा और सरल। प्रश्न पूछने वाले लोग प्रत्येक बार उत्तर उखाड़ फेंकना चाहिए। हो सकता है कि हर उत्तर अपवोट के लिए एक प्रतिनिधि बिंदु के 1/10 वें। – SyntaxT3rr0r

+0

@ सिंटेक्सटी 3rr0r: ठीक है, सुझाव दें कि [मेटा] (http://meta.stackoverflow.com) पर (हालांकि मुझे लगता है कि यह [इस] जैसे प्रश्नों के प्रकाश में अस्वीकार कर दिया जाएगा (http://stackoverflow.com/questions/3 9 05734)) –

उत्तर

13

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

+0

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

+3

इनपुट आकार लॉग_2 (एन) के बारे में होगा; यानी, एन लगभग 2^बी है जहां बी बिट्स में इनपुट आकार है। तो आपके एल्गोरिदम का चलने का समय 2^बी के आनुपातिक है ... सिवाय इसके कि वास्तव में यह उससे भी बदतर है, क्योंकि बहुत बड़ी संख्या के संचालन जैसे अतिरिक्त और गुणा निरंतर समय के संचालन नहीं होते हैं; इसके अलावा बी के लिए आनुपातिक समय लगता है, और गुणा और विभाजन कुछ और बी लॉग बी की तरह। तो आपका एल्गोरिदम रनटाइम 2^बी बी लॉग बी जैसा कुछ है। दूसरी तरफ, जीएनएफएस कुछ (जैसे एबी)^1/3 (लॉग बी)^2/3) है, जहां ए स्थिर है जो 64/9 होता है। –

+1

यदि बी = 100, उदाहरण के लिए, तो 2^बी बी लॉग बी लगभग 33 अंकों लंबा है, जबकि एक्स ((एबी)^1/3 (लॉग बी)^2/3) लगभग 11 अंकों लंबा है। –

2

मैं अपने एल्गोरिथ्म पर बारीकी से देखा नहीं है, लेकिन अभाज्य संख्या परीक्षण आमतौर पर कर रहे हैं की तुलना में तेजी हे (एन) (जहां n इनपुट संख्या है)। उदाहरण के लिए ले लो इस सरल एक:

def isprime(n): 
    for f in range(2,int(sqrt(n))): 
     if n % f == 0: 
     return "not prime" 
    return "prime" 

यहाँ यह निर्धारित की जाती है ओ (sqrt (एन)) अगर n प्रधानमंत्री है या नहीं, बस sqrt के लिए सभी संभव कारकों ऊपर जाँच (एन) द्वारा

+0

@hammar और @sth: कृपया मेरे प्रश्न के लिए गैरेथ मैककॉवन के जवाब के तहत टिप्पणी के रूप में अपनी टिप्पणियों के लिए मेरा उत्तर पाएं। अगर आप में से कोई भी मेरी मदद कर सकता है तो इस एल्गोरिदम के लिए किए गए समय की गणना कैसे करें? – harish

5

इस मामले में इनपुट के आकार n नहीं है, लेकिन में n बिट्स की संख्या है, तो आपके एल्गोरिथ्म का चलने का समय इनपुट के आकार में घातीय है। इसे pseudo-polynomial time के रूप में जाना जाता है।

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