อัลกอริทึมในการค้นหาเส้นผ่านศูนย์กลางของต้นไม้โดยใช้ BFS / DFS ทำไมมันทำงาน


28

นี้การเชื่อมโยงให้อัลกอริทึมสำหรับการหาขนาดเส้นผ่าศูนย์กลางของต้นไม้ไม่มีทิศทางใช้ BFS สรุป:

รัน BFS บนโหนดใด ๆ ในกราฟโดยระลึกถึงโหนดที่ค้นพบล่าสุด รัน BFS จากการที่คุณจดจำโหนด v ที่พบล่าสุด d (u, v) คือเส้นผ่านศูนย์กลางของต้นไม้

ทำไมมันทำงาน

หน้า 2 ของสิ่งนี้ให้เหตุผล แต่มันทำให้เกิดความสับสน ฉันกำลังอ้างอิงส่วนเริ่มต้นของการพิสูจน์:

รัน BFS บนโหนดใด ๆ ในกราฟโดยระลึกถึงโหนดที่ค้นพบล่าสุด รัน BFS จากการที่คุณจดจำโหนด v ที่พบล่าสุด d (u, v) คือเส้นผ่านศูนย์กลางของต้นไม้

ความถูกต้อง: ให้ a และ b เป็นสองโหนดใด ๆ ที่ d (a, b) คือเส้นผ่านศูนย์กลางของต้นไม้ มีเส้นทางที่ไม่ซ้ำกันจาก a ถึง b ปล่อยให้เป็นโหนดแรกบนเส้นทางที่ค้นพบโดย BFS หากเส้นทางp1จาก s ถึง u และp2จาก a ถึง b ไม่แชร์ขอบดังนั้นเส้นทางจาก t ถึง u รวมถึง s ดังนั้น

d(t,u)d(s,u)

d(t,u)d(s,a)

.... (มีความไม่เท่าเทียมเพิ่มขึ้นตามมา .. )

ความไม่เท่าเทียมนั้นไม่สมเหตุสมผลสำหรับฉัน


ฉันไม่พบคำพูดในคำถามที่เชื่อมโยง
Raphael

1
ลองแทนที่ "ห้ามแชร์ขอบ" ด้วย "ห้ามแชร์ยอด" ในโซลูชัน
Yuval Filmus

คุณกำลังใช้ BFS เท่านั้นไม่ใช่ DFS
รูปขนาดย่อ

คำตอบ:


11

ทุกส่วนของการพิสูจน์บานพับการเรียกร้องกับคุณสมบัติที่สำคัญ 2 ประการของต้นไม้ที่มีขอบที่ไม่ได้บอกทิศทาง:

  • 1-connectedness (เช่นระหว่าง 2 โหนดในทรีมีทางเดียวเท่านั้น)
  • โหนดใด ๆ สามารถทำหน้าที่เป็นรากของต้นไม้

เลือกต้นไม้พลโหนดsสมมติว่าคุณ, v V ( G )เป็นโหนดที่มีd ( u , v ) = d ฉันa m (su,vV(G) ) สมมติต่อไปว่าอัลกอริทึมค้นหาโหนด xเริ่มต้นที่ sบางโหนด yเริ่มต้นที่ xถัดไป WLOG d ( s , U ) d ( s , โวลต์ ) ทราบว่าd(u,v)=diam(G)xsyxd(s,ยู)d(s,โวลต์)ต้องถือเว้นแต่ขั้นตอนแรกของอัลกอริทึมจะไม่จบลงที่x เราจะเห็นว่า d ( x , Y ) = d ( U , V )d(s,x)d(s,Y)xd(x,y)=d(u,v)

การกำหนดค่าทั่วไปของโหนดทั้งหมดที่เกี่ยวข้องสามารถเห็นได้ในกราฟิกหลอกต่อไปนี้ (อาจเป็นหรือs = z x yหรือทั้งสองอย่าง):s=zuvs=zxy

