क्या एक ग्राफ का व्युत्पन्न आसन्न सूचियों से संबंधित है?


14

कॉनर मैक्ब्राइड के कुछ काम, डिफ , डिसेक्ट , डेटा प्रकार के व्युत्पन्न से संबंधित है उनके "एक प्रकार के छेद वाले संदर्भ"। यही है, यदि आप उस प्रकार के व्युत्पन्न को लेते हैं जिसे आप डेटा प्रकार के साथ छोड़ देते हैं जो आपको दिखाता है कि किसी भी बिंदु पर डेटा प्रकार अंदर से कैसा दिखता है।

उदाहरण के लिए, यदि आपके पास एक सूची है (हास्केल में)

data List a = [] | a : List a

इस से मेल खाती है

data List a = 1 + a * List a

और थोड़ा गणितीय जादू के माध्यम से, व्युत्पन्न है

data ListDeriv a = List a * List a

जिसका अर्थ है कि सूची के किसी भी बिंदु पर बाईं ओर एक सूची और दाईं ओर एक सूची होगी। हम व्युत्पन्न डेटा संरचना का उपयोग करके मूल सूची के माध्यम से ज़िप कर सकते हैं।

अब, मैं रेखांकन के साथ कुछ ऐसा ही करने में दिलचस्पी रखता हूं। रेखांकन का एक सामान्य प्रतिनिधित्व कोने और किनारों का एक समूह है, जो संभवतः डेटा प्रकार के साथ लागू किया जा सकता है जैसे:

data Gr a b i = Gr [(i,a)] [(i,i,b)]

यदि मैं इसे सही ढंग से समझता हूं, तो ग्राफ सूचकांक के संबंध में इस डेटा प्रकार का एक व्युत्पन्न i, कुछ ऐसा होना चाहिए।

data GrDeriv a b i = d/di (Gr a b i)
     = d\di ( [a*i] * [b*i^2] )
     = (d\di [a*i]) * [b*i^2] ) + [a*i]*(d/di [b*i^2])
     = (a* [a*i] * [a*i]) * [b*i^2] ) 
       + [a*i] * (2*b*i) *[b*i^2]*[b*i^2])
     = InNodes { nodesLeft :: [(a,i)]
               , nodeLbl :: a
               , nodesRight :: [(a,i)]
               , edges :: [(b,i,i)] }
     | InEdges { nodes :: [(a,i)]
               , adjNode :: Either (b,i) (b,i)
               , edgesLeft :: [(b,i,i)]
               , edgesRight :: [(b,i,i)] }

मुझे यह व्युत्पत्ति के लिए उत्पाद नियम और श्रृंखला नियमों के उपयोग के माध्यम से मिला, और हालांकि संभवतः कुछ त्रुटियां हैं, यह सामान्य योजना का पालन करने के लिए लगता है। इस संरचना में आपको या तो नोड्स (InNodes कंस्ट्रक्टर) या किनारों (किनारों में) पर ध्यान केंद्रित किया जाएगा और आपको वह स्थान दिया जाएगा जहां आपको संबंधित डेटा दिखाई देगा।

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

Node a b = ([(i,b)],a,[(i,b)])

मुझे आशा है कि हालांकि, आसन्न प्रतिनिधित्व के रूप में व्युत्पन्न के साथ कुछ शब्द हैं, अकेला aछेद, प्रत्येक छेद स्थान पर, प्रत्येक किनारे के आसन्न प्रतिनिधित्व / विच्छेदन।

चूंकि व्युत्पन्न मूल के समान कार्य नहीं है, लेकिन व्युत्पन्न का एकीकरण (किफ़ायत) है, क्या किसी प्रकार का एकीकरण एनालॉग है जो व्युत्पन्न को नोड संदर्भों के संग्रह में बदलने का काम करेगा? मूल संरचना को पुनर्प्राप्त करने के लिए प्रत्यक्ष एकीकरण नहीं है, आप पर ध्यान दें, लेकिन मूल के बराबर संरचना लेकिन एक अधिक एल्गोरिदम के अनुकूल प्रतिनिधित्व में।

