2015-06-05 4 views
9

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

हालांकि एल .insert (अनुक्रमणिका, वस्तु) को ओ (एन) समय जटिलता की आवश्यकता है।

क्या एल के लिए एक और डेटा संरचना है जो एक ही उद्देश्य की सेवा करेगी, लेकिन तेजी से सम्मिलन की अनुमति देगी?

+0

बाइनरी खोज पेड़? ऐसा लगता है कि पाइथन में कोई भी नहीं बनाया गया है, लेकिन शायद एक के लिए कहीं एक पैकेज है। –

+0

हाँ बाइनरी सर्च ट्री ओ (1) सम्मिलन है। –

+0

आह मैं आशा करता था कि आप लोग बीएसटी नहीं कहेंगे। :( – user4967499

उत्तर

4

ब्लिस्ट मॉड्यूल देखें।

https://pypi.python.org/pypi/blist/

यह हे (लॉग एन) प्रविष्टि दावा करता है।

उपयोग:

x = #list contents 
y = blist(x) 
y.insert(index, object) #now works in O(log n) 
+2

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर केवल लिंक ही अमान्य हो सकते हैं। –

3

sortedcontainers.SortedList के लिए बाहर एक चिल्लाओ। यह तेजी से सम्मिलित समय के साथ, आपकी सूची स्वचालित रूप से क्रम में रखेगा।

from sortedcontainers import SortedList 

mylist = SortedList([1, 2, 4, 5]) 
mylist.add(3) 
mylist 
#>>> SortedList([1, 2, 3, 4, 5], load=1000) 

SortedListinsertions are amortized O(sqrt n), or O(cbrt n) with different choices of parameters, लेकिन यह blist, जो O(log n) है की तुलना में बेहतर मापता है, क्योंकि स्थिरांक ज्यादा बेहतर कर रहे हैं। a very in-depth look at performance on their website है।

वैकल्पिक रूप से, आप priority queue चाहते हैं, इस मामले में आप the heapq module के साथ संभावित रूप से तेज़ी से आवेषण प्राप्त कर सकते हैं।

+0

'ओ (लॉग एन)' भाग [सख्ती से सच नहीं है] (http://www.grantjenks.com/doc एस/sortedcontainers/प्रदर्शन-scale.html)। 'sortedcontainers.SortedList' सूची [सूचियों की संतुलित सूचियों] में डेटा संग्रहीत करता है (http://www.grantjenks.com/docs/sortedcontainers/implementation.html) और तेजी से अमूर्त समय प्राप्त करने वाले डेटा इलाके का फायदा उठाता है। बिग-ओ सम्मिलित जटिलता, सख्ती से बोल रही है, 'ओ (एन^2)', लेकिन बड़े "लोड फैक्टर" के कारण, अमूर्त डालने की जटिलता ~ 'n^(1/3)' है। – randomir

+0

@randomir धन्यवाद, यह वास्तव में कुछ है [मुझे पता था] (https://www.reddit.com/r/Python/comments/4ge9xs/python_sorted_collections/d2hkra5/), बस जब मैंने इसे लिखा था। मेरी पोस्ट अब तय है। – Veedrac

+0

फिर भी एक अच्छा जवाब है, हालांकि (मुझे 'sortedcontainers' के बारे में पता नहीं था, शायद इसलिए कि मुझे आज तक उनकी आवश्यकता नहीं थी :))। – randomir

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