คำถามติดแท็ก graph-traversal

คำถามเกี่ยวกับอัลกอริธึมการข้ามผ่านกราฟเช่น BFS และ DFS

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

7
อัลกอริทึมในการค้นหาเส้นผ่านศูนย์กลางของต้นไม้โดยใช้ BFS / DFS ทำไมมันทำงาน
นี้การเชื่อมโยงให้อัลกอริทึมสำหรับการหาขนาดเส้นผ่าศูนย์กลางของต้นไม้ไม่มีทิศทางใช้ BFS สรุป: รัน BFS บนโหนดใด ๆ ในกราฟโดยระลึกถึงโหนดที่ค้นพบล่าสุด รัน BFS จากการที่คุณจดจำโหนด v ที่พบล่าสุด d (u, v) คือเส้นผ่านศูนย์กลางของต้นไม้ ทำไมมันทำงาน หน้า 2 ของสิ่งนี้ให้เหตุผล แต่มันทำให้เกิดความสับสน ฉันกำลังอ้างอิงส่วนเริ่มต้นของการพิสูจน์: รัน BFS บนโหนดใด ๆ ในกราฟโดยระลึกถึงโหนดที่ค้นพบล่าสุด รัน BFS จากการที่คุณจดจำโหนด v ที่พบล่าสุด d (u, v) คือเส้นผ่านศูนย์กลางของต้นไม้ ความถูกต้อง: ให้ a และ b เป็นสองโหนดใด ๆ ที่ d (a, b) คือเส้นผ่านศูนย์กลางของต้นไม้ มีเส้นทางที่ไม่ซ้ำกันจาก …

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

