इस पर कुछ टिप्पणी कि मैं मूर्खतापूर्ण लिखना ...
विशेष रूप से, M = E - N + 2P के विकिपीडिया समीकरण के लिए
वह समीकरण बहुत गलत है ।
किसी कारण से, मैककेबे वास्तव में इसका उपयोग अपने मूल पेपर ("ए कॉम्प्लेक्सिटी माप", आईईई लेनदेन पर सॉफ्टवेयर इंजीनियरिंग, वीओ .. एसई -2, नंबर 4, दिसंबर 1976) में करता है, लेकिन इसे औचित्य दिए बिना और वास्तव में सही का हवाला देते हुए। पहले पृष्ठ पर सूत्र , जो है
v (जी) = ई - वी + पी
(यहां, सूत्र तत्वों को स्थानांतरित कर दिया गया है)
विशेष रूप से, मैककेब ने सी.बर्गर, ग्राफ़ और हाइपरग्राफ (जी एंड एचजी के नीचे संक्षिप्त रूप में) पुस्तक का संदर्भ दिया है । सीधे उस पुस्तक से :
परिभाषा (पृष्ठ 27 जी और एचजी के नीचे):
एक (अप्रत्यक्ष) ग्राफ जी (जिसमें कई डिस्कनेक्ट किए गए घटक हो सकते हैं) के साइक्लोमैटिक नंबर v (G) को परिभाषित किया गया है:
v (जी) = ई - वी + पी
जहाँ e = किनारों की संख्या, v = संख्याओं की संख्या, p = जुड़े घटकों की संख्या
प्रमेय (पृष्ठ 29 जी एंड एचजी के ऊपर) (मैककेबे द्वारा उपयोग नहीं किया गया):
एक ग्राफ G का चक्रवाती संख्या v (G) स्वतंत्र चक्रों की अधिकतम संख्या के बराबर है
एक चक्र एक ही शीर्ष पर शुरू और समाप्त होने वाले सिरों का एक क्रम है, जिसमें ग्राफ़ में एक दूसरे से सटे अनुक्रम में लगातार दो कोने होते हैं।
सहज रूप से, चक्रों का एक सेट स्वतंत्र है यदि चक्रों को सुपरइम्पोज़ करके दूसरों में से कोई भी चक्र का निर्माण नहीं किया जा सकता है।
प्रमेय (पृष्ठ 29 जी एंड एचजी के बीच) (जैसा कि मैककेबे द्वारा उपयोग किया जाता है):
एक दृढ़ता से जुड़े ग्राफ जी में, चक्रवाती संख्या रैखिक रूप से स्वतंत्र सर्किट की अधिकतम संख्या के बराबर है।
एक सर्किट एक चक्र है जिसमें बिना कोने और किनारों की पुनरावृत्ति की अनुमति है।
एक निर्देशित ग्राफ को दृढ़ता से जुड़ा हुआ कहा जाता है यदि प्रत्येक वर्टेक्स उनके निर्दिष्ट दिशा में किनारों से गुजरते हुए हर दूसरे शीर्ष से पहुंचता है।
ध्यान दें कि यहां हम अप्रत्यक्ष रेखांकन से दृढ़ता से जुड़े ग्राफ़ से गुज़रे हैं (जो निर्देशित हैं ... बर्ज यह पूरी तरह से स्पष्ट नहीं करता है)
मैककेबे अब उपरोक्त प्रमेय को एक "मैककेबे साइक्लोमैटिक कॉम्प्लेक्सिटी नंबर" (सीसीएन) की गणना करने के लिए एक सरल तरीका प्राप्त करने के लिए लागू करता है:
एक प्रक्रिया के "जंप टोपोलॉजी" (निर्देश प्रवाह ग्राफ) का प्रतिनिधित्व करने वाले एक निर्देशित ग्राफ को देखते हुए, एक निर्दिष्ट प्रविष्टि के साथ एक यूनिक एंट्री पॉइंट का प्रतिनिधित्व किया जाता है और एक यूनीवर्सल एग्जिट पॉइंट ( एग्जिट पॉइंट वर्टेक्स) का प्रतिनिधित्व करने के लिए एक निर्दिष्ट वर्कट "निर्माण" करने की आवश्यकता होती है। इसे कई रिटर्न के मामले में जोड़कर), एक्ज़िट पॉइंट वर्टेक्स से एंट्री पॉइंट वर्टेक्स तक निर्देशित किनारे को जोड़कर एक जोरदार कनेक्टेड ग्राफ बनाएँ, जिससे एंट्री पॉइंट वर्टेक्स किसी अन्य वर्टेक्स से पहुंच योग्य हो जाता है।
मैककेबे अब पॉज़िट करता है (बल्कि भ्रामक रूप से मैं कह सकता हूं) कि संशोधित अनुदेश प्रवाह ग्राफ का चक्रवाती नंबर "पथों की न्यूनतम संख्या" की हमारी सहज धारणा के अनुरूप है, और इसलिए हम उस संख्या को जटिलता माप के रूप में उपयोग करेंगे।
शांत, इतना:
संशोधित अनुदेश प्रवाह ग्राफ के चक्रवाती जटिलता संख्या को अप्रत्यक्ष ग्राफ में "सबसे छोटे" सर्किट की गिनती के द्वारा निर्धारित किया जा सकता है। यह विशेष रूप से आदमी या मशीन द्वारा करना मुश्किल नहीं है, लेकिन उपरोक्त प्रमेय को लागू करने से हमें इसे निर्धारित करने का एक आसान तरीका मिल जाता है:
v (जी) = ई - वी + पी
यदि कोई किनारों की दिशा की उपेक्षा करता है।
सभी मामलों में, हम सिर्फ एक ही प्रक्रिया पर विचार करते हैं, इसलिए पूरे ग्राफ में केवल एक जुड़ा हुआ घटक है, और इसलिए:
v (जी) = ई - वी + १।
यदि कोई अतिरिक्त "एक्जिट-टू-एंट्री" एज के बिना मूल ग्राफ पर विचार करता है, तो एक को बस प्राप्त होता है:
= (जी) = ẽ - v + 2
as as = e - 1
आइए अपने पेपर से मैककेबे के उदाहरण का उपयोग करके स्पष्ट करें:
हमारे पास है:
- ई = १०
- v = 6
- पी = 1 (एक घटक)
- v (G) = 5 (हम स्पष्ट रूप से 5 चक्र गिन रहे हैं)
चक्रवाती संख्या का सूत्र कहता है:
v (जी) = ई - वी + पी
जो पैदावार 5 = 10 - 6 + 1 और इतना सही है!
"मैककेब साइक्लोमैटिक जटिलता संख्या" जैसा कि उनके पेपर में दिया गया है
5 = 9 - 6 + 2 (कागज में आगे कोई स्पष्टीकरण नहीं दिया गया है कि कैसे)
जो सही होता है (यह v (G) देता है) लेकिन गलत कारणों से, जिसका हम उपयोग करते हैं:
= (जी) = ẽ - v + 2
और इस प्रकार G (G) = v (G) ... phew!
लेकिन क्या यह उपाय कोई अच्छा है?
दो शब्दों में: बहुत नहीं
- यह पूरी तरह से स्पष्ट नहीं है कि किसी प्रक्रिया के "निर्देश प्रवाह ग्राफ" को कैसे स्थापित किया जाए, खासकर अगर अपवाद हैंडलिंग और पुनरावृत्ति तस्वीर में प्रवेश करते हैं। ध्यान दें कि मैककेबे ने फोरट्रान 66 में लिखा कोड , बिना किसी पुनरावृत्ति वाली भाषा, बिना किसी अपवाद और सीधी निष्पादन संरचना के अपने विचार को लागू किया ।
- तथ्य यह है कि एक निर्णय के साथ एक प्रक्रिया और एक लूप के साथ एक प्रक्रिया समान CCN उपज देती है एक अच्छा संकेत नहीं है।