लिंक की गई सूची O (1) के बीच में क्यों डाला जा रहा है?


105

लिंक की गई सूचियों पर विकिपीडिया लेख के अनुसार , लिंक की गई सूची के बीच में डालने को O (1) माना जाता है। मुझे लगता है कि यह O (n) होगा। क्या आपको नोड का पता लगाने की आवश्यकता नहीं होगी जो सूची के अंत के पास हो सकता है?

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

संपादित करें :

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

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

सरणी:

  • प्रविष्टि / विलोपन ओ (1) के बिंदु का पता लगाना
  • प्रविष्टि / हटाना O (n)

लिंक्ड सूची:

  • प्रविष्टि / विलोपन O (n) का बिंदु खोजना
  • प्रविष्टि / विलोपन O (1) करना

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

जवाबों:


113

आप सही हैं, लेख "अनुक्रमण" को एक अलग ऑपरेशन मानता है। अतः सम्मिलन स्वयं O (1) है, लेकिन उस मध्य नोड तक पहुंचना O (n) है।


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

@ Anony-Mousse क्या आप इसे थोड़ा और समझा सकते हैं? यानी हमें कई वस्तुओं को सम्मिलित करते समय केवल एक बार सम्मिलन की स्थिति खोजने की आवश्यकता है?
MyTitle

2
यह मौजूदा सूची के आकार में O (n) है, न कि आपके द्वारा वहां किए जाने वाले सम्मिलन की संख्या।
QUIT -

28

सम्मिलन स्वयं हे (1) है। नोड ढूँढना O (n) है।


25

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

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

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


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

6

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

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


5

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


3

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

सम्मिलित करना निम्न है:

  • तत्व डालें
  • पिछले लिंक
  • अगले लिंक
  • किया हुआ

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

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


3

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

आपको यह मिला। दिए गए बिंदु पर प्रविष्टि मानती है कि आप पहले से ही उस आइटम के लिए एक पॉइंटर रखते हैं जिसे आप बाद में डालना चाहते हैं:

InsertItem(item * newItem, item * afterItem)


2

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

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


0

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


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

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

0

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


0

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


0

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


0

सबसे आम मामले संभवतः भीख मांगने या सूची के अंत में सम्मिलित हो रहे हैं (और सूची के छोरों को खोजने में कोई समय नहीं लग सकता है)।

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


यदि आप खाली तत्वों को बफर के अंत में रखते हैं, तो एक सरणी के अंत में आइटम सम्मिलित करना O (1) होना संभव है, हालांकि कभी-कभी आवेषण अभी भी O (1) होगा। अधिकांश संग्रह यही करते हैं। तत्व संख्या (n + x)% लेन पर लौटने के लिए अपने अनुक्रमणिका ऑपरेटर को बदलकर किसी सरणी के प्रारंभ में O (1) आइटम बनाना संभव है, जहाँ x आपके द्वारा प्रारंभ में आइटम सम्मिलित करने की संख्या है सूची की। कभी-कभी इस तरह से लागू किया जाता है (लेकिन कभी-कभी दोगुनी लिंक वाली सूचियों के साथ भी लागू किया जाता है।
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.