मेमोरी उपयोग के बारे में keyser5053 के उत्तर को जोड़ने के लिए।
किसी भी निर्देशित ग्राफ के लिए, एक आसन्न मैट्रिक्स (प्रति छोर पर 1 बिट) n^2 * (1)
मेमोरी के बिट्स का उपभोग करता है ।
एक पूर्ण ग्राफ़ के लिए , एक आसन्न सूची (64 बिट पॉइंटर्स के साथ) n * (n * 64)
सूची ओवरहेड को छोड़कर, मेमोरी के बिट्स का उपभोग करती है ।
अधूरे ग्राफ के लिए, एक आसन्न सूची 0
मेमोरी के बिट्स की खपत करती है , सूची ओवरहेड को छोड़कर।
एक आसन्न सूची के लिए, आप e
एक मेमोरी के लिए एक आसन्न मैट्रिक्स इष्टतम होने से पहले किनारों की अधिकतम संख्या ( ) निर्धारित करने के लिए अनुसरण सूत्र का उपयोग कर सकते हैं ।
edges = n^2 / s
किनारों की अधिकतम संख्या निर्धारित करने के लिए, s
प्लेटफ़ॉर्म का सूचक आकार कहां है।
यदि आप ग्राफ़ को गतिशील रूप से अपडेट कर रहे हैं, तो आप इस दक्षता को औसत बढ़त गणना (प्रति नोड) के साथ बनाए रख सकते हैं n / s
।
64 बिट पॉइंटर्स और डायनेमिक ग्राफ के साथ कुछ उदाहरण (एक डायनामिक ग्राफ बदलाव के बाद किसी समस्या के समाधान को कुशलता से अपडेट करता है, बजाय बदलाव के हर बार इसे स्क्रैच से फिर से जोड़ने के बजाय।)
एक निर्देशित ग्राफ के लिए, जहां n
300 है, आसन्न सूची का उपयोग करके नोड के प्रति किनारों की इष्टतम संख्या है:
= 300 / 64
= 4
यदि हम इसे keyser5053 के सूत्र में प्लग करते हैं, d = e / n^2
(जहां e
कुल बढ़त संख्या है), तो हम देख सकते हैं कि हम ब्रेक के नीचे हैं [] 1 / s
:
d = (4 * 300) / (300 * 300)
d < 1/64
aka 0.0133 < 0.0156
हालांकि, एक पॉइंटर के लिए 64 बिट्स ओवरकिल हो सकते हैं। यदि आप इसके बजाय 16 बिट पूर्णांक को सूचक ऑफ़सेट के रूप में उपयोग करते हैं, तो हम ब्रेकिंग पॉइंट से पहले 18 किनारों तक फिट हो सकते हैं।
= 300 / 16
= 18
d = ((18 * 300) / (300^2))
d < 1/16
aka 0.06 < 0.0625
इन उदाहरणों में से प्रत्येक आसन्न सूची के ओवरहेड को स्वयं ( 64*2
एक वेक्टर और 64 बिट पॉइंटर्स के लिए) को अनदेखा करता है ।