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

โครงสร้างทางคณิตศาสตร์ที่มีคอลเลกชันของจุดยอดหรือ 'โหนด' และชุดของขอบที่เชื่อมต่อคู่ของจุดยอด

8
ควรใช้ DAG (Directed Acyclic Graph) ในการเขียนโปรแกรมเมื่อใด
ฉันเพิ่งพบกรอบชื่อecto ในเฟรมเวิร์กนี้ส่วนประกอบพื้นฐานที่ชื่อว่า"พลาสม่า"ซึ่งเป็นกราฟเชิงเส้นกำกับของ ecto ใน ecto พลาสซึมสามารถดำเนินการได้โดยตัวจัดตารางเวลาของ ecto ฉันสงสัยว่ากลไกนี้มีประโยชน์อย่างไรและในสถานการณ์อื่นใดที่เราสามารถใช้ประโยชน์จากแนวคิดของ DAG ได้?

3
จะค้นหาเส้นทางที่สั้นที่สุดที่มีโหนดหนอนได้อย่างไร
นี่คือตัวอย่างของสิ่งที่ฉันต้องการทำผ่านรหัส ฉันรู้ว่าคุณสามารถใช้การค้นหาจุดกระโดดได้อย่างง่ายดายจากโหนดสีเขียวไปยังโหนดสีแดงโดยไม่มีปัญหาหรือแม้แต่ A * แต่คุณจะคำนวณสิ่งนี้อย่างไรกับการแปรปรวน ในภาพคุณจะเห็นว่ามันใช้เวลาเพียง 8 ย้ายจากโหนดสีเขียวไปยังโหนดสีแดงเมื่อถ่ายเส้นทางสีฟ้า เส้นทางสีน้ำเงินย้ายตำแหน่งของคุณจากโหนดสีม่วงไปยังตำแหน่งถัดไปทันที พื้นที่ตรงกลางที่มีค่าใช้จ่าย 2 การเคลื่อนไหวเป็นจุดระหว่างสองโซน warp ที่คุณต้องย้ายไป เห็นได้ชัดว่าเร็วกว่าที่จะใช้เส้นทางสีฟ้าเนื่องจากคุณจะต้องย้ายครึ่งหนึ่ง (ประมาณ) เท่า ๆ กับเส้นทางสีเหลือง แต่ฉันจะทำสิ่งนี้อย่างไรในเชิงโปรแกรม? เพื่อจุดประสงค์ในการแก้ปัญหานี้สมมติว่ามี "วาร์ป" สีม่วงหลายรอบกราฟที่คุณสามารถใช้งานได้และเรารู้ว่าจุดสีม่วงแต่ละจุดจะโค้งงอและตรงไหนบนกราฟ วาร์ปสีม่วงบางตัวเป็นแบบสองทิศทางและบางอันไม่ใช่ความหมายบางครั้งคุณสามารถป้อนวาร์ปจากด้านหนึ่ง แต่ไม่กลับไปหลังจากการแปรปรวน ฉันคิดเกี่ยวกับวิธีแก้ปัญหาและสรุปเพียงว่าฉันจะสามารถคำนวณปัญหาได้โดยการตรวจสอบระยะทางไปยังจุดแปรปรวนแต่ละจุด (ลบจุดเดียวทิศทาง) และความแตกต่างระหว่างจุดเหล่านั้นและจุดที่อยู่ใกล้พวกเขา . โปรแกรมจะต้องคิดออกว่ามันจะมีประโยชน์มากกว่าที่จะใช้วิปริตที่สองแทนที่จะเดินจากการกระโดดครั้งแรก ดังนั้นแทนที่จะเคลื่อนที่ 6 จุดจากนั้นแปรปรวนจากนั้นย้ายส่วนที่เหลืออีก 8 ก้าวด้วยการเดินเท้า (ซึ่งเร็วกว่าการไม่ใช้ warps เลย) จะใช้การเคลื่อนไหว 6 ครั้งจากนั้นทั้งสองเดินไปที่วิปริตสอง แก้ไข:ฉันรู้ว่าเส้นทางสีน้ำเงินจะใช้เวลา 12 การเคลื่อนไหวแทนที่จะเป็น 8 แต่คำถามยังคงเหมือนเดิม

