การแปลงกราฟไปเป็นกราฟที่ไม่ได้บอกทิศทางด้วยวิธีย้อนกลับได้


10

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

มีใครรู้วิธีการทำเช่นนี้หรือสามารถแนะนำการอ้างอิงใด ๆ ขอบคุณล่วงหน้า.


อัปเดต: เกี่ยวกับคำตอบของ AdrianN ด้านล่าง อาจเป็นจุดเริ่มต้นที่ดี แต่ฉันไม่คิดว่ามันจะทำงานในรูปแบบปัจจุบัน นี่คือภาพว่าทำไมฉันจึงคิดว่าไม่: ป้อนคำอธิบายรูปภาพที่นี่


อัปเดตหลังจากความคิดเห็นของ DW: ฉันถือว่าจุดยอดของกราฟเป็นแบบไม่มีป้ายกำกับ หากวิธีการแก้ปัญหาเกี่ยวข้องกับการติดฉลากจุดยอด (เช่นเดียวกับที่ AdrianN ทำ) ก็ควรให้กราฟที่ไม่มีการเปลี่ยนทิศทางแบบเดียวกัน คำจำกัดความของ "isomorphic" สำหรับกราฟที่มีเครื่องหมายจุดยอดคือมีการเรียงสับเปลี่ยนของการติดฉลากที่เกี่ยวข้องกับกราฟทั้งสอง แต่ฉันไม่แน่ใจเกี่ยวกับคำจำกัดความที่แน่นอนสำหรับกราฟที่ไม่มีป้ายกำกับ ...


1
ฉันคิดว่าคำถามนี้กว้างเกินไป คุณมีข้อ จำกัด อะไรบ้าง?
adrianN

ตอนนี้ฉันไม่สามารถนึกข้อ จำกัด ใด ๆ ได้ ฉันเดาวิธีใด ๆ ในการเข้ารหัสข้อมูลของกราฟที่นำไปสู่ทิศทางที่ไม่ได้ทำโดยตรงตราบใดที่มันสามารถย้อนกลับได้ ฉันเดาว่าสิ่งที่ฉันมีอยู่ในใจคือกราฟที่ไม่ได้บอกทิศทางแบบง่ายที่สุดดังนั้นฉันจึงกำลังมองหาวิธีแก้ปัญหาที่ไม่ใช้สีสำหรับจุดยอดหรือขอบ
Heterotic

ฉันคิดว่าคุณควรระบุคำถามที่คุณหมายถึงโดย "กราฟเดียวกัน" คุณหมายถึงว่าจุดยอดถูกติดป้ายหรือจุดยอดนั้นไม่มีป้ายกำกับ? คุณหมายถึงว่า(V,E)จะเหมือนกันสำหรับทั้งสองหรือว่ากราฟสองกราฟเป็นแบบมอร์ฟิค? ดูเหมือนคุณหมายถึงหลัง คุณแน่ใจหรือว่าเป็นข้อกำหนดในใบสมัครของคุณ? หากคุณได้รับอนุญาตให้เก็บป้ายกำกับปัญหาจะง่ายขึ้นและคำตอบของ AdrianN ก็ใช้ได้ (เพราะขอบ(3,4) ไม่เหมือนกับขอบ (1',2'))
DW

2
โปรดรวมการอัปเดตของคุณไว้ในคำถาม ณ เวลาใดก็ตามโพสต์ SE ควรอ่านจากบนลงล่างโดยไม่ต้องสงสัยเกี่ยวกับประวัติ ที่เก็บถาวรแยกต่างหาก
Raphael

คำตอบ:


6

สำหรับแต่ละขอบชี้นำ e=(x,y)เพิ่มจุดยอดใหม่ v1e,,v5e และแทนที่ e ด้วยขอบ xv1e, v1ev2e, v1ev3e, v3ev4e, v4ev5e, v3ey.

