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

nCr ด้วยแฟกทอเรียลที่คำนวณล่วงหน้า

นับการจัดหมู่แบบมอดูลัสจำนวนเฉพาะ

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

นับจำนวนวิธีเลือก

โจทย์จำนวนมากถามว่ามีวิธีเลือกสมาชิก r ตัวจาก n ตัวได้กี่วิธี ซึ่งเขียนเป็น nCr การแข่งขันต้องการคำนวณจำนวนนั้นภายใต้โมดูลัสจำนวนเฉพาะ 🧮

สูตรแฟกทอเรียล

สูตรพื้นฐานคือ nCr เท่ากับ n แฟกทอเรียล หารด้วย r แฟกทอเรียลคูณด้วย n ลบ r แฟกทอเรียล แต่ปัญหาคือการหารภายใต้โมดูลัส

# nCr = n! / (r! * (n-r)!)

แฟกทอเรียลขยายตัวอย่างรวดเร็ว

แฟกทอเรียลเพียงตัวเดียวก็มีค่าเพิ่มขึ้นมหาศาล ดังนั้นให้หาเศษของแต่ละค่าด้วย p วิธีนี้ทำให้ทุกค่ามีขนาดเล็ก ขณะที่สูตรยังคงถูกต้องภายใต้โมดูลัส

คำนวณแฟกทอเรียลทั้งหมดล่วงหน้า

สร้างอาร์เรย์แฟกทอเรียลไว้ครั้งเดียวจนถึงค่า n มากที่สุดที่ต้องใช้ แต่ละสมาชิกมีค่าเท่ากับสมาชิกก่อนหน้าคูณด้วยดัชนี แล้วหาเศษด้วย p ไปเรื่อย ๆ

fact[i] = fact[i-1] * i % MOD

การหารต้องใช้อินเวอร์ส

สูตรนี้หารด้วยแฟกทอเรียลสองค่า ดังนั้นคุณจึงต้องใช้อินเวอร์สแบบโมดูลัสของทั้งสองค่า โปรดจำไว้ว่าอินเวอร์สจะเปลี่ยนการหารให้เป็นการคูณที่ทำได้อย่างสะอาด

หาอินเวอร์สของแฟกทอเรียลตัวบน

คำนวณอินเวอร์สของแฟกทอเรียลที่มีค่ามากที่สุดเพียงครั้งเดียวด้วยแฟร์มาต์ โดยใช้ pow กับเลขชี้กำลัง p ลบ 2 การเรียกเพียงครั้งเดียวนั้นจะเป็นจุดเริ่มต้นของค่าที่เหลือ

inv_fact[n] = pow(fact[n], MOD - 2, MOD)

คำนวณอินเวอร์สย้อนกลับ

หาอินเวอร์สของแฟกทอเรียลตัวอื่น ๆ ด้วยการวนย้อนกลับเพียงครั้งเดียว โดยแต่ละค่าคำนวณจากค่าถัดไปคูณด้วยดัชนี ไม่ต้องเรียก pow เพิ่ม

inv_fact[i] = inv_fact[i+1] * (i+1) % MOD

ประกอบ nCr

ตอนนี้ nCr เป็นเพียง fact[n] คูณด้วย inv_fact[r] คูณด้วย inv_fact[n ลบ r] แล้วหาเศษด้วย p แต่ละคำขอใช้การเข้าถึงข้อมูลสามครั้งและการคูณสองครั้ง

C = fact[n] * inv_fact[r] % MOD * inv_fact[n-r] % MOD

แต่ละคำขอใช้เวลาเพียงชั่วพริบตา

หลังจากคำนวณล่วงหน้าแล้ว คำตอบของการจัดหมู่แต่ละครั้งใช้เวลา O(1) นี่จึงเป็นรูปแบบที่มีประสิทธิภาพมากเมื่อโจทย์ถามค่า nCr หลายพันค่า

จัดการกรณีขอบ

หาก r ติดลบหรือมากกว่า n คำตอบคือ 0 ให้ตรวจสอบขอบเขตนี้ก่อน เพื่อไม่ให้เข้าถึงตำแหน่งนอกอาร์เรย์แฟกทอเรียล

if r < 0 or r > n: return 0

กำหนดขนาดอาร์เรย์เผื่อไว้

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

N = 200005

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

หลังจากคำนวณล่วงหน้าแล้ว คำขอ nCr หนึ่งครั้งใช้เวลาเท่าใด

ทบทวน

คุณคำนวณแฟกทอเรียลและอินเวอร์สของแฟกทอเรียลไว้ครั้งเดียว จากนั้นตอบแต่ละ nCr ในเวลา O(1) ด้วยการเข้าถึงข้อมูลสามครั้ง ตรวจสอบขอบเขตของ r และจัดสรรอาร์เรย์ให้มีขนาดเพียงพอ 🏆

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

บทเรียน “nCr ด้วยแฟกทอเรียลที่คำนวณล่วงหน้า” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “nCr ด้วยแฟกทอเรียลที่คำนวณล่วงหน้า”

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

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

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

บทเรียน “nCr ด้วยแฟกทอเรียลที่คำนวณล่วงหน้า” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การคำนวณมอดูโลจำนวนเฉพาะ
  2. การยกกำลังมอดูลัสอย่างรวดเร็ว
  3. อินเวอร์สเชิงมอดูลัสด้วยแฟร์มาต์
  4. nCr ด้วยแฟกทอเรียลที่คำนวณล่วงหน้า
← กลับไปที่ Coding Interview Prep