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

เหตุใดการเรียงก่อนจึงปลดล็อกวิธีแก้

การเตรียมใช้วิธีโลภและตัวชี้สองตัวหลังการเรียง

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

การเรียงลำดับคือการเตรียมการ

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

การเรียงลำดับช่วยให้ใช้ตัวชี้สองตัวได้

เมื่อข้อมูลเรียงลำดับแล้ว ตัวชี้สองตัว จะกวาดจากปลายทั้งสองด้าน การค้นหาคู่ที่มีผลรวมตามเป้าหมายจึงลดจาก O(n กำลังสอง) เหลือ O(n)

การเรียงลำดับช่วยให้ค้นหาแบบไบนารีได้

อาร์เรย์ที่เรียงลำดับแล้วเป็นจุดเริ่มต้นของ การค้นหาแบบไบนารี เมื่อมีลำดับแล้ว คุณจะค้นหาค่าหรือจุดแทรกได้ใน O(log n)

from bisect import bisect_left
i = bisect_left(sorted_nums, target)

อัลกอริทึมแบบโลภมักต้องเรียงลำดับ

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

เรียงลำดับเพื่อมองหาค่าซ้ำ

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

for i in range(1, len(a)):
    if a[i] == a[i-1]:
        print("dup", a[i])

ช่วงเวลาต้องเรียงตามจุดเริ่มต้น

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

intervals.sort(key=lambda iv: iv[0])

การเรียงลำดับเผยให้เห็นมัธยฐาน

สมาชิกตรงกลางหลังการเรียงลำดับคือ มัธยฐาน และช่องว่างระหว่างสมาชิกข้างเคียงจะเห็นได้ชัดเจน ปัญหาเกี่ยวกับระยะทางหลายอย่างอาศัยแนวคิดนี้

เผื่อค่าใช้จ่ายเพิ่มเติม

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

ระวังการสูญเสียดัชนีเดิม

การเรียงลำดับทำให้ตำแหน่งต่าง ๆ สลับกัน หากคำตอบต้องใช้ ดัชนีเดิม ให้เรียงคู่ของค่ากับดัชนี เพื่อให้กู้คืนตำแหน่งนั้นได้

order = sorted(range(n), key=lambda i: a[i])

ถามว่า การมีลำดับจะช่วยหรือไม่

เมื่อคิดไม่ออก ให้ถามว่าการมี ลำดับ จะทำให้เรื่องต่าง ๆ ง่ายขึ้นหรือไม่ หากใช่ ให้ sort ก่อน แล้วแนวทางแบบตัวชี้สองตัว แบบโลภ หรือการค้นหาแบบไบนารีมักจะปรากฏขึ้น

การเรียงลำดับควรเป็นสัญชาตญาณแรก

ผู้แก้ปัญหาที่เก่งมักลอง การเรียงลำดับ ตั้งแต่ต้นเป็นการทดลองพื้นฐาน วิธีนี้เพิ่มได้ไม่ยากและมักเผยให้เห็นคำตอบทั้งหมด

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

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

สรุปทบทวน

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

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

บทเรียน “เหตุใดการเรียงก่อนจึงปลดล็อกวิธีแก้” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เหตุใดการเรียงก่อนจึงปลดล็อกวิธีแก้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “เหตุใดการเรียงก่อนจึงปลดล็อกวิธีแก้” ใช้เวลานานแค่ไหน

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

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

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

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

  1. sorted() และฟังก์ชัน key
  2. เรียงตามหลายฟิลด์
  3. ลำดับกำหนดเองด้วย functools.cmp_to_key
  4. เหตุใดการเรียงก่อนจึงปลดล็อกวิธีแก้
← กลับไปที่ Competitive Programming Academy