0Pricing
Competitive Programming Academy · บทเรียน

การรวมตามอันดับและองค์ประกอบ

ทำให้ต้นไม้แบนและนับกลุ่ม

การรวมตามอันดับและองค์ประกอบ เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน

union สามารถทำแบบไม่รีบร้อนได้

การ union แบบพื้นฐานเพียงแขวนรากหนึ่งไว้ใต้รากอีกต้น หากทำโดยไม่ระวัง อาจสร้างต้นไม้สูงที่ทำงานช้าได้ เราจึงต้องมีวิธีที่ฉลาดกว่าในการรวมราก

แนวคิดสำคัญ

การ union ตามอันดับจะนำต้นไม้ที่เตี้ยกว่าไปไว้ใต้ต้นไม้ที่สูงกว่าเสมอ การรักษาให้ต้นไม้ตื้นทำให้การ find ในภายหลังรวดเร็วยิ่งขึ้น 📏

อันดับหมายถึงอะไร

อันดับคือค่าประมาณความสูงของต้นไม้ องค์ประกอบแต่ละตัวเริ่มต้นด้วยอันดับ 0 เนื่องจากโหนดเดี่ยวไม่มีความลึกอยู่ด้านล่าง

rank = [0] * n

นำต้นไม้เตี้ยไปไว้ใต้ต้นไม้สูง

เปรียบเทียบอันดับของรากทั้งสอง รากที่มีอันดับน้อยกว่าจะกลายเป็นโหนดลูก เพื่อให้ต้นไม้รวมยังคงแบนราบมากที่สุด

if rank[ra] < rank[rb]:
    parent[ra] = rb

อันดับที่เท่ากันทำให้อันดับเพิ่ม

เมื่อรากทั้งสองมีอันดับเท่ากัน ให้เลือกฝ่ายใดฝ่ายหนึ่งเป็นรากใหม่ แล้วเพิ่มอันดับของรากนั้นขึ้นหนึ่ง เนื่องจากต้นไม้มีความสูงเพิ่มขึ้นอีกหนึ่งระดับ

else:
    parent[rb] = ra
    if rank[ra] == rank[rb]:
        rank[ra] += 1

รูปแบบการ union ตามขนาด

ทางเลือกที่ได้รับความนิยมคือการ union ตามขนาด โดยนำเซตที่เล็กกว่าไปไว้ใต้เซตที่ใหญ่กว่า วิธีนี้มีประสิทธิภาพเทียบเท่ากัน และยังได้ขนาดของกลุ่มมาโดยไม่เสียค่าใช้จ่ายเพิ่มเติม

นับจำนวนองค์ประกอบ

เริ่มนับที่ n เนื่องจากองค์ประกอบทุกตัวเป็นกลุ่มของตัวเอง การ union ที่สำเร็จแต่ละครั้งจะรวมสองกลุ่มเป็นหนึ่งกลุ่ม ดังนั้นจึงลดค่าลงหนึ่ง

components = n

ข้ามการ union ที่ไม่ทำอะไร

หากองค์ประกอบสองตัวมีรากเดียวกันอยู่แล้ว การ union จะไม่ทำอะไร ให้ลดจำนวนลงเฉพาะเมื่อรากของทั้งสองแตกต่างกันจริง ๆ

if find(a) != find(b):
    union(a, b)
    components -= 1

อันดับร่วมกับการบีบอัด

รวมการ union ตามอันดับเข้ากับการบีบอัดเส้นทาง แล้ว DSU จะทำงานในเวลาแบบอินเวอร์ส-แอกเคอร์มันน์ ซึ่งแทบจะเป็นค่าคงที่สำหรับข้อมูลนำเข้าจริงทุกชนิด ⚡

ดูขนาดกลุ่มเมื่อจำเป็น

เมื่อใช้การ union ตามขนาด คุณสามารถตอบได้ทันทีว่ากลุ่มใดมีขนาดเท่าไร เพียงอ่านขนาดที่เก็บไว้ ณ รากขององค์ประกอบนั้น

group = size[find(x)]

ประโยชน์ของเรื่องนี้

การนับองค์ประกอบช่วยตอบคำถามคลาสสิก เช่น มีวงเพื่อนหรือบริเวณที่เชื่อมต่อกันกี่แห่ง หลังจากเรียกการรวมกลุ่มหลายครั้ง 🌐

ตรวจสอบอย่างรวดเร็ว

ลองพิจารณาว่าตัวนับองค์ประกอบเปลี่ยนแปลงอย่างไร

ทบทวน

คุณได้เรียนรู้การรวมกลุ่มตามอันดับเพื่อทำให้ต้นไม้แบนลง รวมถึงวิธีติดตามจำนวนองค์ประกอบและขนาดของกลุ่ม ตอนนี้ DSU ทำงานได้เร็วมากแล้ว! 🎉

คำถามที่พบบ่อย

บทเรียน “การรวมตามอันดับและองค์ประกอบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การรวมตามอันดับและองค์ประกอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การรวมตามอันดับและองค์ประกอบ”

ทำให้ต้นไม้แบนและนับกลุ่ม คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การรวมตามอันดับและองค์ประกอบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม

ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. DSU พร้อมการบีบอัดพาธ
  2. การรวมตามอันดับและองค์ประกอบ
  3. ต้นไม้ทอดข้ามขั้นต่ำของ Kruskal
  4. MST ของ Prim ด้วยฮีป
← กลับไปที่ Competitive Programming Academy