อนุพันธ์ของกราฟเกี่ยวข้องกับรายการคำนามหรือไม่?


14

ผลงานบางส่วนของ Conor McBride, Diff , Dissect , เชื่อมโยงอนุพันธ์ของชนิดข้อมูลกับ "ชนิดของบริบทหนึ่งหลุม" ของพวกเขา นั่นคือถ้าคุณหาอนุพันธ์ของประเภทที่คุณเหลือด้วยชนิดข้อมูลซึ่งจะแสดงให้คุณเห็นว่าชนิดข้อมูลดูจากด้านใน ณ จุดใดก็ตาม

ตัวอย่างเช่นถ้าคุณมีรายการ (ใน Haskell)

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) หรือขอบ (ในขอบ) และให้สถานที่ที่คุณจะเห็นข้อมูลที่เกี่ยวข้อง

แต่นี่ไม่ใช่สิ่งที่ฉันหวังไว้ ฉันหวังว่าจะสร้างสิ่งที่เกี่ยวข้องกับอินเทอร์เฟซของ Martin Erwigs Functional Graph Library มากขึ้น โดยเฉพาะฉันต้องการเห็นโหนดที่บริบทแสดงถึงเลเบลของโหนดและสองรายการ adjacency หนึ่งรายการสำหรับขาออกหนึ่งรายการสำหรับขาเข้า

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

ฉันเห็นความหวังอย่างไรก็ตามเนื่องจากการเป็นตัวแทนของ adjacency มีบางคำที่เหมือนกันกับอนุพันธ์ lone lable 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)

ฉันคิดว่ามันแสดงให้เห็นถึงคำสัญญาบางอย่าง แต่ฉันขาดความซับซ้อนที่จะไปไกลกว่านี้ ฉันรู้ว่าต้องมีผลงานออกมาสำรวจการเชื่อมต่อต่อไป

* ในกรณีที่ลิงค์แตกการอ้างอิง: Rhee, Injong และอื่น ๆ "DRAND: กระจายการกำหนดเวลา TDMA แบบสุ่มสำหรับเครือข่ายเฉพาะกิจไร้สาย" ธุรกรรม IEEE บนคอมพิวเตอร์มือถือ 8.10 (2009): 1384-1396


ลิงค์ที่คุณให้ไว้สำหรับการวิจัยนั้นตายแล้ว คุณสามารถให้ลิงค์ถาวรเช่น DOI หรือวารสารที่ตีพิมพ์ในได้หรือไม่?
Curtis 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แทนรายการ


นี่คือประเภทที่แสดงใน Haskell ที่ฉันคิดว่าใกล้เคียงกับกราฟ (ไม่ว่าง):

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เป็นแบบเรียกซ้ำ (และอันที่จริงเรียกซ้ำแบบพารามิเตอร์) นี่คือสิ่งที่ช่วยให้เราสามารถ จำกัด ประเภทของเราเพียงกราฟและไม่ใช่แค่รายการ adjacency รวมกับรายการจุดสุดยอด

เขียนเพิ่มเติมเกี่ยวกับพีชคณิต

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 ขอบ
  • ....

เรียกประเภทของขนาดกราฟ2} จากนั้น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)

แก้ไขคำสั่งซื้อในกราฟนี้

โครงสร้างข้อมูลกราฟรุ่นนี้เป็นรายการพื้นฐานที่เชื่อมโยงและดังนั้นจึงเข้ารหัสลำดับของจุดยอด ในขณะที่สามารถแก้ไขได้ในรายการ adjacency-list ของคุณโดยการใช้ Set มันไม่ได้ตรงที่นี่

ฉันคิดว่าคุณสามารถปรับเปลี่ยนต้นไม้ข้อมูลโครงสร้างที่จะทำแบบเดียวกับการเรียกซ้ำพารากับรากเล่นบทบาทที่ "หัว" SimpleGraphไม่อยู่ใน โดยอินเทอร์เฟซของชุดผลลัพธ์ที่เป็นต้นไม้โครงสร้างลำดับ / ต้นแบบจะมองไม่เห็น (หรือแม้แต่เป็นที่ยอมรับหากคุณไม่สนใจในการอัปเดตที่รวดเร็ว)

อนุพันธ์ที่คุณเสนอ

คุณเสนอประเภทตราสารอนุพันธ์; ฉันจะเปลี่ยนมันเพื่อทำให้ป้ายกำกับและดัชนีของฉันยุบตามที่ฉันได้:([(v,e)], [(v,e)])

นี้สามารถรวมเป็นซึ่งเป็น หรือเพียงแค่ ข้อมูลนี้มีข้อมูลไม่เพียงพอที่จะสร้างกราฟใหม่ทั้งหมดเนื่องจากข้อมูล "edge" ระบุเฉพาะจุดยอดเดียวเท่านั้น1(1ve)2C+v1ve(v, [(v, e)])

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.