2
เส้นทางที่ไม่ตัดกันสั้นที่สุดสำหรับกราฟที่ฝังอยู่ในระนาบแบบยุคลิด (2D)
อัลกอริธึมอะไรที่คุณจะใช้เพื่อค้นหาเส้นทางที่สั้นที่สุดของกราฟซึ่งฝังอยู่ในระนาบแบบยุคลิดซึ่งเส้นทางนั้นไม่ควรมีจุดตัดด้วยตนเอง (ในการฝัง) ยกตัวอย่างเช่นในกราฟด้านล่างที่คุณต้องการจะไปจากที่ ) โดยปกติอัลกอริทึมอย่างอัลกอริทึมของ Dijkstra จะสร้างลำดับดังนี้:( 0 , 0 ) → ( - 3 , 2 )(0,0)→(-3,2)(0,0) \rightarrow (-3,2) [ ( 0 , 0 ) →3( 0 , 3 ) →2√( 1 , 2 ) →4( - 3 , 2 ) ] = 7 + 2-√.[(0,0)→3(0,3)→2(1,2)→4(-3,2)]=7+2.\left[ (0,0) \stackrel {3}{\rightarrow} …

1
ขั้นตอนที่รับประกันว่าจะออกจากเขาวงกต
ให้เขาวงกตแบบสองมิติซึ่งคุณสามารถให้คำสั่ง 4 คำสั่ง "เลื่อนขึ้น / ลง / ขวา / ซ้าย" การรู้จักเขาวงกต แต่ไม่ใช่ตำแหน่งของบุคคลเราจะค้นหาลำดับขั้นต่ำของคำสั่งที่รับประกันการออกจากเขาวงกตได้อย่างไร ฉันกำลังมองหาชุดคำสั่งลำดับเดียวที่จะทำงานไม่ว่าคุณจะเริ่มจากเขาวงกตที่ไหน สมมติว่าหากพันธมิตรของเราได้รับคำสั่ง "ย้ายไปทางขวา" เมื่อมีกำแพงอยู่ด้านขวาเขาจะอยู่ในที่ที่เขาอยู่ กล่าวอีกนัยหนึ่งเราจะได้รับเขาวงกตและเราจะต้องเลือกลำดับของคำสั่ง จากนั้นพันธมิตรของเราจะถูกวางไว้ที่ไหนสักแห่งในเขาวงกตและจะทำตามลำดับของคำสั่งที่เราเลือกไว้ล่วงหน้า เราต้องการลำดับนี้เพื่อให้แน่ใจว่าพันธมิตรของเราจะหลบหนีไม่ว่าพันธมิตรของเราจะวางไว้ที่ไหน โปรดทราบว่าคำสั่งที่อนุญาตไม่มีคำสั่งแบบมีเงื่อนไขใด ๆ ดังนั้นจึงไม่สามารถทำตามลำดับที่แตกต่างกันขึ้นอยู่กับคู่ของคุณ มีวิธีคิดแบบพหุนามเวลาในการสร้างลำดับดังกล่าวให้คำอธิบายของเขาวงกตหรือไม่? Yuval Filmus กล่าวถึงกรณีนี้เป็นกรณีพิเศษของปัญหาการซิงโครไนซ์คำและอาจเกี่ยวข้องกับลำดับการข้ามผ่านสากล ฉันยังพบกระดาษที่ดูเหมือนว่าเกี่ยวข้อง: ปัญหาพร้อมกันเขาวงกตแก้ Stefan Funke, André Nusser, Sabine Storandt AAAI 2017 น่าเสียดายสำหรับกราฟทั่วไปนี่ดูเหมือนจะเป็นปัญหาที่ยังไม่แก้ แต่ฉันสงสัยว่าอาจมีอัลกอริทึมที่ดีสำหรับกรณีเฉพาะนี้หรือไม่ ฉันมาพร้อมกับวิธีการของผู้สมัคร: ติดป้ายทุกตำแหน่งด้วยจำนวนขั้นต่ำที่ต้องการออกและติดตามทุกตัวแทนในเขาวงกต อาจเป็นไปได้ที่จะทำการค้นหาด้วยวิธีนี้

2
จำนวนพา ธ การค้นหาที่เป็นไปได้เมื่อค้นหาใน BST
ฉันมีคำถามต่อไปนี้ แต่ไม่มีคำตอบสำหรับเรื่องนี้ ฉันจะขอบคุณถ้าวิธีการของฉันถูกต้อง: Q. เมื่อค้นหาค่าคีย์ 60 ในแผนผังการค้นหาแบบไบนารีโหนดที่มีค่าคีย์ 10, 20, 40, 50, 70, 80, 90 จะถูกสำรวจไม่จำเป็นต้องเรียงตามลำดับที่กำหนด คำสั่งซื้อที่แตกต่างกันมีความเป็นไปได้เท่าใดที่ค่าคีย์เหล่านี้สามารถเกิดขึ้นได้บนเส้นทางการค้นหาจากโหนดรูทที่มีค่า 60 (A) 35 (B) 64 (C) 128 (D) 5040 จากคำถามฉันเข้าใจว่าโหนดทั้งหมดที่ให้ไว้จะต้องรวมอยู่ในการสำรวจเส้นทางและท้ายที่สุดเราต้องไปถึงที่สำคัญเช่น 60 ตัวอย่างเช่นการรวมกันอย่างใดอย่างหนึ่งจะเป็น: 10, 20, 40, 50, 90, 80, 70, 60 เนื่องจากเราต้องข้ามโหนดทั้งหมดที่ระบุข้างต้นเราต้องเริ่มต้นด้วย 10 หรือ 90 ถ้าเราเริ่มต้นด้วย 20 เราจะไม่ถึง 10 (ตั้งแต่ 60> 20 และเราจะทรีย่อยทรีขวาของ 20) ในทำนองเดียวกันเราไม่สามารถเริ่มต้นด้วย …

4
การสำรวจเส้นทางล่วงหน้าของต้นไม้สองต้นสามารถเหมือนกันได้แม้ว่าต้นไม้นั้นจะแตกต่างกันหรือไม่?
คำถามนี้ค่อนข้างอธิบายได้ว่าพวกเขาทำได้ แต่ไม่แสดงตัวอย่างใด ๆ ของการมีต้นไม้สองต้นที่แตกต่างกันซึ่งมีการสำรวจเส้นทางล่วงหน้าที่เหมือนกัน มีการกล่าวถึงด้วยว่าการสำรวจเส้นทางตามลำดับของต้นไม้สองต้นที่แตกต่างกันอาจเหมือนกันแม้ว่าจะมีโครงสร้างที่แตกต่างกัน มีตัวอย่างของสิ่งนี้หรือไม่?

3
ความหมายของ 'ความกว้าง' ในการค้นหาความกว้างครั้งแรกคืออะไร?
ฉันได้เรียนรู้เกี่ยวกับการค้นหาครั้งแรกและคำถามอยู่ในใจว่าทำไม BFS จึงถูกเรียกเช่นนั้น ในหนังสือแนะนำอัลกอริทึมโดย CLRSฉันอ่านเหตุผลต่อไปนี้: การค้นหาความกว้างครั้งแรกนั้นตั้งชื่ออย่างมากเพราะจะเป็นการขยายขอบเขตระหว่างจุดยอดที่ค้นพบและจุดที่ยังไม่ถูกค้นพบอย่างสม่ำเสมอทั่วทั้งความกว้างของแนวชายแดน อย่างไรก็ตามฉันไม่สามารถเข้าใจความหมายของข้อความนี้ได้ ฉันสับสนเกี่ยวกับคำนี้ "ชายแดน" และความกว้างของชายแดนนั้น ดังนั้นบางคนได้โปรดตอบคำถามนี้ในวิธีที่ง่ายต่อการเข้าใจสำหรับผู้เริ่มต้นเช่นฉัน

1
กราฟที่ทำให้ DFS และ BFS ประมวลผลโหนดตามลำดับที่แน่นอน
สำหรับกราฟบางอันกระบวนการอัลกอริทึมการค้นหา DFS และ BFS ในลำดับเดียวกันโดยมีเงื่อนไขว่าพวกเขาทั้งคู่เริ่มต้นที่โหนดเดียวกัน สองตัวอย่างคือกราฟที่เป็นเส้นทางและกราฟที่มีรูปร่างเป็นรูปดาว (ต้นไม้ที่มีความลึกพร้อมจำนวนลูกโดยพลการ) มีวิธีในการจัดหมวดหมู่กราฟที่ตอบสนองคุณสมบัตินี้หรือไม่?111

3
ความแตกต่างระหว่าง edge cross และ edge forward ใน DFT
ในต้นไม้แรกที่มีความลึกมีขอบกำหนดต้นไม้ (เช่นขอบที่ใช้ในการแวะผ่าน) มีขอบที่เหลืออยู่บางส่วนเชื่อมต่อโหนดอื่น ๆ ความแตกต่างระหว่าง cross edge และ edge forward คืออะไร? จากวิกิพีเดีย: ตามต้นไม้ที่ขยายออกไปนี้ขอบของกราฟต้นฉบับสามารถแบ่งออกเป็นสามคลาส: ไปข้างหน้าซึ่งชี้จากโหนดของต้นไม้ไปยังหนึ่งในลูกหลานของมันขอบหลังซึ่งชี้จากโหนดหนึ่งไปยังบรรพบุรุษของมัน และขอบไขว้ซึ่งทำไม่ได้ บางครั้งขอบของต้นไม้ขอบซึ่งอยู่ในต้นไม้ที่ประกอบไปด้วยตัวเองถูกจำแนกออกจากขอบข้างหน้า หากกราฟต้นฉบับไม่ได้ถูกบอกทิศทางขอบทั้งหมดจะเป็นขอบต้นไม้หรือขอบด้านหลัง ขอบที่ไม่ได้ใช้ในการข้ามผ่านที่ชี้จากโหนดหนึ่งไปยังอีกโหนดหนึ่งนั้นสร้างความสัมพันธ์แบบพ่อแม่ลูกหรือไม่

2
ทำไม DFS ถึงถูกพิจารณาให้มี
ตามบันทึกเหล่านี้ , DFSถือว่ามีความซับซ้อนของพื้นที่ที่เป็นปัจจัยที่แผ่กิ่งก้านของต้นไม้และมีความยาวสูงสุดของเส้นทางใด ๆ ในพื้นที่รัฐO ( b m )O(ขม.)O(bm)ขขbม.ม.m เป็นเหมือนกันกล่าวว่าในเรื่องนี้หน้าวิกิตำราบนไม่รู้ค้นหา ตอนนี้ "กล่องข้อมูล" ของบทความ Wikipedia บน DFSนำเสนอต่อไปนี้สำหรับความซับซ้อนของพื้นที่ของอัลกอริทึม: O ( | V| )O(|V|)O(|V|)หากกราฟทั้งหมดถูกสำรวจโดยไม่มีการทำซ้ำค้นหาความยาวพา ธ ที่ยาวที่สุดสำหรับกราฟโดยนัยโดยไม่ต้องกำจัดโหนดซ้ำโอ(O(O())) ซึ่งคล้ายกับสิ่งที่ฉันคิดว่ามีความซับซ้อนของพื้นที่ของ DFS เช่นโดยที่คือความยาวสูงสุดที่อัลกอริธึมถึงO ( m )O(ม.)O(m)ม.ม.m เหตุใดฉันจึงคิดว่าเป็นเช่นนี้ โดยพื้นฐานแล้วเราไม่จำเป็นต้องเก็บโหนดอื่น ๆ นอกเหนือจากโหนดของเส้นทางที่เรากำลังดูอยู่ในขณะนี้ดังนั้นจึงไม่มีประเด็นการคูณด้วยในการวิเคราะห์ที่จัดทำโดย Wikibook และบันทึกที่ฉันเรียกคุณ ถึง.ขขb ยิ่งไปกว่านั้นจากบทความนี้เกี่ยวกับIDA *โดยRichard Korfความซับซ้อนของพื้นที่ของ DFS คือโดยที่ถูกพิจารณาว่าเป็น "cutoff เชิงลึก"O ( d)O(d)O(d)ddd ดังนั้นความซับซ้อนของพื้นที่ที่ถูกต้องของ DFS คืออะไร? ฉันคิดว่ามันอาจขึ้นอยู่กับการนำไปใช้ดังนั้นฉันขอขอบคุณคำอธิบายเกี่ยวกับความซับซ้อนของพื้นที่สำหรับการนำไปปฏิบัติต่าง ๆ …

1
ค้นหาเส้นทาง k-shortest ระหว่างสองโหนด
รับ digraph ถ่วงน้ำหนัก G = V, EG=V,EG=V,Eและฟังก์ชั่นน้ำหนัก d( u , v )d(ยู,โวลต์)d(u,v)โดยปกติเราสามารถใช้อัลกอริทึมของ Dijkstra เพื่อรับเส้นทางที่สั้นที่สุด สิ่งที่ฉันสนใจคือทำอย่างไรจึงจะได้2ไม่มีวัน2nd2^{nd}เส้นทางที่สั้นที่สุด 3R d3Rd3^{rd}- สั้นที่สุดและอื่น ๆ คำถาม: มีอัลกอริทึมที่มีประสิทธิภาพในการรับเส้นทางที่สั้นที่สุดระหว่างสองโหนดในกราฟถ่วงน้ำหนักหรือไม่ มีอัลกอริธึมที่มีประสิทธิภาพในการรับเส้นทางที่สั้นที่สุดระหว่างสองโหนดในกราฟถ่วงน้ำหนักหรือไม่? คำตอบของทั้งคู่ก็โอเค แต่ฉันสงสัยว่าคำตอบของคำถามที่สองนั้นสามารถทำได้อย่างมีประสิทธิภาพมากกว่า kkk โทรหาคำตอบสำหรับคำถามแรก

3
เส้นทางที่ไม่ซ้ำในกราฟกำกับ
ฉันออกแบบอัลกอริทึมสำหรับการเรียนที่จะตรวจสอบหากนำกราฟที่ไม่ซ้ำกันด้วยความเคารพต่อยอดดังกล่าวว่าสำหรับการใด ๆมีที่มากที่สุดเส้นทางหนึ่งจากเพื่อUฉันเริ่มต้นด้วยการใช้ BFS (ค้นหาแบบกว้างแรก) เพื่อค้นหาเส้นทางที่สั้นที่สุดจาก v ไปยังจุดสุดยอดอีกจุดหนึ่งจากนั้นเรียกใช้ BFS อีกครั้งเพื่อดูว่าสามารถหาเส้นทางอื่นจาก v ถึง u ได้ไหม ฉันคิดว่ามันใช้เวลานานเกินไป ใครบ้างมีคำใบ้ว่าวิธีการแก้ปัญหาสามารถพบได้ด้วยเวลาการดำเนินการที่สั้นลง?โวลต์vvคุณ≠ โวลต์u≠vu \ne vโวลต์vvยูuu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.