आसन्न सूची या बेहतर विकल्प मैट्रिस कब होते हैं?


15

मुझे बताया गया था कि यदि ग्राफ विरल है और मैट्रिक्स घना है तो हम एक सूची का उपयोग करेंगे । मेरे लिए, यह सिर्फ एक कच्ची परिभाषा है। मैं इससे आगे नहीं देखता। क्या आप यह स्पष्ट कर सकते हैं कि इसे बनाना कब स्वाभाविक होगा?

अग्रिम में धन्यवाद!



यह एक परिभाषा नहीं है, क्योंकि ज्यादातर "विरल" और "घने" की कोई एक परिभाषा नहीं है। इसके अलावा, अन्य विचार भी हैं, उदाहरण के लिए, ग्राफ़ के किन पहलुओं को आप कितनी बार एक्सेस करते हैं।
राफेल

@ राफेल क्या आप अन्य विचारों के बारे में अधिक जानकारी में जा सकते हैं?
user21312

1
@ user21312, एक बड़ा अंतर किनारों की पहुंच बनाम उपयोगिता है। यदि आपको अक्सर किनारों पर पुनरावृति करने की आवश्यकता होती है, तो adj सूची अधिक उपयोगी हो सकती है। यदि आपको अक्सर यह निर्धारित करने की आवश्यकता होती है कि कोई बढ़त मौजूद है या उसके वजन (या अन्य जानकारी) तक पहुंच है, तो मैट्रिक्स बेहतर हो सकता है।
रयान

आपके उद्देश्य के लिए, हम शायद इस बारे में लापरवाह हो सकते हैं कि 'विरल' और 'सघन' की परिभाषा क्या है। बस मैट्रिक्स ऑपरेशन के समय की जटिलता को मॉडल करें जिसे आप प्रत्येक प्रकार के डेटास्ट्रक्चर के लिए उपयोग करना चाहते हैं और देखें कि 'घनत्व का विराम बिंदु' कहाँ है। मुझे लगता है कि @ आर्यन की दूसरी कड़ी कुछ ऐसा ही करने की कोशिश कर रही है
एपीवाट चनतबीबुल

जवाबों:


17

सबसे पहले ध्यान दें कि विरल का मतलब है कि आपके पास बहुत कम किनारे हैं, और घने का अर्थ है कई किनारों, या लगभग पूरा ग्राफ। एक पूर्ण ग्राफ में आपके पास किनारे हैं, जहां नोड्स की संख्या है।nn(n1)/2n

अब, जब हम मैट्रिक्स प्रतिनिधित्व का उपयोग करते हैं, तो हम नोड-कनेक्टिविटी जानकारी को स्टोर करने के लिए मैट्रिक्स आवंटित करते हैं, उदाहरण के लिए, यदि नोड्स और बीच बढ़त है , अन्यथा । लेकिन अगर हम आसन्न सूची का उपयोग करते हैं तो हमारे पास नोड्स की एक सरणी होती है और प्रत्येक नोड इसके आसन्न सूची में होती है जिसमें केवल इसके पड़ोसी नोड होते हैंM [ i ] [ j ] = 1 i j M [ i ] [ j ] = n×nM[i][j]=1ijM[i][j]=0

अब यदि कोई ग्राफ विरल है और हम मैट्रिक्स निरूपण का उपयोग करते हैं तो अधिकांश मैट्रिक्स कोशिकाएं अप्रयुक्त रह जाती हैं जिससे स्मृति का अपव्यय होता है। इस प्रकार हम आम तौर पर विरल रेखांकन के लिए मैट्रिक्स प्रतिनिधित्व का उपयोग नहीं करते हैं। हम आसन्न सूची पसंद करते हैं।

लेकिन यदि ग्राफ़ सघन है तो किनारों की संख्या (पूर्ण) , या करीब है यदि ग्राफ़ स्वयं-लूप से निर्देशित है। फिर मैट्रिक्स पर आसन्न सूची का उपयोग करने का कोई फायदा नहीं है।n 2n(n1)/2n2

अंतरिक्ष जटिलता के संदर्भ में
निकटता मैट्रिक्स: आसन्न सूची: जहां संख्या नोड है, किनारों की संख्या है।O ( n + m ) n mO(n2)
O(n+m)
nm

जब ग्राफ अनिर्दिष्ट पेड़ तो है
संलग्नता मैट्रिक्स: संलग्नता सूची: है (बेहतर )O ( n + n ) O ( n ) n 2O(n2)
O(n+n)O(n)n2

जब ग्राफ निर्देश दिया जाता है, पूर्ण, के साथ आत्म लूप तो
संलग्नता मैट्रिक्स: संलग्नता सूची: है (कोई फर्क नहीं)O ( n + n 2 ) O ( n 2 )O(n2)
O(n+n2)O(n2)

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