3
อัลกอริทึมการจัดกลุ่มกราฟที่มีประสิทธิภาพ
ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพเพื่อค้นหากลุ่มบนกราฟขนาดใหญ่ (มีจุดยอดประมาณ 5,000 และ 10,000 เส้น) จนถึงตอนนี้ฉันใช้อัลกอริทึม Girvan – Newman ที่นำมาใช้ในไลบรารี Java JUNG แต่มันค่อนข้างช้าเมื่อฉันพยายามลบขอบจำนวนมาก คุณช่วยแนะนำฉันเป็นทางเลือกที่ดีกว่าสำหรับกราฟขนาดใหญ่ได้หรือไม่?

7
คุณทดสอบโค้ดหน่วยโดยใช้โครงสร้างกราฟได้อย่างไร
ฉันกำลังเขียนโค้ด (เรียกซ้ำ) ที่ใช้การนำทางกราฟการขึ้นต่อกันเพื่อค้นหารอบหรือความขัดแย้งในการอ้างอิง อย่างไรก็ตามฉันไม่แน่ใจว่าจะทดสอบหน่วยนี้ได้อย่างไร ปัญหาคือหนึ่งในข้อกังวลหลักของเราคือการจัดการโค้ดบนโครงสร้างกราฟที่น่าสนใจทั้งหมดที่สามารถเกิดขึ้นได้และทำให้แน่ใจว่าโหนดทั้งหมดจะได้รับการจัดการอย่างเหมาะสม ในขณะที่โดยปกติแล้วจะครอบคลุม 100% line หรือ branch ก็เพียงพอที่จะมั่นใจได้ว่าโค้ดบางตัวทำงานได้ดี แต่ก็ให้ความรู้สึกเหมือนมี 100% path path ที่คุณยังมีข้อสงสัยอยู่ ดังนั้นวิธีการเกี่ยวกับการเลือกโครงสร้างกราฟสำหรับกรณีทดสอบมีความมั่นใจว่ารหัสของพวกเขาสามารถจัดการกับพีชคณิตที่เป็นไปได้ทั้งหมดที่คุณจะพบในข้อมูลโลกแห่งความเป็นจริง ป.ล. -ถ้ามันสำคัญขอบทั้งหมดในกราฟของฉันจะมีป้ายกำกับว่า "ต้องมี" xor "ไม่สามารถมี" และไม่มีวัฏจักรเล็กน้อยและมีเพียงขอบเดียวระหว่างสองโหนด PPS-คำสั่งปัญหาเพิ่มเติมนี้เดิมถูกโพสต์โดยผู้เขียนคำถามในความคิดเห็นด้านล่าง: For all vertices N in forest F, for all vertices M, in F, such that if there are any walks between N and M they all …

