मुझे बताया गया था कि यदि ग्राफ विरल है और मैट्रिक्स घना है तो हम एक सूची का उपयोग करेंगे । मेरे लिए, यह सिर्फ एक कच्ची परिभाषा है। मैं इससे आगे नहीं देखता। क्या आप यह स्पष्ट कर सकते हैं कि इसे बनाना कब स्वाभाविक होगा?
अग्रिम में धन्यवाद!
मुझे बताया गया था कि यदि ग्राफ विरल है और मैट्रिक्स घना है तो हम एक सूची का उपयोग करेंगे । मेरे लिए, यह सिर्फ एक कच्ची परिभाषा है। मैं इससे आगे नहीं देखता। क्या आप यह स्पष्ट कर सकते हैं कि इसे बनाना कब स्वाभाविक होगा?
अग्रिम में धन्यवाद!
जवाबों:
सबसे पहले ध्यान दें कि विरल का मतलब है कि आपके पास बहुत कम किनारे हैं, और घने का अर्थ है कई किनारों, या लगभग पूरा ग्राफ। एक पूर्ण ग्राफ में आपके पास किनारे हैं, जहां नोड्स की संख्या है।n
अब, जब हम मैट्रिक्स प्रतिनिधित्व का उपयोग करते हैं, तो हम नोड-कनेक्टिविटी जानकारी को स्टोर करने के लिए मैट्रिक्स आवंटित करते हैं, उदाहरण के लिए, यदि नोड्स और बीच बढ़त है , अन्यथा ।
लेकिन अगर हम आसन्न सूची का उपयोग करते हैं तो हमारे पास नोड्स की एक सरणी होती है और प्रत्येक नोड इसके आसन्न सूची में होती है जिसमें केवल इसके पड़ोसी नोड होते हैं ।M [ i ] [ j ] = 1 i j M [ i ] [ j ] = ०
अब यदि कोई ग्राफ विरल है और हम मैट्रिक्स निरूपण का उपयोग करते हैं तो अधिकांश मैट्रिक्स कोशिकाएं अप्रयुक्त रह जाती हैं जिससे स्मृति का अपव्यय होता है। इस प्रकार हम आम तौर पर विरल रेखांकन के लिए मैट्रिक्स प्रतिनिधित्व का उपयोग नहीं करते हैं। हम आसन्न सूची पसंद करते हैं।
लेकिन यदि ग्राफ़ सघन है तो किनारों की संख्या (पूर्ण) , या करीब है यदि ग्राफ़ स्वयं-लूप से निर्देशित है। फिर मैट्रिक्स पर आसन्न सूची का उपयोग करने का कोई फायदा नहीं है।n 2
अंतरिक्ष जटिलता के संदर्भ में
निकटता मैट्रिक्स:
आसन्न सूची:
जहां संख्या नोड है, किनारों की संख्या है।O ( n + m ) n m
जब ग्राफ अनिर्दिष्ट पेड़ तो है
संलग्नता मैट्रिक्स:
संलग्नता सूची: है (बेहतर )O ( n + n ) O ( n ) n 2
जब ग्राफ निर्देश दिया जाता है, पूर्ण, के साथ आत्म लूप तो
संलग्नता मैट्रिक्स:
संलग्नता सूची: है (कोई फर्क नहीं)O ( n + n 2 ) O ( n 2 )
और अंत में, जब आप मैट्रिक्स का उपयोग करते हुए कार्यान्वित करते हैं, तो यह जांचते हुए कि यदि दो नोड्स के बीच एक किनारा है तो बार लगता है, जबकि आसन्न सूची के साथ, यह में रैखिक समय ले सकता है ।एन
एक सरल सादृश्य प्रदान करके उत्तर देने के लिए .. अगर आपको 6oz पानी स्टोर करना होता, तो क्या आप (आमतौर पर बोलते हुए) 5 गैलन कंटेनर, या 8oz कप के साथ ऐसा करते?
अब, अपने प्रश्न पर वापस आ रहे हैं .. यदि आपके मैट्रिक्स का अधिकांश हिस्सा खाली है, तो इसका उपयोग क्यों करें? इसके बजाय प्रत्येक मान को सूचीबद्ध करें। हालांकि, अगर आपकी सूची वास्तव में लंबी है, तो इसे संघनित करने के लिए सिर्फ एक मैट्रिक्स का उपयोग क्यों न करें?
सूची बनाम मैट्रिक्स के पीछे तर्क वास्तव में इस मामले में सरल है।
पुनश्च एक सूची वास्तव में सिर्फ एक एकल स्तंभ मैट्रिक्स है !!! (आपको यह दिखाने की कोशिश की जा रही है कि यह निर्णय / परिदृश्य कैसा है)
नोड्स और किनारों के साथ एक ग्राफ पर विचार करें । कम-क्रम की शर्तों को अनदेखा करते हुए, ग्राफ़ के लिए एक बिट मैट्रिक्स बिट का उपयोग करता है, इससे कोई फर्क नहीं पड़ता कि कितने किनारे हैं।ई एन २
हालांकि आपको वास्तव में कितने बिट्स की आवश्यकता है?
यह मानते हुए कि किनारे स्वतंत्र हैं, नोड और किनारों के साथ रेखांकन की संख्या । इस सबसेट को संग्रहीत करने के लिए आवश्यक बिट्स की न्यूनतम संख्या ।ई ( एन 2)
हम सामान्यता की हानि के बिना मान लेंगे कि , कि आधे या उससे कम किनारों मौजूद हैं। यदि यह मामला नहीं है, तो हम इसके बजाय "गैर-किनारों" के सेट को स्टोर कर सकते हैं।
यदि , , तो मैट्रिक्स का प्रतिनिधित्व विषमतम इष्टतम है। यदि , स्टर्लिंग के सन्निकटन और थोड़े अंकगणित का उपयोग करते हुए, हम पाते हैं:
यदि आप समझते हैं कि एक पूर्णांक का आकार है जो नोड इंडेक्स का प्रतिनिधित्व कर सकता है, तो इष्टतम प्रतिनिधित्व नोड आईडी का एक सरणी है , अर्थात नोड इंडेक्स के जोड़े का एक सरणी।2 ई
कहा जाता है कि, स्पार्सिटी का एक अच्छा उपाय एन्ट्रॉपी है, जो कि इष्टतम प्रतिनिधित्व के प्रति बिट्स की संख्या भी है। यदि संभावना है कि एक किनारे मौजूद है, तो एन्ट्रापी है । के लिए , एन्ट्रापी 2 (यानी दो इष्टतम प्रतिनिधित्व में बढ़त प्रति बिट्स) है, और ग्राफ घना है। यदि एन्ट्रापी 2 से अधिक महत्वपूर्ण है, और विशेष रूप से अगर यह एक पॉइंटर के आकार के करीब है, तो ग्राफ विरल है। -लॉग2पी(1-पी)पी≈1