Is there a faster way to get subtrees from tree like structures in python than the standard "recursive"? -
आइए, निम्न डेटा स्ट्रक्चर को तीन numpy arrays (id, parent_id) (मूल तत्व का parent_id -1) के साथ मान लें:
np वर्ग के रूप में numpy आयात करें MyStructure (वस्तु): def __init __ (स्वयं): "" "अब के लिए डिफ़ॉल्ट संरचना: 1 / \ 2 3 / \ 4 5" "" self.ids = Np.array ([1,2,3,4,5]) self.parent_ids = np.array ([- 1, 1, 1, 3, 3]) def id_successors (स्वयं, idOfInterest): "" "तार्किक लौटें इंडेक्स। "" रिटर्न स्व। Parent_ids == idOfInterest def subtree (self, newRootElement): "" "सबट्री के तत्वों की ओर इशारा करते हुए तार्किक सूचकांक लौटें।" "Init_vector = np.zeros (लेन (स्वयं।), बूल ) Init_vector [np.where (self.ids == newRootElement) [0] अगर राशि (self.id_successors (newRootElement)) == 0: return init_vector else: subtree_vec = init_vector स्वयं के लिए su.ids में [स्व। id_successors (newRootElement) == 1]: Subtree_vec + = self.subtree (sucs) वापसी subtree_vec
यह कई आईडी (> 1000) के लिए वास्तव में धीमा है। क्या आप इसे लागू करने का एक तेज़ तरीका है?
क्या आपने पाइथन का उपयोग कर रहे psycod मॉड्यूल का उपयोग करने की कोशिश की है 2.6? यह कभी-कभी कोड की नाटकीय गति बढ़ा सकता है।
क्या आपने रिकर्सिव डेटा संरचना माना है: सूची?
आपका उदाहरण मानक सूची के रूप में भी है:
[1, [3, [4], [5]]]
या
[1, [2, कोई नहीं, कोई नहीं], [3, [4, कोई भी, कोई नहीं], [5, कोई नहीं, कोई नहीं]]]
मेरे द्वारा:
[1, [2, कोई भी नहीं, कोई नहीं], [3, [4, कोई नहीं, कोई नहीं], [5, कोई नहीं, कोई नहीं]]]
सबट्रीस तैयार हैं, आपको सही समय पर मूल्य डालने के लिए सही पेड़ ।
इसके अलावा, गुइडो खुद को ट्रैवर्सिंग और पेड़ों में कुछ अंतर्दृष्टि प्रदान करता है, शायद आप इसके बारे में जानते हैं।
यहां कुछ उन्नत लग रही पेड़ सामग्री है , वास्तव में मूल सूची प्रकार प्रतिस्थापन के रूप में पायथन के लिए प्रस्तावित किया गया था, लेकिन उस समारोह में अस्वीकार कर दिया।
Comments
Post a Comment