6
เยี่ยมชมจุดบนเส้นจำนวนในขณะที่ลดค่าใช้จ่ายที่ไม่เกี่ยวข้องกับระยะทาง
ฉันต้องการความช่วยเหลือในปัญหา ICM ACM นี้ แนวคิดปัจจุบันของฉันคือการสร้างแบบจำลองนี้เป็นปัญหาเส้นทางที่สั้นที่สุดซึ่งอธิบายไว้ในคำชี้แจงปัญหา ปัญหา มีN = 1000ภาชนะบรรจุกากนิวเคลียร์ที่ตั้งอยู่ตามแนวเส้นจำนวน 1-D ที่แตกต่างจากตำแหน่งยกเว้น-500,000 to 500,000 x=0บุคคลได้รับมอบหมายให้รวบรวมถังขยะทั้งหมด แต่ละวินาทีที่ไม่ได้เก็บขยะก็จะปล่อยรังสีออกมา 1 หน่วย บุคคลนั้นเริ่มต้นที่x = 0และสามารถเคลื่อนย้าย1หน่วยทุกวินาทีและการรวบรวมขยะต้องใช้เวลาเล็กน้อย เราต้องการค้นหาปริมาณรังสีขั้นต่ำที่ปล่อยออกมาขณะรวบรวมภาชนะทั้งหมด ตัวอย่างอินพุต: 4[-12, -2, 3, 7]ตู้คอนเทนเนอร์ที่ตั้งอยู่ที่ คำสั่งที่ดีที่สุดในการรวบรวมภาชนะเหล่านี้คือ[-2, 3, 7, -12]สำหรับการปล่อย50หน่วยขั้นต่ำ คำอธิบาย: บุคคลนั้นจะไป-2ใน 2 วินาทีและในช่วงเวลา2 unitsของการแผ่รังสีนั้นจะถูกปล่อยออกมา จากนั้นเขาก็ไปที่3(ระยะทาง:) 5เพื่อให้ถังปล่อย2 + 5 = 7หน่วยรังสี เขาใช้เวลา4ไม่กี่วินาทีที่จะได้รับไปx = 7ที่บาร์เรลที่ได้ปล่อยออก2 + 5 + 4 = 11หน่วย …
18 algorithms  graph 

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

5
อัลกอริทึมในการกำหนดเส้นทางที่เร็วที่สุด?
สมมติว่าเราไปจาก 1 ถึง 5 เส้นทางที่สั้นที่สุดจะเป็น 1-4-3-5 (รวม: 60 กม.) เราสามารถใช้อัลกอริทึมของ Dijkstraเพื่อทำสิ่งนั้น ตอนนี้ปัญหาคือเส้นทางที่สั้นที่สุดไม่ใช่เส้นทางที่เร็วที่สุดเสมอไปเนื่องจากการจราจรติดขัดหรือปัจจัยอื่น ๆ ตัวอย่างเช่น: เป็นที่ทราบกันว่า 1-2 มีการจราจรติดขัดบ่อยดังนั้นควรหลีกเลี่ยง ทันใดนั้นอุบัติเหตุทางรถยนต์ก็เกิดขึ้นในช่วง 4-3 ดังนั้นจึงควรหลีกเลี่ยงด้วย ฯลฯ ... ดังนั้นอาจเป็นไปได้ว่าเราสามารถเร่งความเร็วบนเส้นทาง 1-4-5 เนื่องจากไม่มีการจราจรติดขัด / อุบัติเหตุดังนั้นจะมาที่ 5 เร็วขึ้น นั่นเป็นแนวคิดทั่วไปและฉันยังไม่ได้คิดถึงรายละเอียดเพิ่มเติม มีอัลกอริทึมในการแก้ปัญหานี้หรือไม่?
17 graph  dijkstra 

