2009-05-08 15 views
63

Wikipedia article on linked lists के अनुसार, एक लिंक्ड सूची के बीच में डालने पर ओ (1) माना जाता है। मुझे लगता है कि यह ओ (एन) होगा। क्या आपको नोड का पता लगाने की आवश्यकता नहीं है जो सूची के अंत के पास हो सकता है?एक लिंक की गई सूची ओ (1) के बीच में क्यों डालना है?

क्या यह विश्लेषण नोड ऑपरेशन (हालांकि यह आवश्यक है) की खोज के लिए खाता नहीं है और केवल प्रविष्टि ही है?

संपादित:

लिंक्ड सूचियों सरणियों पर कई फायदे हैं। किसी सूची के विशिष्ट बिंदु पर किसी तत्व का सम्मिलन निरंतर समय का संचालन होता है, जबकि किसी सरणी में सम्मिलन में तत्वों के आधे भाग को स्थानांतरित करने की आवश्यकता हो सकती है, या अधिक।

उपरोक्त कथन मेरे लिए थोड़ा भ्रामक है। मुझे सही अगर मैं गलत हूँ, लेकिन मुझे लगता है कि इस निष्कर्ष पर होना चाहिए:

सरणी:

  • प्रविष्टि के बिंदु ढूँढना/विलोपन हे (1)
  • प्रदर्शन प्रविष्टि/विलोपन हे (एन)

लिंक्ड सूची:

  • प्रविष्टि के बिंदु ढूँढना/विलोपन हे (एन)
  • प्रदर्शन प्रविष्टि/विलोपन हे (1)

मुझे लगता है कि केवल समय आप स्थिति है खोजने के लिए नहीं होगा यदि आप कुछ रखा इसके लिए सूचक का प्रकार (जैसे कुछ मामलों में सिर और पूंछ के साथ)। इसलिए हम स्पष्ट रूप से यह नहीं कह सकते कि लिंक्ड सूचियां हमेशा डालने/हटाने के विकल्पों के लिए सरणी को हराती हैं।

+4

नहीं * काफी * एक डुप्लिकेट। पिछला प्रश्न तुलनात्मक आधारों के साथ तुलनात्मक आधारों के रूप में गतिशील सरणी पर केंद्रित है। –

उत्तर

75

आप सही हैं, लेख "इंडेक्सिंग" को एक अलग ऑपरेशन के रूप में मानता है। तो सम्मिलन स्वयं ओ (1) है, लेकिन उस मध्य नोड को प्राप्त करना ओ (एन) है।

+2

जो एक ही स्थिति में 1 से अधिक ऑब्जेक्ट डालने पर बड़ा अंतर बनाता है ... –

+0

@ एनी-मूस क्या आप इसे थोड़ा और समझा सकते हैं? यानी हमें कई ऑब्जेक्ट्स डालने पर केवल एक बार प्रविष्टि स्थिति की आवश्यकता है? – MyTitle

+1

यह ओ (एन) मौजूदा सूची के आकार में है, न कि प्रविष्टियों की संख्या जो आप वहां करने की योजना बना रहे हैं। –

3

क्योंकि इसमें कोई लूपिंग शामिल नहीं है।

डालने की तरह है:

  • डालने तत्व
  • पिछले
  • लिंक के लिए लिंक अगले
  • करने के लिए किया

इस किसी भी मामले में लगातार समय है।

नतीजतन, एन तत्वों को एक दूसरे के बाद डालना ओ (एन) है।

2

डालने वाला ओ (1) एक बार जब आप जानते हैं कि आप कहां जा रहे हैं।

17

नहीं, जब आप तय करते हैं कि आप डालना चाहते हैं, तो यह माना जाता है कि आप सूची के माध्यम से पहले से ही बीच में हैं।

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

संपादित करें: मैन, आप दूसरा पैराग्राफ टाइप करते हैं और अचानक पहले उत्तरदाता होने की बजाय आप 5 वें कह रहे हैं, जैसा कि पहले 4 जैसा ही है!

+0

हा हाँ जो बेकार है ... मैंने तुम्हारा +1 किया क्योंकि यह बताता है कि लिंक्ड सूचियों सम्मिलन जटिलता को पहले से ही वांछित सूचक पर होने के संदर्भ में माना जाता है। –

3

क्या यह विश्लेषण नोड ऑपरेशन (हालांकि यह आवश्यक है) की खोज के लिए खाता नहीं है और केवल प्रविष्टि ही है?

आपको यह मिला। एक भी बिंदु पर प्रविष्टि मानता है कि आप पहले से ही आइटम है कि आप सम्मिलित करना चाहते करने के लिए एक सूचक पकड़ के बाद: प्रविष्टि ही

InsertItem(item * newItem, item * afterItem) 
0

लेख सूची के साथ सरणियों तुलना के बारे में है। दोनों सरणी और सूचियों के लिए सम्मिलित स्थिति ढूंढना ओ (एन) है, इसलिए लेख इसे अनदेखा करता है।