ในการถอดรหัสใบไม้ทุกใบ (จุดยอด -1 องศา) ซึ่งเพื่อนบ้านต้องมีระดับ 2 ต้องเป็น v5e สำหรับขอบบาง e=(x,y); เพื่อนบ้านของมันคือ v4e และเพื่อนบ้านของ v4e คือ v3e. v3e มีเพื่อนบ้านที่เป็นเอกลักษณ์ที่มีทั้งระดับ 3 และอยู่ติดกับใบไม้: เพื่อนบ้านคือ v1e และใบไม้ของมันคือ v2e (ถ้า v1อี มีสองใบไม้เพื่อนบ้านเลือกหนึ่งโดยพลการที่จะ v2อี) เพื่อนบ้านของโวลต์1อี คือ x และเพื่อนบ้านของ โวลต์3อี คือ Y. เรียกคืนขอบกำกับ(x,Y) และลบจุดยอด โวลต์1อี,...,โวลต์5อี.


7

คำตอบของ David Richerby (ซึ่งเป็นที่ยอมรับ) นั้นดี

ฉันทำตามคำแนะนำของเขาในกราฟตัวอย่างอย่างง่ายและหวังว่ามันจะช่วยใครซักคน

digraph a <-> b, c -> a, b -> c

(ฉันจะโพสต์สิ่งนี้เป็นความคิดเห็นเกี่ยวกับคำตอบของเดวิด แต่ฉันไม่จำเป็นต้องมีคะแนนชื่อเสียง)


1
การแสดงกราฟิกเป็นการปรับปรุงที่เหนือกว่าคำตอบดั้งเดิม ขอบคุณที่โพสต์เป็นคำตอบไม่ใช่ความคิดเห็น
OrangeSherbet

1
ฉันมักจะรู้สึกจมเมื่อเห็นคำอธิบายหรือสูตรอย่างเป็นทางการในกระดาษคณิตศาสตร์ ฉันต้องเอาชนะความวิตกกังวลนั้นและดูแต่ละประโยคอย่างช้าๆ - มองสิ่งต่าง ๆ ที่ฉันไม่คุ้นเคยตอนที่ฉันไป จากนั้นฉันเขียนตัวอย่างเช่นนี้เพื่อให้แน่ใจว่าฉันเข้าใจ ในตอนท้ายฉันมักจะตะลึงกับความเรียบง่ายของมันที่ยาวนานและทำให้ฉันตกใจมากว่ามันต้องใช้ความพยายามมากขนาดไหน รู้สึกเหมือนฉันมาจากดาวเคราะห์ดวงอื่นในบางครั้ง ดีใจที่ฉันสามารถช่วยให้คุณเข้าใจได้เร็วขึ้น เมื่อคุณเห็นมันเป็นเรื่องง่าย
วิลเลียม

2

เพื่อแปลงกราฟกำกับ D ไปยังกราฟที่ไม่มีทิศทาง G หนึ่งทำต่อไปนี้:

  1. หมายเลขโหนดของ D
  2. สร้างสองกราฟที่ไม่ได้บอกทิศทาง G, G ในจุดสุดยอดเดียวกันตั้งเป็น D
  3. สำหรับทุกขอบ u,v ใน D เพิ่มขอบให้ G ถ้า u<vมิฉะนั้นเพิ่มขอบเข้าไป G
  4. G คือสหภาพที่ไม่ปะติดปะต่อ G และ G

เมื่อทำสหภาพที่แยกออกจากกันเราจะต้องระมัดระวังเพื่อให้มันกลับด้านได้

ตัวอย่าง


นี่เป็นความพยายามที่ดีและเป็นไปตามแนวทางที่ฉันมีในใจเพื่อหาคำตอบ แต่มันก็ไม่ได้ผลเพราะอินเวอร์สนั้นไม่ซ้ำกัน ตัวอย่างเช่นกราฟ O <-> OOO จะถูกแปลงเป็นกราฟ OO OO OO OO แต่หลังจากนี้อาจมาจากกราฟกำกับทิศทาง> O O-> OOO ดังนั้นกระบวนการจึงไม่สามารถย้อนกลับได้
Heterotic

ฉันเพิ่มรูปภาพเพื่อให้ชัดเจนยิ่งขึ้น
adrianN

-1

ฟังก์ชั่นตัวตนคืออะไร? เช่นเดียวกับทุกกราฟสามารถมองเห็นได้เป็นกราฟสองทิศทางที่ไม่มีทิศทางพร้อมพาร์ติชันที่มีขนาดเท่ากันและในทางกลับกัน