(u)                                            (x)
  \                                            /
   \                                          /
    \                                        /
     ( z_uv )---------( s )----------( z_xy )
    /                                        \
   /                                          \
  /                                            \
(v)                                            (y)

เรารู้ว่า:

  1. ) มิฉะนั้น d ( u , v ) < d ฉันa m ( G )ขัดแย้งกับสมมติฐานd(zuv,y)d(zuv,v)d(u,v)<diam(G)
  2. ) มิฉะนั้น d ( u , v ) < d ฉันa m ( G )ขัดแย้งกับสมมติฐานd(zuv,x)d(zuv,u)d(u,v)<dผมaม.(G)
  3. มิฉะนั้นขั้นตอนที่ 1 ของขั้นตอนวิธีจะไม่ได้หยุดอยู่ที่xd(s,ZxY)+d(ZxY,x)d(s,Zยูโวลต์)+d(Zยูโวลต์,ยู)x
  4. มิฉะนั้นเวทีที่ 2 ของอัลกอริทึมจะไม่ได้หยุดอยู่ที่ปีd(ZxY,Y)d(โวลต์,Zยูโวลต์)+d(Zยูโวลต์,ZxY)Y

1) และ 2) บ่งบอกถึง )d(u,v)=d(zuv,v)+d(zuv,u)d(zuv,x)+d(zuv,y)=d(x,y)+2d(zuv,zxy)d(x,y)

3) และ 4) บ่งบอกถึง d(zxy,y)+d(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u)+d(v,zuv)+d(zuv,zxy) เทียบเท่ากับ )d(x,y)=d(zxy,y)+d(zxy,x)2d(s,zuv)+d(v,zuv)+d(u,zuv)d(u,v)

ดังนั้น )d(u,v)=d(x,y)

การพิสูจน์แบบอะนาล็อกมีไว้สำหรับการกำหนดค่าทางเลือก

                 (u)                          (x)
                   \                          /
                    \                        /
                     \                      /
     ( s )---------( z_uv )----------( z_xy )
                     /                      \
                    /                        \
                   /                          \
                 (v)                          (y)

และ

                          (x)        (u)  
                          /            \  
                         /              \ 
                        /                \
     ( s )---------( z_xy )----------( z_uv )
                        \                /          
                         \              /           
                          \            /            
                          (y)        (v)            

นี่คือการกำหนดค่าที่เป็นไปได้ทั้งหมด โดยเฉพาะอย่างยิ่งเนื่องจากผลมาจากขั้นตอนที่ 1 ของอัลกอริทึมและY พีทีเอช( x , U )xpath(s,u),xpath(s,v)เนื่องจากระยะที่ 2ypath(x,u),ypath(x,v)


(1) เกี่ยวกับกราฟิกแรกไม่ควรพา ธ จาก s ถึง x มีจุดยอด u และ v ในลำดับบางอย่างเนื่องจากมีอยู่บนต้นไม้ที่สร้างโดย BFS? (2) คุณช่วยอธิบายได้อย่างไรว่าความไม่เท่าเทียมกันเกิดขึ้นได้อย่างไร? (3) ตั้งแต่ BFS เริ่มต้นจากและที่เริ่มต้นจากการมี x U, V ที่ไหนสักแห่งบนเส้นทางที่ผมเชื่อว่าภาพที่ควรจะเป็นตามที่แสดงในการเชื่อมโยงimgur.com/jQ94erY การให้เหตุผลที่คุณให้ไว้มีผลอย่างไร
แกง

