विभिन्न डेटा संरचनाओं की समय जटिलताएं क्या हैं?


86

मैं Arrays, बाइनरी सर्च ट्री, हीप, लिंक्ड सूची, आदि जैसे सामान्य डेटा संरचनाओं के संचालन की समय जटिलताओं को सूचीबद्ध करने की कोशिश कर रहा हूं और विशेष रूप से मैं जावा की बात कर रहा हूं। वे बहुत आम हैं, लेकिन मुझे लगता है कि हम में से कुछ सटीक उत्तर के बारे में 100% आश्वस्त नहीं हैं। किसी भी मदद, विशेष रूप से संदर्भ, की बहुत सराहना की जाती है।

उदाहरण के लिए एकल लिंक की गई सूची के लिए: एक आंतरिक तत्व को बदलना O (1) है। आप यह कैसे कर सकते हैं? आप है यह बदलने से पहले तत्व खोज करने के लिए। इसके अलावा, वेक्टर के लिए, एक आंतरिक तत्व जोड़ना ओ (एन) के रूप में दिया जाता है। लेकिन हम इसे अनुक्रमणिका का उपयोग करते हुए लगातार परिमाण में क्यों नहीं कर सकते हैं? अगर मुझे कुछ याद आ रहा है तो कृपया मुझे सुधारें।

मैं अपने निष्कर्षों / अनुमानों को पहले उत्तर के रूप में पोस्ट कर रहा हूं।


2
सभी डेटा संरचनाओं के लिए समय और स्थान की जटिलताएं बिग हे धोखा शीट
Vbp

1
यदि कोई अन्य व्यक्ति इसमें कदम उठाता है, तो इस लिंक की जाँच करने के लिए एक मिनट भी लें: infotechgems.blogspot.gr/2011/11/…
vefthym

जवाबों:


244

Arrays

  • सेट करें, एक विशेष सूचकांक पर तत्व की जाँच करें : O (1)
  • खोज : O (n) यदि सरणी अनसुलझी है और O और (log n) यदि सरणी को क्रमबद्ध किया गया है और एक द्विआधारी खोज की तरह कुछ का उपयोग किया जाता है,
  • जैसा कि आइवन द्वारा बताया गया है , एरेसDelete पर कोई ऑपरेशन उपलब्ध नहीं है । हम अपनी आवश्यकताओं के आधार पर किसी तत्व को कुछ विशिष्ट मानों, जैसे -1, 0, आदि पर सेट करके प्रतीकात्मक रूप से हटा सकते हैं
  • इसी तरह, Insertसरणियों के लिए मूल Setरूप से शुरुआत में उल्लेख किया गया है

सारणी सूची:

  • जोड़ें : Amortized O (1)
  • निकालें : O (n)
  • शामिल हैं : O (n)
  • आकार : O (1)

लिंक्ड सूची:

  • सम्मिलित करना : O (1) , यदि सिर पर किया गया है, तो O (n) यदि कहीं और है क्योंकि हमें लिंक्डलिस्ट को रैखिक रूप से पार करके उस स्थिति में पहुंचना है।
  • हटाना : O (1) , यदि सिर पर किया गया है, तो O (n) अगर कहीं और है, क्योंकि हमें लिंक्डलिस्ट को रैखिक रूप से पार करके उस स्थिति में पहुंचना है।
  • खोज : O (n)

संदेह-लिंक की गई सूची:

  • सम्मिलित करना : O (1) , यदि सिर या पूंछ पर किया जाता है, तो O (n) अगर कहीं और है क्योंकि हमें लिंक्डइन को रैखिक रूप से पार करके उस स्थिति तक पहुंचना है।
  • हटाना : O (1) , यदि सिर या पूंछ पर किया जाता है, तो O (n) यदि कहीं और है क्योंकि हमें लिंक्डलिस्ट को रैखिक रूप से पार करके उस स्थिति तक पहुंचना है।
  • खोज : O (n)