1
วิธีการเรียนรู้แบบ Heuristic สำหรับการนำ DIFF แบบยืดหยุ่นมาใช้
ฉันได้สร้างการใช้ DIFF เพื่อเปรียบเทียบการแก้ไขเอกสารในที่ทำงาน มันขึ้นอยู่กับมี O (ND) ความแตกต่างขั้นตอนวิธีการและรูปแบบของมัน สิ่งหนึ่งที่มีความสำคัญคือการบันทึกรายการการเปลี่ยนแปลงและตีความให้เป็นข้อความที่มนุษย์อ่านได้ ในขณะที่อัลกอริทึมในปัจจุบันมีประสิทธิภาพมากมันก็มากจนยากที่จะขยาย คำถามสั้น ๆ ฉันคิดถึงการพยายามใช้ A * และฮิวริสติกที่เพิ่มบทลงโทษสำหรับ "การเปลี่ยน" แนวคิดที่จะทำให้เรียบโดยไม่จำเป็น "เพิ่มลบเพิ่มลบเพิ่มลบ" เพื่อให้ง่ายต่อการแยกวิเคราะห์เป็นสิ่งที่มนุษย์สามารถอ่านได้ โดยทั่วไปเปลี่ยนปัญหาเส้นทางที่สั้นที่สุดของฉันให้เป็นปัญหาเส้นทางที่ง่ายที่สุด และแน่นอนไม่สร้างผลลัพธ์ที่ "ลบทุกอย่างเพิ่มทุกอย่าง " เสมอ เสียงนี้สมเหตุสมผลหรือไม่ มีความสำคัญสำหรับการใช้ฮิวริสติกในการนำ DIFF ไปใช้หรือไม่? ฮิวริสติกคืออะไร? ปัญหา: หากมีการลบประโยคยาวและประโยคยาวอื่นถูกลบออก แต่พวกเขาแบ่งปันอย่างน้อยหนึ่งคำให้พูดว่า "with" การออกจากคำทั่วไปเพียงอย่างเดียว (ไม่ใช่ทั้งการเพิ่มและการลบ) จะเป็นการสร้างเส้นทางที่สั้นที่สุด อย่างไรก็ตามนี่เป็นเพียงแค่ทำให้งงงวยบริบทของการเปลี่ยนแปลงกับมนุษย์พยายามอ่านพิมพ์จากการเปลี่ยนแปลง ตัวอย่างด้วย DIFF ปัจจุบัน: ข้อความเก่า: สะอาด: Powerwash และเป่าให้แห้งด้วยอากาศในร้าน ข้อความใหม่: ล้าง: เช็ดด้วยอะซิโตนและผ้าสำลีฟรี เปลี่ยนรายการบันทึกย่อ: เปลี่ยน "Powerwash …

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

1
ฉันพูดถูกเกี่ยวกับความแตกต่างระหว่างอัลกอริทึม Floyd-Warshall, Dijkstra และ Bellman-Ford หรือไม่?
ฉันกำลังศึกษาทั้งสามและฉันได้ระบุข้อสรุปจากพวกเขาด้านล่าง มีใครบอกฉันได้ไหมว่าฉันเข้าใจถูกต้องเพียงพอหรือไม่ ขอบคุณ. อัลกอริทึมของ Dijkstra จะใช้เมื่อคุณมีแหล่งเดียวและคุณต้องการทราบเส้นทางที่เล็กที่สุดจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง แต่ล้มเหลวในกรณีเช่นนี้ อัลกอริทึมของ Floyd-Warshall ใช้เมื่อทุกโหนดใด ๆ สามารถเป็นต้นทางดังนั้นคุณต้องการให้ระยะทางที่สั้นที่สุดในการเข้าถึงโหนดปลายทางใด ๆ จากโหนดต้นทางใด ๆ สิ่งนี้จะล้มเหลวก็ต่อเมื่อมีรอบการลบเท่านั้น (นี่คือสิ่งที่สำคัญที่สุดฉันหมายถึงนี่คือสิ่งที่ฉันแน่ใจน้อยที่สุดเกี่ยวกับ :) 3.Bellman-Ford ใช้เหมือนของ Dijkstra เมื่อมีเพียงแหล่งเดียว สิ่งนี้สามารถรองรับน้ำหนักเชิงลบและการทำงานของมันเหมือนกับของ Floyd-Warshall ยกเว้นแหล่งเดียวใช่ไหม หากคุณต้องการดูอัลกอริธึมที่เกี่ยวข้องคือ (มารยาท Wikipedia): ยามฟอร์ด: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and …

