การค้นหาจุดยอดคู่ในกราฟ


22

ให้เป็นกราฟ สำหรับจุดสุดยอดกำหนดจะเป็น (เปิด) ย่านในGนั่นคือ\} กำหนดจุดสองในจะเป็นฝาแฝดถ้าและมีชุดเดียวกันของเพื่อนบ้านนั่นคือถ้า(V)G=(V,E)xVN(x)xGN(x)={yV|{x,y}E}u,vGuvN(u)=N(v)

เมื่อกำหนดกราฟบนจุดยอดและขอบเป็นอินพุตเราจะสามารถหาคู่แฝดในได้เร็วแค่ไหนถ้าคู่นั้นมีอยู่จริงGnmG

เราสามารถตรวจสอบได้ว่าจุดยอดที่กำหนดสองจุดเป็นคู่ในเวลาหรือไม่โดยการเปรียบเทียบย่านที่คุ้นเคย อัลกอริทึมที่ตรงไปตรงมาคือการค้นหาคู่แฝดดังนั้นเพื่อตรวจสอบสำหรับแต่ละจุดยอดไม่ว่าจะเป็นฝาแฝด นี้จะใช้เวลาเวลา (และก็พบว่าทุกคู่ของฝาแฝด) มีวิธีที่เร็วกว่าในการค้นหา (ถ้ามี) คู่แฝดในกราฟหรือไม่? มีงานที่รู้จักกันดีในวรรณคดีที่แก้ปัญหานี้หรือไม่?O(n)O(n3)


คุณสามารถย้ำผ่านละแวกใกล้เคียงและเพิ่มลงใน hashtable ที่เกี่ยวข้อง: cstheory.stackexchange.com/q/3390/236
Radu GRIGore

1
นี่คือแบบฝึกหัด 2.17 ที่นี่books.google.co.th/…
Radu GRIGore

คนที่มีอำนาจแก้ไขควรแก้ไขคำจำกัดความของฝาแฝด (ดูความคิดเห็นเกี่ยวกับคำตอบของ TheMachineCharmer หรือคำจำกัดความในหนังสือที่ฉันเชื่อมโยง)
Radu GRIGore

คำตอบ:


21

ฝาแฝดในกราฟเป็นเพียงโมดูลขนาด 2. การสลายตัวแบบแยกส่วนของกราฟที่สามารถพบได้ในเวลา แผนผังการสลายตัวแบบแยกส่วนโดยปริยายหมายถึงโมดูลทั้งหมดของกราฟและประกอบด้วยโหนดภายในสามประเภท: ซีรีย์โหนดคู่ขนานและไพรม์และใบไม้ประกอบไปด้วยโหนดแต่ละโหนด ชุดของจุดยอดอย่างน้อยสองจุดคือโมดูลหากว่ามันเป็นโหนดบางส่วนในทรีหรือสหภาพของชุดลูกบางชุดของซีรีส์หรือโหนดคู่ขนานO(n+m)SV

ดังนั้นเพื่อหาคู่ของโหนดคู่ถ้าพวกเขาอยู่เราสามารถสร้างต้นไม้สลายตัว modular ในเวลา จากนั้นดูที่ใบไม้ถ้าผู้ปกครองของใบไม้ใด ๆ เป็นอนุกรมหรือโหนดคู่ขนานจากนั้นโหนดนั้นจะต้องมีลูกสองคนอย่างน้อยซึ่งเป็นคู่แฝด ดังนั้นเวลาทำงานทั้งหมดจึงเป็นเชิงเส้นO(n+m)

http://en.wikipedia.org/wiki/Modular_decomposition


ขอบคุณสำหรับการแนะนำให้ฉันรู้จักกับ Modular Decomposition!
gphilip

12

ปัญหาเทียบเท่ากับการพิจารณาว่ามีสองแถวเท่ากันในเมทริกซ์กราฟ เราสามารถสร้าง trie บนแถวของกราฟเมทริกซ์ เวลา Compleixty จะเป็น O (n ^ 2)


6
ความคิดเดียวกันในรายการถ้อยคำให้ ) O(m+n)
Radu GRIGore