@ ทราบด่วนว่าต้นไม้จะได้รับและไม่ได้ถูกสร้างขึ้นโดย bfs! คำตอบเฉพาะ: โฆษณา 1) ไม่ จินตนาการงดงามของต้นไม้ในกราฟิก (1) โดยการเพิ่มโหนดจำนวนมากโดยพลบนขอบและตรง 1 โหนดบนขอบ( Z x Y , x ) bfs ขั้นแรกจะสิ้นสุดที่ x โฆษณา 2) ความไม่เสมอภาค / โอบอุ้มใดที่ไม่ชัดเจน? เรามักจะสมมติว่า( u , v )เป็นเส้นทางที่ความยาวของเส้นผ่านศูนย์กลางของกราฟd i a g ( G )(s,zxy)(zxy,x)(u,v)diag(G). นี่ถูกกำหนดไว้อย่างดีเนื่องจาก G เชื่อมต่อ 1 โฆษณา 3) ไม่: 3.1 มีเส้นทางมากกว่า 1 เส้นทางระหว่าง 2 โหนดใด ๆ นอกเหนือจากดังนั้นกราฟจึงไม่ใช่ต้นไม้ ...(s,y)
collapsar

@Curryage ... 3.2 ; สิ่งนี้เป็นไปไม่ได้เนื่องจากd ( u , v ) = d ฉันa m ( Gd(x,y)>d(u,v)โดยการสันนิษฐานและเส้นผ่านศูนย์กลางของกราฟคือระยะทางขั้นต่ำสุดสูงสุดระหว่างสองโหนด ในกรณีของต้นไม้จะมี 1 เส้นทางระหว่าง 2 โหนดใด ๆ ดังนั้นคำจำกัดความจะลดลงเป็น 'ระยะห่างสูงสุดระหว่างสองโหนด' d(u,v)=diam(G)
collapsar

9

สัญชาตญาณด้านหลังเป็นเรื่องง่ายที่จะเข้าใจ สมมติว่าฉันต้องค้นหาเส้นทางที่ยาวที่สุดที่มีอยู่ระหว่างสองโหนดในต้นไม้ที่กำหนด

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

ดังนั้นวิธีหนึ่งคือตรวจสอบว่าโหนดใดเป็นโหนดลีฟก่อนจากนั้นจึงเริ่ม BFS จากโหนดโหนดใดโหนดหนึ่งเพื่อให้ได้โหนดที่อยู่ไกลที่สุดจากโหนดนั้น

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

แต่การรับประกันว่า x จะเป็นจุดสิ้นสุดของเส้นทางสูงสุดคืออะไร?

ลองดูตัวอย่าง: -

       1   
    / /\ \
   6 2  4 8
         \ \
          5 9
           \
            7

สมมติว่าฉันเริ่มต้น BFS ของฉันจาก 6 โหนดที่ระยะทางสูงสุดจาก 6 คือโหนด 7 โดยใช้ BFS เราสามารถรับโหนดนี้ได้ ตอนนี้เราติดดาว BFS จากโหนด 7 เพื่อรับโหนด 9 ที่ระยะทางสูงสุด เส้นทางจากโหนด 7 ไปยังโหนด 9 เป็นเส้นทางที่ยาวที่สุดอย่างชัดเจน

เกิดอะไรขึ้นถ้า BFS ที่เริ่มต้นจากโหนด 6 ให้ 2 เป็นโหนดที่ระยะทางสูงสุด จากนั้นเมื่อเราจะ BFS จาก 2 เราจะได้รับ 7 เป็นโหนดที่ระยะทางสูงสุดและเส้นทางที่ยาวที่สุดจะเป็น 2-> 1-> 4-> 5-> 7> ความยาว 4 แต่ความยาวเส้นทางที่ยาวที่สุดที่แท้จริงคือ 5 ซึ่งไม่สามารถ เกิดขึ้นเนื่องจาก BFS จากโหนด 6 จะไม่ให้โหนด 2 เป็นโหนดที่ระยะทางสูงสุด

หวังว่าจะช่วย


1
นั่นเป็นคำอธิบายที่ง่ายและชัดเจน! ขอบคุณ :)
anekix

4

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

