เพื่อเพิ่มคำตอบของ keyser5053 เกี่ยวกับการใช้หน่วยความจำ
สำหรับกราฟกำกับใด ๆ เมทริกซ์ adjacency (ที่ 1 บิตต่อขอบ) จะใช้n^2 * (1)
หน่วยความจำบิต
สำหรับกราฟที่สมบูรณ์รายการ adjacency (พร้อมตัวชี้ 64 บิต) จะใช้n * (n * 64)
หน่วยความจำบิตโดยไม่รวมค่าใช้จ่ายในรายการ
สำหรับกราฟที่ไม่สมบูรณ์รายการ adjacency จะใช้0
หน่วยความจำบิตโดยไม่รวมค่าใช้จ่ายในรายการ
สำหรับรายการ adjacency คุณสามารถใช้สูตรต่อไปนี้เพื่อกำหนดจำนวนขอบสูงสุด ( e
) ก่อนที่เมทริกซ์ adjacency จะเหมาะสมที่สุดสำหรับหน่วยความจำ
edges = n^2 / s
เพื่อกำหนดจำนวนขอบสูงสุดs
ขนาดตัวชี้ของแพลตฟอร์มอยู่ที่ใด
หากคุณกราฟกำลังมีการปรับปรุงแบบไดนามิกคุณสามารถรักษาประสิทธิภาพนี้กับนับขอบเฉลี่ย (ต่อโหนด) n / s
ของ
ตัวอย่างบางส่วนที่มีตัวชี้ 64 บิตและกราฟไดนามิก (กราฟไดนามิกจะอัปเดตวิธีแก้ปัญหาอย่างมีประสิทธิภาพหลังการเปลี่ยนแปลงแทนที่จะคำนวณใหม่ตั้งแต่ต้นทุกครั้งหลังจากทำการเปลี่ยนแปลง)
สำหรับกราฟกำกับโดยที่n
300 จำนวนขอบที่เหมาะสมที่สุดต่อโหนดโดยใช้รายการ adjacency คือ:
= 300 / 64
= 4
หากเราเสียบสิ่งนี้เข้ากับสูตรของ keyser5053 d = e / n^2
( e
จำนวนขอบรวมอยู่ที่ใด) เราจะเห็นว่าเราอยู่ต่ำกว่าจุดพัก ( 1 / s
):
d = (4 * 300) / (300 * 300)
d < 1/64
aka 0.0133 < 0.0156
อย่างไรก็ตาม 64 บิตสำหรับตัวชี้อาจมากเกินไป หากคุณใช้จำนวนเต็ม 16 บิตแทนตัวชี้ออฟเซ็ตเราสามารถใส่ขอบได้สูงสุด 18 ขอบก่อนจุดแตกหัก
= 300 / 16
= 18
d = ((18 * 300) / (300^2))
d < 1/16
aka 0.06 < 0.0625
แต่ละตัวอย่างเหล่านี้ไม่สนใจค่าใช้จ่ายของ adjacency แสดงรายการตัวเอง ( 64*2
สำหรับเวกเตอร์และตัวชี้ 64 บิต)