+1

एक सरणी का सम्मिलन बिंदु नहीं ढूंढ रहा है ओ (1)? चूंकि सरणी को संयोजित स्मृति में संग्रहीत किया जाता है, इसलिए इसे ऑफसेट जोड़ना होता है। –

+0

यह अनुक्रमणित होगा। – Brian

+0

@ vg1890 - आपको पहले ऑफ़सेट ढूंढना होगा। –

0

हे (1) कि तथ्य यह है कि आप एक आइटम जहां आप नए आइटम डाल देगा है के आधार पर किया जाता है। (पहले और बादमे)। यदि आप नहीं करते हैं, तो यह ओ (एन) है क्योंकि आपको वह आइटम मिलना चाहिए।

2

नहीं, यह खोज के लिए खाते में नहीं है। लेकिन यदि आपके पास सूची के मध्य में किसी आइटम के लिए पहले से ही पॉइंटर है, तो उस बिंदु पर डालने से ओ (1) है।

यदि आपको इसकी तलाश करनी है, तो आपको खोज के लिए समय जोड़ना होगा, जो ओ (एन) होना चाहिए।

0

मुझे लगता है कि यह ओ() नोटेशन के लिए गिनने के लिए आप क्या चुनते हैं इसका एक मामला है। गिनने के लिए सामान्य ऑपरेशन डालने के मामले में कॉपी ऑपरेशन है। एक सरणी के साथ, बीच में डालने से स्मृति में स्थान के ऊपर सब कुछ कॉपी करना शामिल है। एक लिंक्ड सूची के साथ, यह दो पॉइंटर्स सेट हो जाता है। आपको स्थान को खोजने की ज़रूरत है, इससे कोई फर्क नहीं पड़ता कि आपको क्या डालना है।

5

एक सरणी की तुलना करने के प्रयोजनों के लिए, जो चार्ट दिखाता है, यह ओ (1) है क्योंकि आपको नए नोड के बाद सभी आइटमों को स्थानांतरित करने की आवश्यकता नहीं है।

तो हाँ, वे मानते हैं कि आपके पास पहले से ही उस नोड के सूचक हैं, या पॉइंटर प्राप्त करना छोटा है। दूसरे शब्दों में, समस्या कहा गया है: "एक्स पर दिया नोड, क्या इस नोड के बाद सम्मिलित करने के लिए कोड है?" आप सम्मिलित बिंदु पर शुरू करने के लिए मिलता है।

0

आप ऑपरेशन के बाद हे (1) एक लिंक्ड सूची के लिए है सम्मिलित करने के लिए नोड के संदर्भ है।
एक सरणी के लिए यह अभी भी ओ (एन) है क्योंकि आपको सभी निरंतर नोड्स को स्थानांतरित करना है।

0

सबसे आम मामले शायद शुरुआत में या सूची के अंत में डाले जा रहे हैं (और सूची के सिरों को खोजने में कोई समय नहीं लग सकता है)।

कंट्रास्ट कि (यह शुरुआत में अगर जो सरणी का आकार बदलने की आवश्यकता है अगर यह अंत में है, या आकार बदलने और सभी तत्वों चलती) शुरुआत या किसी सरणी के अंत में आइटम डालने के साथ। एक लिंक्ड सूची में

+0

एक सरणी के अंत में आइटम डालना संभव है ओ (1) यदि आप अंत में खाली तत्वों का बफर रखते हैं, हालांकि कभी-कभी आवेषण अभी भी ओ (1) होगा। अधिकांश संग्रह यह करते हैं। एक सरणी की शुरुआत में वस्तुओं को निष्क्रिय करना भी संभव है ओ (1) अपने इंडेक्स ऑपरेटर को तत्व संख्या (एन + एक्स)% लेन लौटने के लिए बदलकर, जहां x शुरुआत में आइटम डालने की संख्या है सूची में से। कभी-कभी डेक को इस तरह कार्यान्वित किया जाता है (लेकिन कभी-कभी दोगुनी लिंक्ड सूचियों के साथ भी कार्यान्वित किया जाता है। – Brian

3

निवेशन यह भर में पुनरावृत्ति से अलग है।आप आइटम का पता नहीं लगा रहे हैं, आप आइटम को वहां रखने के लिए पॉइंटर्स रीसेट कर रहे हैं। इससे कोई फर्क नहीं पड़ता कि यह सामने के अंत के पास या अंत के पास डाला जा रहा है, फिर भी सम्मिलन में पॉइंटर्स को पुन: असाइन किया जा रहा है। यह इस बात पर निर्भर करेगा कि यह कैसे लागू किया गया था, लेकिन यह सूचियों की ताकत है - आप आसानी से सम्मिलित कर सकते हैं। इंडेक्स के माध्यम से एक्सेस करना एक सरणी चमकती है। एक सूची के लिए, हालांकि, यह एनएच आइटम खोजने के लिए आमतौर पर ओ (एन) होगा। कम से कम मुझे स्कूल से याद है।

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