ผมก็บอกว่าเราจะใช้รายการถ้ากราฟเป็นป่าโปร่งและเมทริกซ์ถ้ากราฟหนาแน่น สำหรับฉันมันเป็นเพียงคำจำกัดความดิบ ฉันไม่เห็นอะไรมากไปกว่านั้น คุณช่วยอธิบายได้ไหมว่าจะเป็นทางเลือกโดยธรรมชาติเมื่อใด
ขอบคุณล่วงหน้า!
ผมก็บอกว่าเราจะใช้รายการถ้ากราฟเป็นป่าโปร่งและเมทริกซ์ถ้ากราฟหนาแน่น สำหรับฉันมันเป็นเพียงคำจำกัดความดิบ ฉันไม่เห็นอะไรมากไปกว่านั้น คุณช่วยอธิบายได้ไหมว่าจะเป็นทางเลือกโดยธรรมชาติเมื่อใด
ขอบคุณล่วงหน้า!
คำตอบ:
ก่อนอื่นให้ทราบว่ากระจัดกระจายหมายความว่าคุณมีขอบน้อยมากและหนาแน่นหมายถึงขอบจำนวนมากหรือกราฟเกือบสมบูรณ์ ในกราฟที่สมบูรณ์คุณมีขอบโดยที่คือจำนวนโหนด
ตอนนี้เมื่อเราใช้การแทนเมทริกซ์เราจะจัดสรร matrix เพื่อเก็บข้อมูลการเชื่อมต่อโหนดเช่นหากมีขอบระหว่างโหนดและมิฉะนั้น0
แต่ถ้าเราใช้รายการ adjacency เราจะมีอาร์เรย์ของโหนดและแต่ละโหนดจะชี้ไปที่รายการ adjacency ที่มีเฉพาะโหนดที่อยู่ใกล้เคียงเท่านั้น
ทีนี้ถ้ากราฟกระจัดกระจายและเราใช้การแทนเมทริกซ์แล้วเมทริกซ์เซลล์ส่วนใหญ่ยังไม่ได้ใช้ซึ่งนำไปสู่การสูญเสียความทรงจำ ดังนั้นเรามักจะไม่ใช้การแทนเมทริกซ์สำหรับกราฟกระจาย เราชอบรายการคำคุณศัพท์
แต่ถ้ากราฟมีความหนาแน่นจำนวนของขอบจะใกล้เคียงกับ (สมบูรณ์)หรือถึงหากกราฟกำกับด้วยลูป ดังนั้นจึงไม่มีความได้เปรียบในการใช้รายการ adjacency มากกว่า matrix
ในแง่ของความซับซ้อนของพื้นที่
เมทริกซ์ Adjacency:
รายการ Adjacency:
โดยที่คือจำนวนโหนดโหนดคือจำนวนขอบ
เมื่อกราฟเป็นต้นไม้ที่ไม่ได้บอกทิศทางดังนั้น
Adjacency matrix:
รายการ Adjacency:คือ (ดีกว่า )O ( n + n ) O ( n ) n 2
เมื่อกราฟถูกชี้นำให้สมบูรณ์โดยมีการวนรอบตัวเองแล้ว
Adjacency matrix:
รายการ Adjacency:คือ (ไม่แตกต่างกัน)O ( n + n 2 ) O ( n 2 )
และในที่สุดเมื่อคุณใช้เมทริกซ์โดยใช้การตรวจสอบหากมีขอบระหว่างสองโหนดใช้เวลาครั้งในขณะที่มีรายชื่อถ้อยคำมันอาจจะใช้เวลาในการเชิงเส้นnn
คำตอบโดยการเปรียบเทียบง่ายๆ .. ถ้าคุณต้องเก็บน้ำ 6 ออนซ์คุณ (พูดโดยทั่วไป) ทำกับภาชนะ 5 แกลลอนหรือถ้วย 8 ออนซ์หรือไม่
ทีนี้กลับมาที่คำถามของคุณ .. ถ้าเมทริกซ์ส่วนใหญ่ของคุณว่างเปล่าทำไมต้องใช้มัน? เพียงแค่แสดงรายการแต่ละค่าแทน อย่างไรก็ตามหากรายการของคุณยาวจริงๆทำไมไม่ใช้เมทริกซ์เพื่อย่อมัน
เหตุผลที่อยู่เบื้องหลัง list vs matrix นั้นง่ายมากในกรณีนี้
PS รายการเป็นแค่เมทริกซ์คอลัมน์เดียว !!! (พยายามแสดงให้คุณเห็นว่าการตัดสินใจ / สถานการณ์เป็นไปโดยพลการ)
พิจารณากราฟที่มี nodes และ edge ไม่สนใจคำสั่งต่ำสุดเมทริกซ์บิตสำหรับกราฟจะใช้บิตไม่ว่าจะมีขอบจำนวนเท่าใดE N 2
อย่างไรก็ตามคุณต้องการบิตจำนวนเท่าใด
สมมติว่าขอบมีความเป็นอิสระจำนวนกราฟกับโหนดและขอบเป็นE} จำนวนขั้นต่ำของบิตที่จำเป็นในการเก็บเซตนี้เป็นE}E
เราจะสมมติโดยไม่มีการสูญเสียความเห็นที่นั่นคือครึ่งหนึ่งหรือน้อยกว่านั้นมีอยู่ หากไม่เป็นเช่นนั้นเราสามารถจัดเก็บชุดของ "non-edge" แทน
ถ้า ,ดังนั้นการแทนเมทริกซ์จึงเหมาะสมที่สุด หากใช้การประมาณของ Stirling และเลขคณิตเล็กน้อยเราจะพบ:
หากคุณพิจารณาว่าคือขนาดของจำนวนเต็มซึ่งสามารถแทนค่าดัชนีโหนดการแทนค่าที่ดีที่สุดคืออาร์เรย์ของรหัสโหนดนั่นคืออาร์เรย์ของดัชนีโหนดคู่
ต้องบอกว่าการวัดที่ดีของ sparsity คือเอนโทรปีซึ่งเป็นจำนวนบิตต่อขอบของการแสดงที่ดีที่สุด ถ้าคือน่าจะเป็นที่ขอบเป็นปัจจุบันเอนโทรปีคือ(1-P)} สำหรับ , เอนโทรปีคือ 2 (เช่นสองบิตต่อขอบในการแสดงที่ดีที่สุด) และกราฟมีความหนาแน่น ถ้าเอนโทรปีมีค่ามากกว่า 2 อย่างมีนัยสำคัญและโดยเฉพาะอย่างยิ่งถ้ามันใกล้เคียงกับขนาดของตัวชี้กราฟจะกระจัดกระจาย