अगर वहाँ है, मुझे आशा है कि संबंध प्रकार की संरचना कुछ आसान "कोने और किनारों के सेट" भाषा द्वारा निर्दिष्ट की जा सकती है और मैं उस संरचना के साथ काम करने के लिए एक कुशल पुस्तकालय प्राप्त कर सकता हूं। इस तरह के एक अनुकरण का उपयोग "ग्राफ सिद्धांत से परे" संरचनाओं का अध्ययन करने के लिए किया जा सकता है: हाइपर ग्राफ, सरल परिसर ...

इसलिए। क्या यह विचार संभव है? उपयोगी? क्या इस प्रकार का कोई अध्ययन किया गया है जिसके बारे में मैं और अधिक पढ़ सकता हूं?

परिशिष्ट

G=(V,E)

G=(V,E)IVE

G=I(VIE)

यह, मुझे पूरा यकीन है कि (श्रेणी सिद्धांत?) व्यक्त किया जा सकता है

(1)G=(VEI)I

या

G=VIEII

(1)

G=ln(VEI)(VEI)I(ln(E)VEI)

मैं एक के लिए लगता है कि यह कुछ वादा दिखाता है, लेकिन मुझे आगे जाने के लिए परिष्कार की कमी है। मुझे पता है कि वहाँ कुछ काम करना होगा वहाँ कनेक्शन आगे की खोज।

* यदि लिंक कभी टूटता है, तो प्रशस्ति पत्र: राई, इनजोंग, एट अल। "DRAND: वायरलेस एड हॉक नेटवर्क के लिए रैंडमाइज्ड TDMA शेड्यूल किया गया।" मोबाइल कंप्यूटिंग पर IEEE लेनदेन 8.10 (2009): 1384-1396।


अनुसंधान के लिए आपके द्वारा प्रदान किया गया लिंक मृत है। क्या आप एक अधिक स्थायी लिंक दे सकते हैं, जैसे कि DOI या वह पत्रिका जिसमें यह प्रकाशित किया गया था?
कर्टिस F

जवाबों:


5

आपका प्रकार Grवास्तव में रेखांकन के अनुरूप नहीं है, क्योंकि इसमें कई उदाहरण शामिल हैं जो स्पष्ट रूप से रेखांकन नहीं हैं, क्योंकि बढ़त सूचकांकों को वास्तविक शीर्ष सूचकांक नहीं होना चाहिए।

उदाहरण के लिए,

V={A,B}E={(C,D,e)}

एक ग्राफ नहीं है, लेकिन आपके प्रकार में इसकी अनुमति है

Gr [(1, A), (2, B)] [(3, 4, e)]

बल्कि, आपका Grशाब्दिक रूप से लेबल किए गए अनुक्रमित की सूची और एक अलग, असंबंधित, सूचकांकों के लेबल जोड़े की सूची से मेल खाती है। यही कारण है कि आपको ऐसा "शाब्दिक" व्युत्पन्न मिलता है Grजो ग्राफ़ में "छेद" के अनुरूप नहीं है।

वहाँ भी कोने (किनारों nodesLeft/Rightऔर दिशाओं में दिखाई edgesLeft/Right) के क्रम के बारे में देखभाल करने की दुर्भाग्यपूर्ण समस्या है, लेकिन यह Setएक सूची के बजाय का उपयोग करके तय किया जा सकता है ।


यहाँ एक प्रकार हैस्केल में व्यक्त किया गया है जो मुझे लगता है कि अधिक (नॉन-खाली) ग्राफ़ से बहुत निकटता से मेल खाता है:

data Graph v e = Lone v | Joined v (Graph (v, ([e], [e])) e)

