คำถามติดแท็ก graphs

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

1
ระยะทางที่สั้นที่สุดเปลี่ยนไปมากแค่ไหนเมื่อเพิ่มขอบเข้ากับกราฟ
ให้เป็นกราฟที่สมบูรณ์, มีน้ำหนัก, ไม่ระบุทิศทาง เราสร้างกราฟสองG ' = ( V , E ' )โดยการเพิ่มขอบหนึ่งโดยหนึ่งจากEไปE ' เราเพิ่มขอบΘ ( | V | )ลงในG ′ทั้งหมดG=(V,E)G=(V,E)G=(V,E)G′=(V,E′)G′=(V,E′)G'=(V, E')EEEE′E′E'Θ(|V|)Θ(|V|)\Theta(|V|)G′G′G' ทุกครั้งที่เราเพิ่มอีกหนึ่งขอบเพื่อE 'เราจะพิจารณาในระยะทางที่สั้นที่สุดระหว่างคู่ทั้งหมดใน( V , E ' )และ( V , E ' ∪ { ( U , V ) } ) เรานับจำนวนของระยะทางที่สั้นที่สุดเหล่านี้มีการเปลี่ยนแปลงเป็นผลมาจากการเพิ่ม( U , V ) ให้C iเป็นระยะทางที่สั้นที่สุดที่เปลี่ยนไปเมื่อเราเพิ่มi(u,v)(u,v)(u,v)E′E′E'(V,E′)(V,E′)(V, E')(V,E′∪{(u,v)})(V,E′∪{(u,v)})(V, E' …


2
เริ่มวงจรเชิงลบโดยใช้ Bellman Ford
ฉันต้องหาวัฏจักรเชิงลบในกราฟถ่วงน้ำหนักกำกับ ฉันรู้ว่าอัลกอรึทึมของ Bellman Ford ทำงานอย่างไรและมันบอกฉันว่ามีรอบลบหรือไม่ แต่มันไม่ได้ตั้งชื่ออย่างชัดเจน ฉันจะได้รับเส้นทางจริงของวัฏจักรอย่างไรv 1 , v 2 , … v k , v 1v1,v2,…vk,v1v1, v2, \ldots vk, v1 หลังจากใช้อัลกอริทึมมาตรฐานเราได้ทำการวนซ้ำแล้วและไม่ควรทำการปรับปรุงเพิ่มเติม หากเรายังคงสามารถลดระยะห่างไปยังโหนดได้จะมีวัฏจักรเชิงลบเกิดขึ้นn - 1n-1n-1 ความคิดของฉันคือ: เนื่องจากเรารู้ว่าขอบที่ยังสามารถปรับปรุงเส้นทางและเรารู้ว่าบรรพบุรุษของแต่ละโหนดเราสามารถติดตามวิธีการของเรากลับจากขอบนั้นจนกว่าเราจะได้พบกันอีกครั้ง ตอนนี้เราควรมีวัฏจักรของเรา น่าเศร้าที่ฉันไม่พบบทความใด ๆ ที่บอกฉันว่าสิ่งนี้ถูกต้องหรือไม่ ดังนั้นมันใช้งานได้จริงเช่นนั้น? แก้ไข:ตัวอย่างนี้พิสูจน์ว่าความคิดของฉันไม่ถูกต้อง ได้รับรูปแบบของกราฟต่อไปนี้เราทำงานยามฟอร์ดจากโหนด1111 เราจะดำเนินการขอบในลำดับD หลังจากทำซ้ำเราจะได้รับระยะทางโหนด:n - 1 1 : - 5 2 : - 30 3 : - …

2
ค้นหาอย่างน้อยสองเส้นทางที่มีความยาวเท่ากันในกราฟกำกับ
สมมติว่าเรามีที่กำกับกราฟและสองโหนดและBฉันต้องการทราบว่ามีอัลกอริทึมสำหรับคำนวณปัญหาการตัดสินใจต่อไปนี้หรือไม่:A BG=(V,E)G=(V,E)G=(V,E)AAABBB มีอย่างน้อยสองเส้นทางระหว่างและที่มีความยาวเท่ากันหรือไม่?BAAABBB แล้วความซับซ้อนล่ะ? ฉันจะแก้มันในเวลาพหุนามได้หรือไม่? ฉันต้องการเพิ่มข้อ จำกัด ใหม่บนกราฟบางทีปัญหาอาจแก้ไขได้มากกว่า ในเมทริกซ์คำคุณศัพท์ทุกคอลัมน์ไม่ว่างเปล่า ดังนั้นทุกโหนดมีลูกศรอย่างน้อยหนึ่งลูกที่อินพุตและมีอย่างน้อยหนึ่งโหนดที่เชื่อมต่อกับตัวเอง ดังนั้นถ้าโหนดคือโหนด th ดังนั้นคือขอบในกราฟ( ฉัน, ฉัน)iii(i,i)(i,i)(i,i)

2
ต้นไม้ที่ถูกลิงค์ตัดเคยถูกใช้ในทางปฏิบัติสำหรับการคำนวณการไหลสูงสุดหรือการใช้งานอื่น ๆ หรือไม่?
อัลกอริธึมการไหลสูงสุดจำนวนมากที่ฉันเห็นโดยทั่วไปว่านำไปใช้งานอัลกอริทึมของ Dinic พุช relabel และอื่น ๆ สามารถทำให้ต้นทุนเวลาของพวกเขาดีขึ้นด้วยการใช้ต้นไม้ไดนามิก (หรือที่รู้จักกันในชื่อต้นไม้ตัดลิงก์) Push relabel ทำงานในหรือหรือตามปกติ แต่มีต้นไม้แบบไดนามิกO ( V2E)O(V2E)O(V^2E)O ( V3)O(V3)O(V^3)O ( V2E--√)O(V2E)O(V^2\sqrt{E})O ( VEเข้าสู่ระบบ( ฉบับที่2/ E) )O(VElog⁡(V2/E))O(VE \log(V^2/E)) อัลกอริทึมของ Dinic ทำงานในแต่ด้วยต้นไม้แบบไดนามิกO ( V2E)O(V2E)O(V^2E)O ( VEเข้าสู่ระบบ( ฉบับที่) )O(VElog⁡(V))O(VE\log(V)) อย่างไรก็ตามการใช้งานจริงของอัลกอริธึม max-flow ในไลบรารีส่วนใหญ่ดูเหมือนจะไม่ใช้ประโยชน์จากโครงสร้างข้อมูลนี้ ต้นไม้แบบไดนามิกเคยใช้ในทางปฏิบัติสำหรับการคำนวณการไหลสูงสุดหรือไม่ หรือพวกเขามีค่าใช้จ่ายมากเกินไปที่จะเป็นประโยชน์สำหรับขนาดของปัญหาโลกแห่งความจริง? มีโดเมนปัญหาอื่น ๆ อีกหรือไม่ที่มีการใช้การเชื่อมโยงทรี? คำถามนี้เกี่ยวข้องกับคำถามที่ฉันถามใน cstheory: มีอัลกอริธึม Maximum Flow อันทันสมัยที่สุดหรือไม่?

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

2
เส้นทางที่สั้นที่สุดบนกราฟที่ไม่ได้บอกทิศทาง
ดังนั้นฉันคิดว่าคำถามนี้ (แต่ค่อนข้างพื้นฐาน) อยู่ที่นี่: สมมติว่าฉันมีกราฟขนาด 100 โหนดในรูปแบบ 10x10 (คิดว่ากระดานหมากรุก) กราฟไม่ได้ถูกบอกทิศทางและไม่ได้ถ่วงน้ำหนัก การเคลื่อนที่ผ่านกราฟเกี่ยวข้องกับการเคลื่อนไปข้างหน้าสามช่องทางและข้างหนึ่งไปทางซ้ายหรือขวา (คล้ายกับว่าหมากรุกอัศวินเคลื่อนที่ผ่านกระดาน) เมื่อกำหนดโหนดเริ่มต้นที่แน่นอนแล้วเราจะหาเส้นทางที่สั้นที่สุดไปยังโหนดอื่น ๆ บนกระดานได้อย่างไร ฉันจินตนาการว่าจะมีเพียงขอบระหว่างโหนดที่เคลื่อนที่ได้ ดังนั้นจากข้อมูลนี้ฉันต้องการหาเส้นทางที่สั้นที่สุดจากโหนดเริ่มต้นไปยังโหนดสุดท้าย ความคิดเริ่มต้นของฉันคือขอบแต่ละข้างนั้นมีน้ำหนัก 1 น้ำหนักอย่างไรก็ตามกราฟไม่ได้ถูกบอกทิศทางดังนั้น Djikstras จึงไม่เหมาะอย่างยิ่ง ดังนั้นฉันตัดสินใจที่จะทำโดยใช้รูปแบบที่เปลี่ยนแปลงของการค้นหาความลึกครั้งแรก อย่างไรก็ตามฉันไม่สามารถทำให้ชีวิตของฉันนึกภาพได้ว่าจะหาเส้นทางที่สั้นที่สุดโดยใช้การค้นหาได้อย่างไร อีกสิ่งหนึ่งที่ฉันพยายามคือการใส่กราฟในรูปแบบต้นไม้โดยมีจุดเริ่มต้นเป็นรูทจากนั้นเลือกผลลัพธ์ที่ตื้นที่สุด (หมายเลขแถวต่ำสุด) ที่ให้โหนดปลายทางที่ต้องการแก่ฉัน ... สิ่งนี้ใช้ได้ แต่ก็ไม่มีประสิทธิภาพอย่างเหลือเชื่อ จะไม่ทำงานสำหรับกราฟขนาดใหญ่ ไม่มีใครมีความคิดใด ๆ ที่อาจชี้ให้ฉันไปในทิศทางที่ถูกต้องในเรื่องนี้? ขอบคุณมาก. (ฉันพยายามใส่ภาพกราฟ แต่ไม่สามารถทำได้เนื่องจากชื่อเสียงที่ต่ำของฉัน)

2
กราฟ unipathic สามารถมีได้กี่ขอบ
กราฟ unipathic เป็นกราฟกำกับที่มีเส้นทางที่ง่ายที่สุดอย่างใดอย่างหนึ่งจากจุดสุดยอดหนึ่งไปยังจุดสุดยอดอื่น ๆ กราฟ Unipathic สามารถมีรอบ ตัวอย่างเช่นรายการที่เชื่อมโยงเป็นทวีคูณ (ไม่ใช่แบบวงกลม!) เป็นกราฟแบบ unipathic; ถ้ารายการมีองค์ประกอบกราฟมีn - 1รอบของความยาว 2 รวมเป็น2 ( n - 1 )nnnn - 1n−1n-12 ( n - 1 )2(n−1)2(n-1) จำนวนขอบสูงสุดในกราฟ unipathic ที่มีจุดยอดคืออะไร ขอบเขตแบบเชิงเส้นกำกับจะทำ (เช่นO ( n )หรือΘ ( n 2 ) )nnnO ( n )O(n)O(n)Θ ( n2)Θ(n2)\Theta(n^2) แรงบันดาลใจจากการค้นหาเส้นทางที่สั้นที่สุดในกราฟ unipathic ชั่งน้ำหนัก ; …

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

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

2
วิธีการใช้อัลกอริทึม AO *
ฉันสังเกตเห็นว่ามีการใช้โครงสร้างข้อมูลที่แตกต่างกันเมื่อเราใช้อัลกอริทึมการค้นหา ตัวอย่างเช่นเราใช้คิวเพื่อดำเนินการค้นหาอย่างกว้างแรกวางซ้อนเพื่อใช้การค้นหาเชิงลึกครั้งแรกและ min-heaps เพื่อใช้อัลกอริทึม A *อัลกอริทึม ในกรณีเหล่านี้เราไม่จำเป็นต้องสร้างแผนผังการค้นหาอย่างชัดเจน แต่ฉันไม่สามารถหาโครงสร้างข้อมูลที่ง่ายต่อการจำลองขั้นตอนการค้นหาของAO * อัลกอริทึม ฉันอยากรู้ว่าการสร้างแผนผังการค้นหาเป็นวิธีเดียวที่จะใช้อัลกอริทึม AO * หรือไม่ ใครช่วยให้ฉันมีการใช้งานที่มีประสิทธิภาพ?

2
คำนวณ max-flow จาก min-cut
เรารู้ว่าการคำนวณการตอบสนองต่อการไหลสูงสุด การตัดเครือข่ายขั้นต่ำที่มีความสามารถเทียบเท่ากัน cf เลย สูงสุดไหลทฤษฎีบทนาทีตัด เรามีอัลกอริทึม (มีประสิทธิภาพมากกว่าหรือน้อยกว่า) สำหรับการคำนวณการไหลสูงสุดและการคำนวณการตัดต่ำสุดเนื่องจากการไหลสูงสุดนั้นไม่ยากหรือไม่แพงเลย แต่สิ่งที่ตรงกันข้าม เมื่อตัดน้อยที่สุดเราจะกำหนดกระแสสูงสุดได้อย่างไร โดยไม่ต้องแก้ไข Max-Flow ตั้งแต่เริ่มต้นแน่นอนและเร็วกว่านั้นเช่นกัน ความคิดบางอย่าง: จากการตัดขั้นต่ำเรารู้ค่าการไหลสูงสุด ฉันไม่เห็นว่าข้อมูลนี้ช่วยให้วิธีการมาตรฐานเพิ่มเส้นทางและ push-relabel ได้อย่างไรแม้ว่าการปรับตัวหลังดูเหมือนจะมีเหตุผลมากขึ้นเล็กน้อย เราไม่สามารถใช้การตัดต่ำสุดเพื่อแยกเครือข่ายออกเป็นสองส่วนและเรียกคืนเนื่องจากจะไม่ทำให้ปัญหาในกรณีเลวร้ายที่สุด (ถ้าพาร์ติชันหนึ่งเป็นแบบซิงเกิล) นอกจากนี้เราจะไม่ลดขั้นต่ำของอินสแตนซ์ขนาดเล็กลง การทราบคุณค่าของความเร็วการไหลสูงสุดที่แก้ไข Max-Flow LP อาจจะผ่านเงื่อนไขความหย่อนเสริมหรือไม่?

4
อัลกอริทึมของ Dijkstra บนกราฟขนาดใหญ่
ฉันคุ้นเคยกับ Dijkstra มากและมีคำถามเฉพาะเกี่ยวกับอัลกอริทึม หากฉันมีกราฟขนาดใหญ่เช่น 3.5 พันโหนด (ข้อมูล OpenStreetMap ทั้งหมด) จากนั้นฉันจะไม่สามารถมีกราฟในหน่วยความจำได้อย่างชัดเจนดังนั้นกราฟจะถูกเก็บไว้ในดิสก์ในฐานข้อมูล มีห้องสมุดสำหรับคำนวณเส้นทางที่สั้นที่สุดบนกราฟดังกล่าว พวกเขาทำเช่นนี้ได้อย่างไร โดยเฉพาะพวกเขาจะโหลดส่วนที่ต้องการของกราฟเพื่อเรียกใช้อัลกอริทึมของ Dijkstra ได้อย่างไร การดึงรายการ adjacency ของแต่ละจุดสุดยอดที่เข้าชมจะต้องใช้ฐานข้อมูล 1,500 แบบสอบถามต่อ 10,000 โหนดตามข้อมูลสถิติของฉันดังนั้นจึงไม่ใช่วิธีการที่ชัดเจน นั่นจะช้าเกินไป พวกเขาทำมันได้อย่างไร? ฉันพยายามที่จะใช้มันด้วยตัวเอง

3
ขนาดที่เล็กที่สุดของการทำสัญญา DAG เป็น DAG ใหม่
เรามี DAG เรามีฟังก์ชั่นบนโหนด (พูดอย่างอิสระเรานับจำนวนโหนด) เราต้องการสร้างกราฟกำกับใหม่ด้วยกฎเหล่านี้:F:V→NF:V→ยังไม่มีข้อความF\colon V\to \mathbb N เฉพาะโหนดที่มีหมายเลขเท่ากันเท่านั้นที่สามารถทำการต่อสัญญาในโหนดใหม่เดียวกันได้ Y' (อย่างไรก็ตาม, .)F(x)≠F(y)⇒x′≠y′F(x)≠F(Y)⇒x'≠Y'F(x) \neq F(y) \Rightarrow x' \neq y'x′≠y′⇏F(x)≠F(y)x'≠Y'⇏F(x)≠F(Y)x' \neq y'\nRightarrow F(x) \neq F(y) เราได้เพิ่มทุกขอบเก่าระหว่างโหนดใหม่: (x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,Y)∈E∧x'≠Y'⟺(x',Y')∈E'(x,y) \in E \land x' \neq y' \iff (x',y')\in E'E' กราฟใหม่นี้ยังคงเป็น DAG อะไรคือสิ่งที่น้อยที่สุด|V′||V'||V'|? อัลกอริทึมคืออะไรสร้างกราฟใหม่ที่น้อยที่สุด

4
กราฟมีต้นไม้สองสามครั้งที่แตกต่างกันเล็กน้อย?
ฉันกำลังพยายามหาวิธีที่มีประสิทธิภาพในการตรวจสอบว่ากราฟที่ระบุ G มีต้นไม้ทอดข้ามน้อยที่สุดสองแบบหรือไม่ ฉันกำลังพยายามหาวิธีในการตรวจสอบว่ามีต้นไม้ที่ขยายเล็ก ๆ น้อย ๆ 3 แบบหรือไม่ โซลูชันไร้เดียงสาที่ฉันคิดว่ากำลังเรียกใช้อัลกอริทึมของ Kruskal เพียงครั้งเดียวและค้นหาน้ำหนักรวมของต้นไม้ที่ทอดน้อยที่สุด จากนั้นนำขอบออกจากกราฟและเรียกใช้อัลกอริทึมของ Kruskal อีกครั้งและตรวจสอบว่าน้ำหนักของต้นไม้ใหม่นั้นเป็นน้ำหนักของต้นไม้ที่ขยายเล็กสุดดั้งเดิมหรือไม่และสำหรับแต่ละขอบของกราฟ รันไทม์คือ O (| V || E | log | V |) ซึ่งไม่ดีเลยและฉันคิดว่ามีวิธีที่ดีกว่าที่จะทำ ข้อเสนอแนะใด ๆ ที่จะเป็นประโยชน์ขอบคุณล่วงหน้า

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