ฉันคิดว่าคุณหมายถึงรหัส digraph G=(V,E) ด้วยกราฟ (V×{0,1},{(ยู,0,โวลต์,1)|(ยู,โวลต์)E}). ไม่ทำงานเพราะไม่สามารถรับมือกับขอบสองทิศทางและถ้าG' เป็นผลมาจากการกลับขอบทั้งหมดใน Gจากนั้น G และ G'มีการเข้ารหัส isomorphic แต่ไม่จำเป็นต้อง isomorphic ตัวเอง
เดวิด Richerby

-1

นี่คือแทงนี่:

แทนที่ข้อมูลทิศทางด้วยจุดยอดเพิ่มเติมในกราฟที่ไม่มีทิศทาง กล่าวอีกนัยหนึ่งให้ใช้จุดยอดเพิ่มเติมในกราฟที่ไม่ได้บอกทิศทางเพื่อ "เข้ารหัส" ข้อมูลทิศทาง ตัวอย่างเช่นสำหรับแต่ละจุดสุดยอดที่กำกับอย่างน้อยหนึ่งขอบให้เพิ่มจำนวนจุดยอดที่ไม่ได้เปลี่ยนทิศทางเท่ากับ 1 + จำนวนของขอบ "ขาเข้า" จุดยอดที่มีศูนย์จะไม่เปลี่ยนแปลง

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

ผมคิดว่าส่วนที่ยุ่งยากเป็นประเภทชอบเล่นเรือกวาดทุ่นระเบิด :-) คิดออกว่าระเบิด (ขอบขาเข้า) จะได้รับจำนวนของระเบิดที่อยู่ติดกันสำหรับแต่ละตาราง (ยอด)


"จุดสุดยอดกำกับ" คืออะไร? ไม่ว่าในกรณีใด ๆ มันไม่สามารถถอดรหัสได้ สมมติว่าจุดสุดยอดxมีจุดยอด 1 จุดติดกับมันพร้อมกับจุดยอดหนึ่งขององศาอื่น ๆ คุณจะบอกได้อย่างไรว่ามีกี่เส้นที่แสดงถึงขอบขาเข้าจากจุดยอดองศา 1 และมีการเข้ารหัสเท่าใดในระดับของx? ไม่ว่าในกรณีใดการแก้ปัญหาเรือกวาดทุ่นระเบิดคือ NP-hard วิธีการแก้ปัญหานั้นไม่ได้มีลักษณะเฉพาะเสมอไปและไม่ชัดเจนว่าจะสามารถแก้ไขได้ทั้งหมดเมื่อสี่เหลี่ยมไม่จำเป็นต้องจัดเรียงในตารางที่ดี
David Richerby

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

นอกจากนี้ฉันไม่เข้าใจวิธีแก้ปัญหาของคุณเมื่อฉันอ่านครั้งแรก แต่ฉันเห็นว่ามันทำงานอย่างไร ฉลาด!
Aaron

ปล่อย xเป็นจุดยอดในกราฟต้นฉบับที่ไม่มีขอบเข้ามาและขอบออกหนึ่งอัน ในกราฟที่เข้ารหัสxปรากฏเป็นจุดสุดยอดตรงกับขอบออกมาจากมัน คุณจะทำอย่างไรความแตกต่างการจัดเรียงของการศึกษาระดับปริญญา-1 จุดสุดยอดที่มาจากการเรียงลำดับของการศึกษาระดับปริญญา-1 จุดสุดยอดที่รหัสในการศึกษาระดับปริญญา?
David Richerby

ฉันคิดว่ามันเป็น "เรือกวาดทุ่นระเบิด - ดำริ" ตอนนี้ แต่ความคิดของฉันคือการใช้ขอบกำกับ (x,Y) และแปลงเป็น (x0,x),(x,Y),(Y,Y0) และ (Y,Y1). ดังนั้นx จะมีสองขอบไม่ใช่ 1 จุดสุดยอดใด ๆ ที่มีเพียง 1 ขอบคือการเข้ารหัสองศา Y มีจุดยอดเข้ารหัสสองระดับแสดงระดับ 1 ในตัวอย่างง่ายๆการถอดรหัสนั้นง่ายเพราะเรารู้ว่ามีจุดยอดสองจุดเท่านั้นและมีระดับ 0 และ 1 ตามลำดับดังนั้น (x,Y)
แอรอน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.