ढेर:

  • पुश : ओ (1)
  • पॉप : ओ (1)
  • शीर्ष : O (1)
  • खोजें (एक विशेष ऑपरेशन के रूप में लुकअप जैसा कुछ): O (n) (मुझे ऐसा लगता है)

कतार / Deque / परिपत्र कतार:

  • सम्मिलित करें : O (1)
  • निकालें : O (1)
  • आकार : O (1)

बाइनरी सर्च ट्री:

  • सम्मिलित करें, हटाएं और खोजें : औसत केस: O (लॉग एन) , सबसे खराब मामला: O (n)

लाल-काला पेड़:

  • सम्मिलित करें, हटाएं और खोजें : औसत केस: O (लॉग एन) , सबसे खराब मामला: O (लॉग एन)

हीप / प्रायोरिटी क्यू (न्यूनतम / अधिकतम):

  • न्यूनतम खोजें / अधिकतम खोजें : O (1)
  • सम्मिलित करें : O (लॉग एन)
  • डिलीट मिन / डिलीट मैक्स : ओ (लॉग एन)
  • निकालें Min / Extract अधिकतम : O (लॉग एन)
  • लुकअप, डिलीट (यदि सभी प्रदान की गई है): O (n) , हमें सभी तत्वों को स्कैन करना होगा क्योंकि वे 4ST के समान नहीं हैं

HashMap / Hashtable / HashSet:

  • डालें / हटाएं : O (1) amortized
  • पुनः आकार / हैश : O (n)
  • शामिल हैं : O (1)

3
एरे में एक तत्व सम्मिलित करना (और डालने से मेरा मतलब है कि नए तत्व को स्थिति में जोड़ना, सभी तत्वों को दाईं ओर स्थानांतरित करना) O (n) लेगा। विलोपन के लिए भी। केवल मौजूद तत्व की जगह O (n) लेगा। इसके अलावा यह संभव है कि आप इसे नए तत्व को रिजिस्टेबल एरे से जोड़ दें (यह ओ (1) समय को संशोधित कर दिया गया है)।
आइवीयन

कृपया यह भी ध्यान दें, कि डब्ली-लिंक्ड लिस्ट के लिए सिर और पूंछ दोनों को डालने और हटाने में O (1) (आपने केवल हेड का उल्लेख किया है) लगेगा।
आइवीयन

और अंतिम नोट, संतुलित खोज पेड़ (उदाहरण के लिए, लाल-काला पेड़ जो वास्तव में जावा में ट्रीपेज़ के लिए उपयोग किया जाता है) ने सभी कार्यों के लिए ओ (एलएन एन) के सबसे खराब समय की गारंटी दी है।
आइवीयन

@Aivean: मैं मानक डेटा संरचनाओं के लिए मानक संचालन को सूचीबद्ध करने की कोशिश कर रहा हूं। Arrays के लिए: जोड़ने / हटाने के दौरान तत्वों को स्थानांतरित करना एक मानक ऑपरेशन नहीं है। इसके अलावा, मौजूदा तत्व को प्रतिस्थापित करते हुए O (1) का उपयोग किया जाता है, न कि O (n)। डब्ली-लिंक्ड सूची के लिए: आप सही हैं, मैं सुधार कर रहा हूं। लाल-काले पेड़ों के लिए: फिर से, आप सही हैं। लेकिन मैंने सिर्फ एक बीएसटी को सूचीबद्ध किया है, जिसे संतुलित करने की आवश्यकता नहीं है। इसलिए, मैं रेड-ब्लैक ट्रीज़ के लिए नई प्रविष्टि जोड़ूंगा। टिप्पणियों के लिए धन्यवाद!
भूषण

1
@ सुहेलगुप्ता: सेट फॉर कॉम्प्लेक्सिटी को पहले ही अंतिम बिंदु के रूप में दिया गया है।
भूषण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.