0Pricing
Coding Interview Prep · บทเรียน

สร้างเซตย่อยทั้งหมด

เลือกหรือข้ามแต่ละสมาชิก

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

เหตุผลที่ต้องสร้างเซตย่อย

โจทย์การแข่งขันจำนวนมากขอให้ลองเซตย่อยทุกเซตของเซตขนาดเล็ก การเรียกซ้ำช่วยให้แสดงรายการทั้งหมดได้อย่างเป็นระเบียบและเชื่อถือได้ 🧩

เลือกหรือข้ามสมาชิกแต่ละตัว

แนวคิดหลักคือ สำหรับสมาชิกแต่ละตัว ให้สร้างทางเลือกแบบไบนารีหนึ่งครั้งว่าจะรวมสมาชิกนั้นไว้หรือไม่นำมารวม ทางเลือกครบทุกชุดจะให้เซตย่อยหนึ่งเซต

มีเซตย่อยกี่เซต

เซตที่มีสมาชิก n ตัวจะมี2 ยกกำลัง n เซตย่อยพอดี เพราะสมาชิกแต่ละตัวทำให้จำนวนเพิ่มเป็นสองเท่า ดังนั้นควรรักษา n ให้เล็ก ประมาณ 20 หรือน้อยกว่า

แผนการเรียกซ้ำ

เลื่อนดัชนีไปตามอาร์เรย์ ที่แต่ละดัชนีให้แตกกิ่งสองทาง ได้แก่ เลือกสมาชิกหนึ่งทาง และข้ามสมาชิกอีกทาง

กรณีฐาน

เมื่อดัชนีเลยสมาชิกตัวสุดท้าย เส้นทางปัจจุบันคือเซตย่อยที่สมบูรณ์หนึ่งเซต ช่วงเวลานั้นคือกรณีฐานสำหรับบันทึกเซตย่อย

การเรียกซ้ำเพื่อสร้างเซตย่อยในโค้ด

การไล่สำรวจแบบเรียกซ้ำนี้บันทึกเซตย่อยที่จุดสิ้นสุด แล้วสำรวจทางเลือกข้ามและเลือกจากแต่ละดัชนี

def gen(i, cur):
    if i == len(a):
        out.append(cur[:])
        return
    gen(i + 1, cur)
    gen(i + 1, cur + [a[i]])

ย้อนกลับด้วยการยกเลิกการเลือก

เมื่อใช้ append เพื่อเพิ่มสมาชิก ให้ลบสมาชิกนั้นออกหลังการเรียกซ้ำ เพื่อให้กิ่งถัดไปเริ่มต้นอย่างสะอาด ขั้นตอนการยกเลิกนี้คือหัวใจของการย้อนกลับ

cur.append(a[i])
gen(i + 1, cur)
cur.pop()

ทางเลือกแบบบิตมาสก์

นอกจากนี้ยังสามารถจับคู่จำนวนเต็มแต่ละจำนวนตั้งแต่ 0 ถึง 2 ยกกำลัง n ลบ 1 กับเซตย่อยหนึ่งเซต โดยให้แต่ละบิตระบุว่าสมาชิกตัวใดถูกรวมไว้

for mask in range(1 << n):
    sub = [a[i] for i in range(n) if mask >> i & 1]

ทำสำเนาก่อนจัดเก็บ

จัดเก็บสำเนาของรายการปัจจุบันเสมอ ไม่ใช่ตัวรายการเอง มิฉะนั้นการเปลี่ยนแปลงภายหลังจะเขียนทับเซตย่อยทุกเซตที่บันทึกไว้ ⚠️

การสร้าง combinations

หากต้องการเซตย่อยที่มีขนาดคงที่ k ให้หยุดกิ่งเมื่อจำนวนสมาชิกที่เลือกถึง k วิธีนี้จะเปลี่ยนการสร้างเซตย่อยให้เป็นการสร้าง combinations

เซตย่อยปรากฏในงานใดบ้าง

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

ตรวจสอบความเข้าใจ

เซตที่มีสมาชิก n ตัวจะมีเซตย่อยกี่เซต

สรุปทบทวน: แตกกิ่งที่สมาชิกทุกตัว

ได้เรียนรู้การแสดงรายการเซตย่อยทั้งหมดด้วยการเลือกหรือข้ามสมาชิกแต่ละตัว และยกเลิกการเลือกหลังแต่ละกิ่ง ควรรักษา n ให้เล็ก เพราะจำนวนเซตคือ 2 ยกกำลัง n 🎯

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

บทเรียน “สร้างเซตย่อยทั้งหมด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “สร้างเซตย่อยทั้งหมด”

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

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

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

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

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

ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม

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

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

  1. คิดแบบเวียนเกิด: ฐานและการเรียกซ้ำ
  2. สร้างเซตย่อยทั้งหมด
  3. การเรียงสับเปลี่ยนและแนวคิด N-Queens
  4. ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา
← กลับไปที่ Coding Interview Prep