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

14
อัลกอริธึมที่ดีที่สุดสำหรับการตรวจจับรอบในกราฟกำกับ
อัลกอริธึมที่มีประสิทธิภาพที่สุดในการตรวจจับรอบทั้งหมดภายในกราฟที่กำกับคืออะไร? ฉันมีกราฟกำกับที่แสดงถึงกำหนดการงานที่ต้องดำเนินการงานเป็นโหนดและการพึ่งพาเป็นขอบ ฉันต้องการตรวจสอบกรณีข้อผิดพลาดของวัฏจักรภายในกราฟนี้ซึ่งนำไปสู่การพึ่งพาแบบวนรอบ

16
เมื่อใดจึงจะใช้การค้นหาความลึกครั้งแรก (DFS) กับการค้นหาความกว้างระดับแรก (BFS) [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการในวันที่ 13 ที่ผ่านมา ปรับปรุงคำถามนี้ ฉันเข้าใจความแตกต่างระหว่าง DFS และ BFS แต่ฉันสนใจที่จะรู้ว่ามันใช้งานได้ดีกว่ากันหรือไม่? ใครช่วยยกตัวอย่างของวิธีการที่ DFS จะกล้าหาญ BFS และในทางกลับกัน?

17
การค้นหารอบทั้งหมดในกราฟกำกับ
ฉันจะค้นหา (วนซ้ำ) รอบทั้งหมดในกราฟที่มีทิศทางจาก / ไปยังโหนดที่ระบุได้อย่างไร ตัวอย่างเช่นฉันต้องการสิ่งนี้: A->B->A A->B->C->A แต่ไม่ใช่: B-> C-> B

10
เมื่อใดที่ฉันควรใช้ Kruskal เมื่อเทียบกับ Prim (และในทางกลับกัน)
ฉันสงสัยว่าเมื่อใดควรใช้อัลกอริทึมของ Primและเมื่อKruskalค้นหาต้นไม้ที่ทอดยาวที่สุด พวกเขาทั้งสองมี logics ง่าย ๆ กรณีเลวร้ายที่สุดที่เหมือนกันและความแตกต่างเพียงอย่างเดียวคือการนำไปใช้ซึ่งอาจเกี่ยวข้องกับโครงสร้างข้อมูลที่แตกต่างกันเล็กน้อย ดังนั้นปัจจัยการตัดสินใจคืออะไร?

8
เหตุใดความซับซ้อนของเวลาของทั้ง DFS และ BFS O (V + E)
อัลกอริทึมพื้นฐานสำหรับ BFS: set start vertex to visited load it into queue while queue not empty for each edge incident to vertex if its not visited load into queue mark vertex ดังนั้นฉันคิดว่าความซับซ้อนของเวลาจะเป็น: v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges) vจุดยอด1ถึงอยู่ที่ไหนn ประการแรกสิ่งที่ฉันพูดถูกต้องหรือไม่? ประการที่สองสิ่งนี้เป็นอย่างไรO(N …

16
อัลกอริทึมกราฟเพื่อค้นหาการเชื่อมต่อทั้งหมดระหว่างจุดยอดสองจุดตามอำเภอใจ
ฉันกำลังพยายามกำหนดอัลกอริทึมด้านเวลาที่มีประสิทธิภาพสูงสุดเพื่อทำงานที่อธิบายไว้ด้านล่างนี้ ฉันมีชุดบันทึก สำหรับชุดระเบียนนี้ฉันมีข้อมูลการเชื่อมต่อซึ่งระบุว่าคู่ของระเบียนจากชุดนี้เชื่อมต่อกันอย่างไร โดยทั่วไปแล้วสิ่งนี้แสดงถึงกราฟที่ไม่ได้กำหนดทิศทางโดยบันทึกเป็นจุดยอดและข้อมูลการเชื่อมต่อที่ขอบ ระเบียนทั้งหมดในชุดมีข้อมูลการเชื่อมต่อ (เช่นไม่มีระเบียนเด็กกำพร้าอยู่แต่ละระเบียนในชุดจะเชื่อมต่อกับระเบียนอื่น ๆ ในชุด) ฉันต้องการเลือกสองระเบียนจากชุดและสามารถแสดงเส้นทางแบบง่ายทั้งหมดระหว่างระเบียนที่เลือกได้ โดย "เส้นทางธรรมดา" ฉันหมายถึงเส้นทางที่ไม่มีการบันทึกซ้ำในเส้นทาง (เช่นเส้นทาง จำกัด เท่านั้น) หมายเหตุ: ทั้งสองระเบียนที่เลือกจะแตกต่างกันเสมอ (เช่นจุดเริ่มต้นและจุดสิ้นสุดจะไม่เหมือนกันไม่มีรอบ) ตัวอย่างเช่น: หากฉันมีบันทึกต่อไปนี้: A, B, C, D, E. และสิ่งต่อไปนี้แสดงถึงการเชื่อมต่อ: (A, B), (A, C), (B, A) (B, D), (B, E), (B, F) (C, A), (C, E) (C, F) (D, B), (E, C), (E, F), …

4
ฉันจะหาเส้นทางที่สั้นที่สุดระหว่างเป้าหมายเคลื่อนที่ 100 ชิ้นได้อย่างไร (รวมการสาธิตสด)
พื้นหลัง ภาพนี้แสดงให้เห็นถึงปัญหา: ฉันควบคุมวงกลมสีแดงได้ เป้าหมายคือสามเหลี่ยมสีน้ำเงิน ลูกศรสีดำระบุทิศทางที่เป้าหมายจะเคลื่อนที่ ฉันต้องการรวบรวมเป้าหมายทั้งหมดในจำนวนขั้นต่ำ แต่ละเทิร์นฉันต้องเลื่อน 1 ก้าวไปทางซ้าย / ขวา / ขึ้นหรือลง แต่ละเทิร์นเป้าหมายจะเคลื่อนที่ 1 ก้าวตามทิศทางที่แสดงบนกระดาน การสาธิต ผมเคยใส่ขึ้นสาธิตของปัญหาที่นี่บน Google AppEngine ฉันจะสนใจมากถ้าใครสามารถเอาชนะคะแนนเป้าหมายได้เพราะนี่จะแสดงให้เห็นว่าอัลกอริทึมปัจจุบันของฉันไม่เหมาะสม (ควรพิมพ์ข้อความแสดงความยินดีหากคุณจัดการสิ่งนี้!) ปัญหา อัลกอริทึมปัจจุบันของฉันปรับขนาดได้ไม่ดีกับจำนวนเป้าหมาย เวลาเพิ่มขึ้นอย่างทวีคูณและสำหรับปลา 16 ตัวมันก็หลายวินาทีแล้ว ฉันต้องการคำนวณคำตอบสำหรับบอร์ดขนาด 32 * 32 และเป้าหมายเคลื่อนที่ 100 ชิ้น คำถาม อัลกอริทึมที่มีประสิทธิภาพคืออะไร (ตามหลักการแล้วใน Javascript) สำหรับการคำนวณจำนวนขั้นต่ำในการรวบรวมเป้าหมายทั้งหมด สิ่งที่ฉันพยายาม แนวทางปัจจุบันของฉันใช้การช่วยจำ แต่มันช้ามากและฉันไม่รู้ว่ามันจะสร้างทางออกที่ดีที่สุดได้หรือไม่ ฉันแก้ปัญหาย่อยของ "จำนวนขั้นต่ำในการรวบรวมชุดของเป้าหมายและจบลงที่เป้าหมายใดเป้าหมายหนึ่ง" ปัญหาย่อยได้รับการแก้ไขแบบวนซ้ำโดยการตรวจสอบแต่ละตัวเลือกสำหรับเป้าหมายก่อนหน้านี้ที่เคยไป ฉันคิดว่าเป็นการดีที่สุดเสมอที่จะรวบรวมชุดย่อยของเป้าหมายก่อนหน้านี้ให้เร็วที่สุดเท่าที่จะเป็นไปได้จากนั้นย้ายจากตำแหน่งที่คุณลงเอยไปยังเป้าหมายปัจจุบันโดยเร็วที่สุด (แม้ว่าฉันจะไม่รู้ว่านี่เป็นสมมติฐานที่ถูกต้องหรือไม่ก็ตาม) สิ่งนี้ส่งผลให้ n * …

9
ทำไม DFS และไม่ใช่ BFS ในการค้นหาวัฏจักรในกราฟ
DFS ส่วนใหญ่ใช้เพื่อค้นหาวัฏจักรในกราฟไม่ใช่ BFS เหตุผลใด? ทั้งสองสามารถค้นหาได้ว่ามีการเยี่ยมชมโหนดแล้วหรือไม่ในขณะที่ข้ามต้นไม้ / กราฟ

4
การค้นหาละแวกใกล้เคียง (cliques) ในข้อมูลถนน (กราฟ)
ฉันกำลังมองหาวิธีกำหนดย่านที่คุ้นเคยในเมืองโดยอัตโนมัติเป็นรูปหลายเหลี่ยมบนกราฟ คำจำกัดความของพื้นที่ใกล้เคียงของฉันมีสองส่วน: บล็อก : พื้นที่ที่รวมระหว่างถนนจำนวนหนึ่งซึ่งจำนวนถนน (ขอบ) และทางแยก (โหนด) เป็นอย่างน้อยสาม (สามเหลี่ยม) พื้นที่ใกล้เคียง : สำหรับบล็อกที่กำหนดบล็อกทั้งหมดที่อยู่ติดกับบล็อกนั้นและบล็อกนั้นโดยตรง ดูภาพประกอบนี้สำหรับตัวอย่าง: เช่นB4เป็นบล็อกที่กำหนดโดย 7 โหนดและ 6 ขอบเชื่อมต่อพวกเขา จากตัวอย่างส่วนใหญ่ที่นี่บล็อกอื่น ๆ จะถูกกำหนดโดย 4 โหนดและ 4 ขอบเชื่อมต่อพวกเขา นอกจากนี้เขตของB1รวมถึงB2 (และในทางกลับกัน) ในขณะที่B2ยังรวมถึงB3 ฉันใช้osmnxเพื่อรับข้อมูลสตรีทจาก OSM ใช้ osmnx และ networkx ฉันจะสำรวจกราฟเพื่อค้นหาโหนดและขอบที่กำหนดแต่ละบล็อกได้อย่างไร สำหรับแต่ละบล็อกฉันจะค้นหาบล็อกที่อยู่ติดกันได้อย่างไร ฉันกำลังทำงานกับชิ้นส่วนของรหัสที่ใช้กราฟและพิกัด (ละติจูด, ลองจิจูด) เป็นอินพุตระบุบล็อกที่เกี่ยวข้องและส่งกลับรูปหลายเหลี่ยมสำหรับบล็อกนั้นและพื้นที่ใกล้เคียงตามที่กำหนดไว้ด้านบน นี่คือรหัสที่ใช้ทำแผนที่: import osmnx as ox import networkx as nx …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.