สมมติว่าเรามีจุดยอดสองจุดและbเพื่อให้ระยะห่างระหว่างaและbบนเส้นทางp ( a , b )เป็นเส้นผ่านศูนย์กลางเช่นระยะทางd ( a , b )เป็นระยะทางสูงสุดระหว่างจุดสองจุดใด ๆ ในต้นไม้ สมมติว่าเรามีโหนดs a , b (ถ้าs = aดังนั้นจะเห็นได้ชัดว่ารูปแบบการทำงานเนื่องจาก BFS แรกจะได้รับbและที่สองจะกลับไป a) สมมติว่าเรามีโหนดaaพี(a,)d(a,)sa,s=aดังกล่าวว่า d ( s , U ) = สูงสุดx d ( s , x )ยูd(s,ยู)=สูงสุดxd(s,x)

เล็มม่า 0: ทั้งและbเป็นโหนดลีฟa

การพิสูจน์: หากพวกเขาไม่ได้เป็นโหนดใบเราสามารถเพิ่มโดยการขยายจุดปลายไปยังโหนดใบตรงกันข้ามกับd ( a , b )เป็นเส้นผ่านศูนย์กลางd(a,)d(a,)

แทรก 1: )สูงสุด[d(s,a),d(s,)]=d(s,u)

พิสูจน์: สมมติว่าเพื่อประโยชน์ของความขัดแย้งว่าทั้งและd ( s , B )อย่างเคร่งครัดน้อยกว่าd ( s , U ) เราดูสองกรณี:d(s,a)d(s,b)d(s,u)

กรณีที่ 1: เส้นทางไม่ได้มีจุดสุดยอดของ ในกรณีนี้d ( a , b )ต้องไม่เป็นเส้นผ่านศูนย์กลาง เพื่อดูว่าทำไมปล่อยให้เสื้อเป็นจุดสุดยอดไม่ซ้ำกันในพี( , )กับระยะทางที่เล็กที่สุดs จากนั้นเราจะเห็นว่าd ( a , u ) = d ( a , t ) + d ( t , sp(a,b)sd(a,b)tp(a,b)s , ตั้งแต่ d ( s , u ) > d ( s , b ) = d ( s , t ) + d ( t , b ) > d (d(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b) ) ในทำนองเดียวกันเราก็จะมี d ( , U ) > d ( , B ) สิ่งนี้ขัดแย้งกับ d ( a , b )เป็นเส้นผ่านศูนย์กลางd(s,u)>d(s,b)=d(s,t)+d(t,b)>d(t,b)d(b,u)>d(a,b)d(a,b)

กรณีที่ 2: เส้นทางมีจุดสุดยอดของ ในกรณีนี้d ( , )อีกครั้งไม่สามารถเส้นผ่าศูนย์กลางตั้งแต่จุดสุดยอดบางยูดังกล่าวว่าd ( s , U ) = สูงสุดx d ( s , x )ทั้งd ( , U )และD ( , u )จะมากกว่าdp(a,b)sd(a,b) ud(s,u)=maxxd(s,x)d(a,u)d(b,u) )d(a,b)

แทรก 1 ให้เหตุผลว่าทำไมเราเริ่มต้นการค้นหาในแนวกว้างสองที่ผ่านมาค้นพบจุดสุดยอดของ BFS แรก ถ้ามึงเป็นจุดสุดยอดที่ไม่ซ้ำกับระยะทางที่เป็นไปได้มากที่สุดจากsแล้วโดยบทแทรก 1 มันจะต้องเป็นหนึ่งในปลายทางของเส้นทางที่มีระยะทางบางเท่ากับเส้นผ่าศูนย์กลางและด้วยเหตุนี้ BFS สองกับยูเป็นรากอย่างไม่น่าสงสัยพบ เส้นผ่าศูนย์กลาง ในทางกลับกันถ้าอย่างน้อยหนึ่งจุดยอดvอื่นที่d ( s , v ) = d ( s , u ) , จากนั้นเรารู้ว่าเส้นผ่านศูนย์กลางเป็นduusuvd(s,v)=d(s,u)d(a,b)=2d(s,u)uv


น่ากลัว ขอบคุณสำหรับการโพสต์คำตอบนี้ ฉันประหลาดใจที่คำตอบนี้ไม่ได้รับ upvotes ใด ๆ
Zephyr

0