"एक आसन्न सूची के साथ, यह रैखिक समय ले सकता है" - यह देखते हुए कि आपकी आसन्न सूची (शायद) में किसी भी प्राकृतिक क्रम का अभाव है, यह एक हैश सेट के बजाय एक सूची क्यों है?
केविन

1
@ केविन तब इसे "सूची" के बजाय "आसन्न हैश" कहा जाएगा। भी संभव है, क्यों नहीं? लेकिन अगर आप बस डीएफएस या बीएफएस, या कुछ अन्य प्रक्रिया करते हैं जो व्यवस्थित रूप से सभी नोड्स को स्कैन करता है तो हैश ओवर सूची का उपयोग करने का क्या फायदा है? किसी भी मामले में आप सभी आसन्न नोड्स का निरीक्षण करेंगे।
fade2black

3
मुझे लगता है कि लगभग पूरी तरह से रेखांकन के लिए अप्रत्यक्ष अप्रत्यक्ष मामले में, यह अपने पूरक, यानी एक विरल ग्राफ को संग्रहीत करने के लिए अधिक संभव हो सकता है। तो एक मैट्रिक्स उपयोगी होता है जब लगभग आधे किनारे मौजूद होते हैं।
एम। शीतकालीन

3

एक सरल सादृश्य प्रदान करके उत्तर देने के लिए .. अगर आपको 6oz पानी स्टोर करना होता, तो क्या आप (आमतौर पर बोलते हुए) 5 गैलन कंटेनर, या 8oz कप के साथ ऐसा करते?

अब, अपने प्रश्न पर वापस आ रहे हैं .. यदि आपके मैट्रिक्स का अधिकांश हिस्सा खाली है, तो इसका उपयोग क्यों करें? इसके बजाय प्रत्येक मान को सूचीबद्ध करें। हालांकि, अगर आपकी सूची वास्तव में लंबी है, तो इसे संघनित करने के लिए सिर्फ एक मैट्रिक्स का उपयोग क्यों न करें?

सूची बनाम मैट्रिक्स के पीछे तर्क वास्तव में इस मामले में सरल है।

पुनश्च एक सूची वास्तव में सिर्फ एक एकल स्तंभ मैट्रिक्स है !!! (आपको यह दिखाने की कोशिश की जा रही है कि यह निर्णय / परिदृश्य कैसा है)


2

नोड्स और किनारों के साथ एक ग्राफ पर विचार करें । कम-क्रम की शर्तों को अनदेखा करते हुए, ग्राफ़ के लिए एक बिट मैट्रिक्स बिट का उपयोग करता है, इससे कोई फर्क नहीं पड़ता कि कितने किनारे हैं।एन NEN2

हालांकि आपको वास्तव में कितने बिट्स की आवश्यकता है?

यह मानते हुए कि किनारे स्वतंत्र हैं, नोड और किनारों के साथ रेखांकन की संख्या । इस सबसेट को संग्रहीत करने के लिए आवश्यक बिट्स की न्यूनतम संख्या ।( एन 2)NE(N2E)log2(N2E)

हम सामान्यता की हानि के बिना मान लेंगे कि , कि आधे या उससे कम किनारों मौजूद हैं। यदि यह मामला नहीं है, तो हम इसके बजाय "गैर-किनारों" के सेट को स्टोर कर सकते हैं।EN22

यदि , , तो मैट्रिक्स का प्रतिनिधित्व विषमतम इष्टतम है। यदि , स्टर्लिंग के सन्निकटन और थोड़े अंकगणित का उपयोग करते हुए, हम पाते हैं:E=N22log2(N2E)=N2+o(N2)EN2

log2(N2E)
=2लॉग2एन+(कम आदेश शर्तें)
=log2(N2)!E!(N2E)!
=2Elog2N+O(low order terms)

यदि आप समझते हैं कि एक पूर्णांक का आकार है जो नोड इंडेक्स का प्रतिनिधित्व कर सकता है, तो इष्टतम प्रतिनिधित्व नोड आईडी का एक सरणी है , अर्थात नोड इंडेक्स के जोड़े का एक सरणी।2 log2N2E

कहा जाता है कि, स्पार्सिटी का एक अच्छा उपाय एन्ट्रॉपी है, जो कि इष्टतम प्रतिनिधित्व के प्रति बिट्स की संख्या भी है। यदि संभावना है कि एक किनारे मौजूद है, तो एन्ट्रापी है । के लिए , एन्ट्रापी 2 (यानी दो इष्टतम प्रतिनिधित्व में बढ़त प्रति बिट्स) है, और ग्राफ घना है। यदि एन्ट्रापी 2 से अधिक महत्वपूर्ण है, और विशेष रूप से अगर यह एक पॉइंटर के आकार के करीब है, तो ग्राफ विरल है। -लॉग2पी(1-पी)पी1p=EN2log2p(1p)p12

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.