2009-11-17 21 views
20

की गणना के लिए फास्ट एल्गोरिदम मैंने this page को फैक्टोरियल की गणना करने के लिए कई एल्गोरिदम का वर्णन किया। दुर्भाग्य से, स्पष्टीकरण terse हैं और मैं एल्गोरिदम के पीछे बुनियादी सिद्धांतों को समझने के लिए स्रोत कोड की रेखा के बाद लाइन के माध्यम से लाइन के माध्यम से बहने की तरह महसूस नहीं करता है।फैक्टोरियल

क्या कोई मुझे फैक्टोरियल की गणना के लिए इन (या अन्य तेज़) एल्गोरिदम के अधिक विस्तृत विवरणों के बारे में बता सकता है?

संपादित करें:This page प्रधानमंत्री गुणन की विधि, तकनीक सबसे अच्छा प्रदर्शन करने भाज्य एल्गोरिदम के सभी के लिए आम का वर्णन है। इसमें पायथन में कुछ अच्छा उदाहरण कोड भी शामिल है। लेखक a description of binary splitting से लिंक करता है और जर्नल ऑफ़ एल्गोरिदम ("फैक्टोरियल की गणना की जटिलता पर) में एक आलेख का संदर्भ देता है जो वादा करता है, अगर मैं केवल उस पर अपना हाथ प्राप्त कर सकता हूं।

+4

यदि आपका फैक्टोरियल बड़ा है, और आप अनुमान लगाते हैं, तो स्टर्लिंग के अनुमान को न भूलें। मैंने देखा कि उस पृष्ठ में इसका उल्लेख नहीं किया गया था। http://en.wikipedia.org/wiki/Stirling%27s_approximation – Rooke

+1

@ रूके: मैं बड़े फैक्ट्रोरियल की गणना करना चाहता था ... शायद मुझे अपने प्रश्न में स्पष्ट होना चाहिए था। फिर भी सुझाव के लिए धन्यवाद! – ThisSuitIsBlackNot

+0

आप मेरा [फास्ट सटीक बिगिन फैक्टोरियल] (https://stackoverflow.com/a/18333853/2521214) – Spektre

उत्तर

9

रिचर्ड फ़ेटमैन द्वारा paper (PDF link) देखें। कोड नमूने लिस्प में हैं, लेकिन किसी भी घटना में, अधिकांश गुप्त फोड़े नीचे आपको बिग्नम (मनमाना सटीक पूर्णांक) गणनाओं की संख्या को कम करने के लिए नीचे उबलते हैं।

स्वाभाविक रूप से, यदि आपको bignums की आवश्यकता नहीं है, तो यह छोटा है; या तो एक लुकअप टेबल या एक साधारण पाश ठीक हो जाएगा।

संपादित करें: यदि आप एक अनुमानित जवाब का उपयोग कर सकते हैं, तो आप भाज्य के लघुगणक की गणना कर सकता या तो सीधे k = 2 ... n के लिए log(k), संक्षेप द्वारा या सम्मानित Stirling approximation का उपयोग करके। अतिप्रवाह से बचने के लिए आप जहां भी संभव हो लॉगरिदम के साथ काम करना चाहते हैं; विशेष रूप से, स्टर्लिंग के अनुमान का एक बेवकूफ आवेदन बहुत से स्थानों में बह जाएगा जहां इसे नहीं करना है।

+0

+1 भी कोशिश कर सकते हैं: वह पेपर बहुत उपयोगी है (हालांकि मेरा लिस्प थोड़ा जंगली है)। दुर्भाग्यवश, ऐसा लगता है कि लुस्की अधिक जटिल एल्गोरिदम के लिए जाने-माने लड़के हैं, इसलिए मैं उनके स्रोत कोड के माध्यम से पढ़ना बंद कर सकता हूं। – ThisSuitIsBlackNot

4

एक और तरीका भी है। यह विधि here विस्तृत है जो थोड़ी सी अतिरिक्तता और घटाव के लिए गुणा की मात्रा को कम करती है। आप शायद पहली विधि दिखाएंगे, और दिखाया गया दूसरा तरीका एक दिलचस्प पठन है यदि आप इसे समझ सकते हैं।

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