ตอนนี้ฉันกำลัง
ดุด่า

2
สิ่งนี้สามารถสรุปได้ค่อนข้างทั่วไป ถ้าเราใช้ถ้อยคำใหม่ปัญหาเป็น "ให้ (ที่นี่f ( x ) : = N ( x ) ) พบx 1 , x 2ที่แตกต่างกันเช่นf ( x 1 ) = f ( x 2 ) " จากนั้น สำหรับวิธีการหนึ่งที่ได้รับคำสั่งโดยสิ้นเชิงYคือการประเมินf ( x )สำหรับแต่ละx Xf:X>Yf(x):=N(x)x1x2f(x1)=f(x2)Yf(x)xXเรียงลำดับและตรวจสอบรายการที่เรียงลำดับสำหรับรายการที่ซ้ำกัน Trie นั้นเป็น Radix sort ที่มีประสิทธิภาพ
Peter Taylor

8

แก้ไข: โซลูชั่นโดย @MikleB และ @Travis นั้นฉลาดมาก ขออภัยสำหรับคำตอบที่มากเกินไป


ดูเหมือนว่าปัญหาจะสามารถลดลงไปปัญหาคูณเมทริกซ์ในถ้อยคำเมทริกซ์ของกราฟโดยการเปลี่ยนคูณกับ EQU (นั่นคือ NXOR) และนอกจากนี้ยังมีและ ดังนั้นหากมีคู่ของฝาแฝดในกราฟแล้วเมทริกซ์ที่เกิดTจะไม่เป็นเมทริกซ์เอกลักษณ์และดัชนี( ฉัน, เจ)ที่คุ้มค่าฉัน, เจไม่เป็นศูนย์จะตรงโหนดคู่คู่ .AAAT(i,j)ai,j

เพื่อความรู้ของฉันดีที่สุดปัญหาคูณเมทริกซ์จะสามารถแก้ไขได้ในเวลากับα 2.376โดยอัลกอริทึมทองแดง-Winograd หากจำเป็นต้องแก้ปัญหาในทางปฏิบัติขั้นตอนวิธีการคูณเมทริกซ์ใด ๆ ก็ใช้งานได้ดีในทางปฏิบัติO(nα)α2.376


เจ๋งงานนี้! : D คิดว่ามันจะพอเพียงในการประเมินเพียงครึ่งบนของ2 คุณคิดอย่างไร? A2
Pratik Deoghare

1
@TheMachineCharmer: ขอบคุณ :) ใช่ถ้ากราฟไม่ได้ถูกบอกทิศทาง
Hsien-Chih Chang 張顯之

ใช่. แน่นอน! :)
Pratik Deoghare

5

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

ฉันแน่ใจว่าสวยเซียน-Chih ช้างความต้องการของการแก้ปัญหาที่ถูกต้องที่จะ2เพื่อTA2AAT

การสังเกตของ TheMachineCharmer 4 กลับไปข้างหน้า (ตัวอย่างเช่น: [0,0,1], [0,1,0], [0,1,1] มีปัจจัย 0 แต่ไม่มีฝาแฝด) ถ้ามีฝาแฝดอยู่แล้วดีเทอร์มีแนนต์จะเป็นศูนย์


ผมเห็นปัญหากับไม่มี2 ตัวอย่างใด ๆ ? btw ระบบในเว็บไซต์นี้ไม่ได้บ้า! :)A2
Pratik Deoghare

จะทำงานสำหรับกราฟไม่มีทิศทาง (ซึ่ง== T ) แต่ไม่โดยทั่วไปสำหรับกราฟกำกับ AND มากกว่า XNOR จำเป็นต้องเปรียบเทียบสองแถวของ A และการคูณเมทริกซ์ทำงานบนแถวจากเมทริกซ์แรกกับคอลัมน์จากวินาที A2AAT
Peter Taylor

ระบบอาจไม่บ้า แต่อาจขัดกับโปสเตอร์ครั้งแรก คุณสามารถตอบได้ แต่ไม่แสดงความคิดเห็น ... แต่ความคิดเห็นของคุณดีพอที่ IMHO เพื่อแสดงความคิดเห็นที่เหมาะสม เมื่อคุณสร้างชื่อเสียงมากขึ้นฉันคิดว่าคุณจะพบว่าระบบน่าดึงดูด
hardmath