ขั้นแรกให้เรียกใช้ DFS จากโหนดสุ่มจากนั้นเส้นผ่านศูนย์กลางของต้นไม้คือเส้นทางระหว่างใบไม้ที่ลึกที่สุดของโหนดในทรีย่อยของ DFS: enter image description here


4
ทำไมจึงใช้งานได้
Yuval Filmus

0

ตามคำนิยามของ BFS ระยะทาง (จากโหนดเริ่มต้น) ของแต่ละโหนดที่สำรวจจะเท่ากับระยะทางของโหนดก่อนหน้านี้ที่สำรวจหรือมากกว่าโดย 1 ดังนั้นโหนดสุดท้ายที่สำรวจโดย BFS จะอยู่ในกลุ่มที่ไกลที่สุดจากจุดเริ่มต้น ปม

ดังนั้นอัลกอริทึมของการใช้ BFS จำนวนสองครั้งเพื่อ "เลือกโหนดโดยพลการ x. ค้นหาโหนดa ไกลที่สุดจาก x (โหนดสุดท้ายที่ BFS ค้นพบเริ่มต้นจาก x) ค้นหาโหนด ไกลที่สุดจาก a (โหนดสุดท้ายที่ BFS ค้นพบเริ่มต้นจาก a) "ซึ่งพบระยะสองโหนดที่มีระยะทางสูงสุดจากแต่ละโหนด


1
ขอบคุณสำหรับคำตอบด้วยสัญชาตญาณ อย่างไรก็ตาม "ดังนั้น" ในประโยคสุดท้ายของคุณไม่ชัดเจน เหตุใดจึงทำตาม ทำไมโหนดถึงอยู่ไกลที่สุดxจะต้องเป็นหนึ่งในสองโหนดที่ระยะทางสูงสุดจากกัน? ดูเหมือนว่าต้องการหลักฐานบางอย่าง
DW

ฉันไม่แน่ใจว่าจะสร้างหลักฐานเช่นนี้ได้อย่างไร ฉันรู้สึกว่าการสนทนานั้นเป็นความจริงโดยสังหรณ์ใจ: ถ้าสองโหนดอยู่ห่างจากกันมากที่สุดดังนั้นสำหรับโหนดใดก็ตามที่กำหนดไว้หนึ่งในสองโหนดนั้นจะอยู่ห่างจากจุดนั้นมากที่สุด
Extrarius

การอ้างสิทธิ์แบบ "สัญชาตญาณจริง" ไม่เป็นความจริงสำหรับกราฟทั่วไป ดูกราฟในcs.stackexchange.com/a/213/755และลองจินตนาการถึงการเริ่มต้น BFS จากโหนดโวลต์ (เช่นให้ x=โวลต์); จากนั้นมันจะเลือกa=ยู และค้นหาโหนด ที่ไกลที่สุดจาก aแต่ไม่พบสองโหนดที่มีระยะทางสูงสุดจากกันและกัน ดังนั้นคำสั่งที่อ้างสิทธิ์หากเป็นจริงต้องพึ่งพาคุณสมบัติพิเศษบางอย่างของต้นไม้ที่ไม่ได้เก็บไว้สำหรับกราฟทั่วไป
DW

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

0

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

วิธีนี้จะใช้เพื่อหาเส้นผ่านศูนย์กลางของเกาะจริงที่มีอยู่จริงถ้าเรากำหนดว่าเป็นเส้นผ่านศูนย์กลางของวงกลมที่เล็กที่สุดซึ่งจะล้อมรอบเกาะอย่างเต็มที่


0

@op, the way the cases are defined in the PDF may be a bit off.

I think that the two cases should be:

  1. p1 does not intersect with p2, i.e. there are no common vertices between paths p1 and p2. In this case, define t as the first node on p2 discovered by the first BFS starting at s.

  2. p1 and p2 have at least one common vertex. In this case, define t to be the first node on p2 discovered by the first BFS that is also on p1.

The rest of the proof in the PDF should follow.

With this definition, the figure shown by OP falls into Case 2.

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