का उपयोग कर अधिकतम रिकर्सन गहराई को मारना पृष्ठभूमि: मैं न्यूनतम निर्माण एल्गोरिदम का उपयोग करके एक शब्दकोश का प्रतिनिधित्व करने के लिए एक त्रिभुज का निर्माण कर रहा हूं। इनपुट सूची 4.3 एम यूटीएफ -8 स्ट्रिंग्स है, जो लीक्सिकोग्राफिक रूप से क्रमबद्ध है। परिणामी ग्राफ विश्वकोश है और इसकी अधिकतम गहराई 638 नोड्स है। मेरी स्क्रिप्ट की पहली पंक्ति रिकर्सन सीमा को 1100 से sys.setrecursionlimit()
पर सेट करती है।पिकल/सीपीकल
समस्या: मैं डिस्क पर अपने त्रिभुज को क्रमबद्ध करने में सक्षम होना चाहता हूं, इसलिए मैं इसे स्क्रैच (लगभग 22 मिनट) के पुनर्निर्माण के बिना स्मृति में लोड कर सकता हूं। मैंने टेक्स्ट और बाइनरी प्रोटोकॉल दोनों के साथ pickle.dump()
और cPickle.dump()
दोनों की कोशिश की है।
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 663, in _batch_setitems
save(v)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 725, in save_inst
save(stuff)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 648, in save_dict
self.memoize(obj)
RuntimeError: maximum recursion depth exceeded
मेरे डेटा संरचनाओं अपेक्षाकृत आसान है: trie
एक शुरुआत के राज्य का संदर्भ होता है, और कुछ तरीकों को परिभाषित करता है हर बार, मैं एक ढेर का पता लगाने कि ऐसा दिखाई देता हो। dfa_state
में एक बुलियन फ़ील्ड, एक स्ट्रिंग फ़ील्ड, और लेबल से राज्य में एक शब्दकोश मैपिंग शामिल है।
मैं pickle
की आंतरिक कार्यप्रणाली से बहुत परिचित नहीं हूं - क्या मेरी अधिकतम रिकर्सन गहराई को कुछ एन के लिए त्रिभुज की गहराई के बराबर/बराबर होना चाहिए? या यह किसी और चीज के कारण हो सकता है जो मुझे अनजान है?
अद्यतन: रिकर्सन गहराई को 3000 तक सेट करने में मदद नहीं मिली, इसलिए यह एवेन्यू आशाजनक नहीं दिख रहा है।
अपडेट 2: आप लोग सही थे; मुझे लगता है कि अचार डिफ़ॉल्ट रिकर्सन सीमाओं के कारण एक छोटी घोंसले की गहराई का उपयोग करेगा, यह समझने में मुझे कम-से-कम देखा जा रहा था। 10,000 चाल है।
मुझे पता चला है कि बढ़ती रिकर्सन सीमा का उपयोग स्मृति उपयोग पर एक मजबूत प्रभाव है ... – fccoelho
http://svn.python.org/projects/python/trunk/Tools/scripts/find_recursionlimit.py आपको ऊपरी ढूंढने में मदद कर सकता है आपके हार्डवेयर की सीमा – Ullullu