1
อัลกอริทึมในการสร้างขอบและจุดยอดออกไปด้านนอกจากจุดเริ่มต้นที่มีหลายหลากสูงสุดเท่ากับ 3
ฉันกำลังสร้างเกม 2d สำหรับเว็บไซต์ที่มีขนาดใหญ่มาก (โดยทั่วไปมีขนาดใหญ่มาก) เริ่มแรกจักรวาลประกอบด้วยดาว 6 ดวงที่อยู่ห่างจากจุดกำเนิดเท่ากัน (0, 0) งานของฉันคือการสร้างดาวให้มากขึ้นซึ่งจะมี "เส้นทาง" (ขอบ) ที่เชื่อมต่อซึ่งกันและกัน ฉันจะออกแบบอัลกอริทึมที่ตรงตามข้อ จำกัด เหล่านี้ได้อย่างไร: ดวงดาวถูกสร้างแบบสุ่มออกไปด้านนอก (เช่น (x, y) พิกัดสำหรับดาวดวงใหม่จะค่อยๆออกไปด้านนอกจาก (0, 0) ในทุกทิศทางโดยเฉพาะในรูปแบบเกลียว ขอบจะไม่ข้าม แม้ว่าจะมีความแตกต่างบ้าง แต่ดาวดวงใหม่ไม่ควรอยู่ไกลหรืออยู่ใกล้ดาวดวงอื่นมากเกินไป (เช่นต้องมีรัศมีต่ำสุด) ไม่มีดาว / จุดควรมีหลายหลากมากกว่า 3 ระบุว่าทั้งหมดนี้จะถูกเก็บไว้ในฐานข้อมูลอัลกอริทึมไม่สามารถมีราคาแพงเกินไป กล่าวอีกนัยหนึ่งฉันชอบที่จะได้รับสิ่งที่ซับซ้อน O (n) (ฉันไม่รู้ว่าสิ่งนี้เป็นไปได้หรือไม่) โดยพื้นฐานแล้วสิ่งที่ฉันกำลังมองหาคือกาแลคซีที่มีลักษณะเป็นดาวหางโดยที่ดวงดาวเป็นจุดบนกราฟและการเดินทางระหว่างดวงดาวจะถูกแสดงด้วยขอบระหว่างดาวเหล่านั้น ขั้นตอนเฉพาะที่ฉันต้องแก้ไขคือ: สร้างจุดในบริเวณใกล้เคียงกับดวงดาวอื่นที่ยังไม่ได้เป็น 3 เท่า ค้นหาดาวดวงแรกที่ยังไม่มีพหุคูณเท่ากับ 3 ซึ่งจะไม่สร้างความขัดแย้งให้กับขอบ หากดาวอยู่ห่างจากหน่วย x อย่างน้อยที่สุดให้สร้างขอบระหว่างจุดสองจุด ฉันพยายามหาวิธีแก้ปัญหา แต่ทักษะคณิตศาสตร์ของฉัน …

2
วิธีแสดงกราฟที่มีหลาย ๆ ขอบที่อนุญาตระหว่างโหนดและขอบที่สามารถเลือกได้หายไป
ฉันกำลังพยายามหาว่าโครงสร้างข้อมูลชนิดใดที่จะใช้สำหรับการสร้างแบบจำลองการใช้งานเครือข่ายที่เป็นสมมุติฐานบางอย่าง ในสถานการณ์สมมติของฉันจำนวนผู้ใช้ที่เป็นศัตรูกันกำลังพยายามสร้างเครือข่ายคอมพิวเตอร์ที่รู้จักการเชื่อมต่อที่อาจเกิดขึ้นทั้งหมด คอมพิวเตอร์ที่ผู้ใช้รายหนึ่งต้องการเชื่อมต่ออาจไม่เหมือนกับคอมพิวเตอร์ที่ผู้ใช้รายอื่นต้องการเชื่อมต่อ ผู้ใช้ 1 อาจต้องเชื่อมต่อคอมพิวเตอร์ A, B และ D ในขณะที่ผู้ใช้ 2 อาจต้องเชื่อมต่อคอมพิวเตอร์ B, C และ E ภาพที่สร้างขึ้นด้วยความช่วยเหลือของผู้สร้างกราฟ NCTM ฉันคิดว่าแก่นของเรื่องนี้จะเป็นกราฟวงจรที่ไม่ได้บอกทิศทางด้วยโหนดที่เป็นตัวแทนของคอมพิวเตอร์และขอบที่แสดงสายเคเบิลอีเทอร์เน็ต อย่างไรก็ตามเนื่องจากลักษณะของสถานการณ์มีคุณสมบัติแปลก ๆ บางอย่างที่แยกแยะรายการคำคุณศัพท์และเมทริกซ์ adjacency (อย่างน้อยโดยไม่มีการดัดแปลงที่ไม่สำคัญ): ขอบสามารถใช้งานได้อย่าง จำกัด กล่าวคือหากผู้ใช้รายหนึ่งได้รับการเชื่อมต่อเครือข่ายที่กำหนดไม่มีผู้ใช้รายอื่นที่สามารถใช้การเชื่อมต่อนั้นได้ ในตัวอย่างผู้ใช้สีเขียวอาจไม่สามารถเชื่อมต่อกับคอมพิวเตอร์ A แต่ผู้ใช้สีแดงเชื่อมต่อ B ถึง E แม้ว่าจะไม่มีการเชื่อมโยงโดยตรงระหว่างพวกเขา ในบางกรณีคู่ของโหนดที่ระบุจะถูกเชื่อมต่อโดยมากกว่าหนึ่งขอบ ในตัวอย่างมีสายเคเบิลอิสระสองตัวที่รันจาก D ถึง E ดังนั้นผู้ใช้สีเขียวและสีน้ำเงินจึงสามารถเชื่อมต่อเครื่องเหล่านั้นได้โดยตรง อย่างไรก็ตามสีแดงไม่สามารถเชื่อมต่อได้อีกต่อไป หากคอมพิวเตอร์สองเครื่องเชื่อมต่อกันด้วยสายเคเบิลมากกว่าหนึ่งสายผู้ใช้แต่ละคนอาจเป็นเจ้าของได้ไม่เกินหนึ่งสาย ฉันจะต้องดำเนินการหลายอย่างในกราฟนี้เช่น: ตรวจสอบว่ามีการเชื่อมต่อคอมพิวเตอร์คู่หนึ่งโดยเฉพาะสำหรับผู้ใช้ที่กำหนด ระบุเส้นทางที่ดีที่สุดสำหรับผู้ใช้ที่กำหนดเพื่อเชื่อมต่อคอมพิวเตอร์เป้าหมาย ระบุการเชื่อมต่อคอมพิวเตอร์ที่มีเวลาแฝงสูงสุดสำหรับผู้ใช้ที่กำหนด (เช่นเส้นทางที่ยาวที่สุดโดยไม่แยกสาขา) ความคิดแรกของฉันคือการสร้างคอลเล็กชั่นทั้งหมดของขอบ แต่มันแย่มากสำหรับการค้นหา …

3
สุ่มสร้างกราฟกำกับบนตาราง
ฉันพยายามที่จะสร้างกราฟกำกับแบบสุ่มเพื่อจุดประสงค์ในการสร้างเกมไขปริศนาคล้ายกับปริศนาเลื่อนน้ำแข็งจากโปเกมอน นี้เป็นหลักสิ่งที่ฉันต้องการที่จะสามารถสร้างแบบสุ่ม: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory ฉันต้องสามารถ จำกัด ขนาดของกราฟในมิติ x และ y ได้ ในตัวอย่างที่ให้ไว้ในลิงค์มันจะถูก จำกัด ไว้ที่ตาราง 8x4 ปัญหาที่ฉันพบคือการสร้างกราฟแบบสุ่ม แต่สร้างกราฟแบบสุ่มซึ่งฉันสามารถแมปพื้นที่ในพื้นที่ 2 มิติได้อย่างเหมาะสมเนื่องจากฉันต้องการบางสิ่ง (เช่นก้อนหิน) ที่อยู่ฝั่งตรงข้ามของโหนดเพื่อทำให้เกิด มองเห็นได้ชัดเจนเมื่อคุณหยุดเลื่อน ปัญหาเกี่ยวกับเรื่องนี้คือบางครั้งก้อนหินจะสิ้นสุดลงในเส้นทางระหว่างสองโหนดอื่น ๆ หรืออาจเกิดขึ้นกับโหนดอื่นเองซึ่งทำให้กราฟทั้งหมดแตกหัก หลังจากพูดคุยปัญหากับคนไม่กี่คนที่ฉันรู้จักเรามาถึงข้อสรุปที่อาจนำไปสู่การแก้ปัญหา รวมถึงอุปสรรคในตารางเป็นส่วนหนึ่งของกราฟเมื่อสร้างมัน เริ่มต้นด้วยกริดที่เต็มไปอย่างสมบูรณ์และเพียงแค่วาดเส้นทางสุ่มและลบบล็อกที่จะทำให้เส้นทางนั้นทำงาน จากนั้นปัญหาก็จะกลายเป็นสิ่งที่คนที่จะลบเพื่อหลีกเลี่ยงการแนะนำเส้นทางเพิ่มเติมที่สั้นกว่า เรายังคิดว่าอัลกอริทึมการเขียนโปรแกรมแบบไดนามิกอาจเป็นประโยชน์แม้ว่าเราไม่มีใครมีฝีมือเกินไปในการสร้างอัลกอริทึมการเขียนโปรแกรมแบบไดนามิกจากอะไร แนวคิดหรือการอ้างอิงใด ๆ เกี่ยวกับปัญหาที่เรียกว่าเป็นทางการ (หากเป็นปัญหากราฟอย่างเป็นทางการ) จะเป็นประโยชน์มากที่สุด นี่คือตัวอย่างบางส่วนของสิ่งที่ฉันประสบความสำเร็จจนถึงเพียงแค่วางบล็อกแบบสุ่มและสร้างกราฟการนำทางจากจุดเริ่มต้น / สิ้นสุดที่เลือก แนวคิด (ตามที่อธิบายไว้ในลิงค์ก่อนหน้า) คือคุณเริ่มที่สีเขียว S และต้องการไปที่สีเขียว F. คุณทำสิ่งนี้โดยเลื่อนขึ้น / ลง / ซ้าย / ขวาและคุณดำเนินการต่อในทิศทางที่เลือกจนกว่าคุณจะตี …

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

1
การสร้างแบบจำลองตารางการทำงานที่ซับซ้อน
ฉันมีปัญหาในโลกแห่งความจริงที่ฉันพยายามเป็นตัวแทนและเป็นอัตโนมัติ ฉันทำให้มันง่ายขึ้นและเป็นนามธรรมลงไปต่อไปนี้: มีที่ทำงาน n แห่ง (P1, P2, ... , Pn) แต่ละแห่ง Pn มีรหัส Kn มีคนงาน m, (W1, W2, ... , Wm) ในการทำงานที่ Pn คนงานจะต้องถือ Kn แต่ละคีย์สามารถเก็บไว้โดยคนงานหรือปล่อยไว้ที่ Exchange, E ผู้ปฏิบัติงานสามารถเดินทางไปที่ Exchange ได้ตลอดเวลาเพื่อรับกุญแจที่ไม่มีการอ้างสิทธิ์หรือส่งกุญแจเพื่อให้ผู้อื่นใช้ ขณะนี้มีตารางงานภายนอกที่ต้องทำให้เสร็จในลำดับที่เข้มงวด ตัวอย่างเช่น: 2016-04-21 W1 ต้องทำงานที่ P6 2016-04-21 W2 ต้องทำงานที่ P3 ต้องแลกเปลี่ยนกุญแจ ** 2016-04-22 W3 ต้องทำงานที่ P3 2016-04-22 W2 ต้องทำงานที่ …

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