सरलता के लिए, मैं इसके बजाय पूर्ण, सरल, अप्रत्यक्ष रेखांकन पर विचार करूंगा:

data Graph v e = Lone v | Joined v (Graph (v, e) e)

(पूर्ण-नेस को आराम करने के लिए, e = Boolकिनारे की उपस्थिति को चिह्नित करें)

ध्यान दें कि Graphपुनरावर्ती है (और वास्तव में, पैरासेरिकल रूप से पुनरावर्ती)। यह वही है जो हमें खुद को केवल रेखांकन के प्रकार तक सीमित रखने की अनुमति देता है न कि केवल आसन्न सूचियों को शीर्ष सूचियों के साथ।

अधिक बीजगणित में लिखा है,

G(v,e)=v+vG(ve,e)

evG

G(v)=v+vG(ve)

बार-बार विस्तार करके, हम निश्चित बिंदु प्राप्त करते हैं

G(v)=v1e(12)+v2e(22)+v3e(32)+v4e(42)+

यह समझ में आता है, क्योंकि एक (पूर्ण) ग्राफ या तो है

  • एक कोने और कोई किनारा नहीं
  • दो कोने और एक किनारे
  • तीन कोने और तीन किनारे
  • चार कोने और चार 2 = 6 किनारों को चुनते हैं
  • ....

आकार के प्रकार के कॉल को आरेखित करता । फिरkGk(v)=vke(k2)G(v)=G1(v)+G2(v)+

जिसका व्युत्पन्न है

ddvG(v)=i=1Gi(v)

व्युत्पन्न

Gk(v)=ddv[vkek(k1)2]=kvk1ek(k1)2

ध्यान दें कि , ताकिGk1(v)=vk1e(k1)(k2)2Gk(v)=Gk1(v)kek1

यही है, -node ग्राफ का व्युत्पन्न नोड ग्राफ है, जिसे हटाए गए नोड से किनारों के साथ शेष नोड्स तक जोड़ा जाता है , और अनुक्रमणिका जो नोड नोड की सूची में व्याप्त है कोने।kk1k1k1k

data SimpleGraph v e = Lone v | Joined v (SimpleGraph (v, e) e)

data SimpleGraphHole v e = Empty
                         | InsertLater v (SimpleGraphHole (v, e) e)
                         | InsertHere (SimpleGraph (v, e) e)

इस ग्राफ में फिक्सिंग ऑर्डर

ग्राफ़ डेटा संरचना का यह संस्करण मूल रूप से एक लिंक्ड-लिस्ट है, और इसलिए यह वर्टीकल के क्रम को कूटबद्ध करता है। जबकि यह एक सेट का उपयोग करके अपने आसन्न-सूची संस्करण में तय किया जा सकता है, यह यहाँ इतना सीधा नहीं है।

मुझे लगता है कि आप एक पेड़ डेटा-संरचना को उसी तरह के पैरामीट्रिक पुनरावृत्ति को संशोधित कर सकते हैं, जो "सिर" में भूमिका निभाता है SimpleGraph। परिणामस्वरूप ट्री-सेट के इंटरफ़ेस से, ऑर्डर / अंतर्निहित संरचना अदृश्य हो जाती है (या यहां तक ​​कि कैनोनिकल, यदि आप तेजी से अपडेट में रुचि नहीं रखते हैं)।

आपका प्रस्तावित व्युत्पन्न

आपने एक व्युत्पन्न प्रकार प्रस्तावित किया; मैंने इसे लेबल और सूचकांक को बदलने के लिए बदल दिया है जैसा कि मैंने किया था:([(v,e)], [(v,e)])

इसे रूप में एकीकृत किया जा सकता है, जो , या बस है । इसके पास संपूर्ण ग्राफ़ को फिर से बनाने के लिए पर्याप्त जानकारी नहीं है , क्योंकि "एज" जानकारी केवल एक शीर्ष को पहचानती है।1(1ve)2C+v1ve(v, [(v, e)])

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