2012-12-12 21 views
9

मैंने this जैसे लिंक किए गए सूचियों के कार्यान्वयन के साथ देशी पायथन सूची के प्रदर्शन की तुलना में कुछ त्वरित प्रयोग करने की कोशिश की है।क्यों पाइथन में देशी लिंक्ड सूची कार्यान्वयन नहीं है?

देशी पायथन सूचियां उन मामलों में गैर देशी लिंक्ड सूची से हमेशा तेज़ होती हैं जहां उन्हें नहीं होना चाहिए (सिद्धांत के अनुसार)।

from linkedlist import * 
import time 
a = LinkedList() 
b = [] 
for i in range(1000000): 
    b.append(i) 
    a.add_first(i) 
t0 = time.clock() 
a.remove(10) 
t1 = time.clock() 
b.remove(10) 
t2 = time.clock() 
print t1-t0 
print t2-t1 

परिणाम मैं परीक्षण पर है ऊपर हैं:

  • देशी लिंक्ड सूची = 2.00000000001e-05

  • अजगर सूची = 0,005576

  • गैर देशी सूची जुड़ा हुआ = 3.90000000001e-05

तो, मैं सोच रहा था कि क्यों पाइथन के मूल लिंक्ड सूची डेटा संरचना नहीं है। पायथन के मामले में, यह मुझे लगता है कि यह मानक लाइब्रेरी के कुछ पहलुओं को गति देने के लिए मानक सूचियों की बजाय लिंक्ड लिस्ट में उपयोगी एल्गोरिदमिक रूप से बोल सकता है।

मेरी समझ यह है कि सूची डेटा संरचना भाषा का एक प्रमुख भवन ब्लॉक है और यह कोड को उस डेटा संरचना पर ध्यान केंद्रित करने के लिए अधिक रखरखाव और आसानी से अनुकूलन बनाता है।

क्या कोई अन्य कारण है?

+0

मुझे आपके परीक्षण में दो 'प्रिंट' और तीन परिणाम मिलते हैं - आपकी "मूल" लिंक्ड सूची कहां से आ रही है? – Eric

+1

मैंने अलग-अलग कार्यान्वयन के साथ कई बार परीक्षण चलाए हैं, साथ ही मैंने इस त्वरित और सुपर गंदे कोड को स्विंग के साथ बनाया है http://cl.ly/code/2A3t352q1m1Y – lc2817

+1

क्या आप पूछ रहे हैं "क्यों डेवलपर्स ने लिंक की गई सूची डीएस को बाहर करने का निर्णय लिया अजगर? " अनुलेख मुझे लगता है कि प्रश्न SO में फिट करने के लिए थोड़ा सा व्यक्तिपरक है, शायद प्रोग्रामर.एसई? – amit

उत्तर

8

पायथन में collections.deque है जो एक मूल द्वि-लिंक्ड सूची है।

+0

धन्यवाद! आपकी जानकारी के लिए collections.deque के साथ एक ही परीक्षण 8.00000000001e-06 – lc2817

+6

देता है यह उत्तर गलत दिखता है। collections.deque सिर्फ एक कतार है जिसे पूंछ के साथ-साथ सिर से भी पहुंचा जा सकता है।लिंक्डलिस्ट का पूरा बिंदु एक्स तत्व के बाद या वाई तत्व को हटाने के लिए तत्व डालने में सक्षम होना है। डेक इन तरीकों को प्रदान नहीं करता है। ओपी का सवाल अभी भी सच है। पाइथन में मूल लिंक्डलिस्ट कार्यान्वयन क्यों नहीं है? – Mugen

+0

@Mugen सही है, संग्रह .deque हुड के तहत एक दोगुनी-लिंक्ड सूची हो सकती है (मुझे नहीं पता) लेकिन इसका इंटरफ़ेस एक लिंक की गई सूची का नहीं है क्योंकि इसमें मध्य के तत्वों को डालने और पॉप करने के तरीकों की कमी है क्षेत्र। इसलिए हालांकि यह प्रश्न में परीक्षण उदाहरण के लिए एक अच्छा समाधान है, संग्रह .deque उन समस्याओं के लिए एक सामान्य समाधान नहीं है जो पायथन में एक लिंक्ड सूची के लिए कॉल करते हैं। – gregrf

0

ऐसा इसलिए है क्योंकि बिल्डिंग सूची विधि को जोड़ने के बजाय अधिकांश समय लेती है। इसलिए, जब यह दिखाया गया है कि यह एक रैखिक समय ऑपरेशन नहीं है, (उदा: एन^2 ऑपरेशन) संलग्न करने की विधि इमारत की तुलना में अधिक महत्वपूर्ण होगी जिससे आप जो परिणाम देखना चाहते हैं उसका नेतृत्व करेंगे।

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