3
ความสามารถในการตอบ แต่ไม่ใช่ความเห็นนั้นบ้า มันบังคับให้ผู้ใช้ใหม่เลือกระหว่างไม่เป็นประโยชน์หรือตอบในสถานที่ที่ไม่ถูกต้อง
Peter Taylor

3

หัวข้อนี้ค่อนข้างเก่า อย่างไรก็ตามดูเหมือนว่าจะไม่มีใครได้เข้าใกล้กับวิธีการที่หรูหราและเรียบง่ายที่สุด เรียงลำดับคำย่อคำศัพท์แบบย่อคำศัพท์ในเวลา O (n + m) จากนั้นตรวจสอบรายการที่ซ้ำกัน (ดู Aho, Hopcroft, Ullman, 74 ') คุณสามารถใช้การสลายตัวแบบแยกส่วนได้


2

เธรดนี้เก่าและมีการตอบคำถามของ OP แต่ฉันต้องการเพิ่มอัลกอริทึมอื่นเพื่อค้นหาคู่ดังกล่าวทั้งหมดในเวลาเชิงเส้น ไม่มีใครพูดถึงการปรับแต่งพาร์ติชัน !

อัลกอริทึมนี้ค้นหาคลาสการเทียบเท่าของฝาแฝดปลอม อัลกอริทึมนั้นอาศัยกระบวนการที่มีประสิทธิภาพซึ่งจะปรับแต่งพาร์ติชัน ได้รับชุดและพาร์ทิชันS . หมายถึงการตั้งค่าจุดตัดและชุดความแตกต่าง พาร์ติชันมีเสถียรภาพหากไม่สามารถปรับปรุงได้อีก ขั้นตอนนี้ใช้เวลา O (| S |) (ดูบทความของ Wikipedia เกี่ยวกับการปรับแต่งพาร์ติชัน) ดังนั้นจึงรวดเร็วP = {X1, ..., Xn}refine(P, S) = {X1 ^ S, X1 - S, X2 ^ S, X2 - S, ..., Xn ^ S, Xn - S}^-

Algorithm:

P = {V} // initial partition consists of the vertex set
for every vertex v:
    P = refine(P, N(v)) // refine with the open neighborhood of v

เวลาทั้งหมดคือ O (| V | + | E |) โปรแกรมนี้ใช้งานง่ายเช่นกัน


1

ข้อสังเกตบางอย่างที่อาจช่วยได้

  1. สำหรับ, Vถ้าไม่ได้เป็นฝาแฝดของแล้วCและDไม่สามารถเป็นฝาแฝดที่ N ( )และd N ( )a,bVabcdcN(a)dN(b)

  2. ดังนั้น aและ bไม่สามารถเป็นแฝดได้|N(a)||N(b)|ab

  3. ถ้าดังนั้นaและbไม่สามารถเป็นแฝดได้ ใช้งานได้เฉพาะในกรณีที่คุณกำลังมองหาฝาแฝดที่ไม่ใช่ที่อยู่ติดกันbN(a)ab

  4. หากมีฝาแฝดอยู่แล้วดีเทอร์มีแนนต์ของเมทริกซ์ adjacency เป็นศูนย์

ความคิดแฟนซี:

  1. สร้างต้นไม้ไบนารีสมบูรณ์พร้อม height = | V |
  2. จากนั้นเริ่มอ่านเมทริกซ์ adjacency หนึ่งแถว
  3. หากคุณพบ 0 เลี้ยวซ้ายมิฉะนั้นจะถูกต้อง
  4. เมื่อคุณไปถึงที่เก็บใบไม้จุดสุดยอดของคุณที่นั่น
  5. ทำเช่นนี้สำหรับทุกแถว ดังนั้นในที่สุดใบไม้แต่ละใบจะมีเพื่อนบ้าน

ถูกขโมยมาจากแรงบันดาลใจจากอัลกอริธึมการบีบอัด Huffman! :)


2
ab

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